Cách xóa dấu chấm câu khỏi tệp văn bản và chuỗi trong Python

Trước tiên, bạn phải làm sạch văn bản của mình, nghĩa là chia văn bản thành các từ và xử lý dấu câu và cách viết hoa

Trên thực tế, có cả bộ phương pháp soạn thảo văn bản mà bạn có thể cần sử dụng và việc lựa chọn phương pháp thực sự phụ thuộc vào tác vụ xử lý ngôn ngữ tự nhiên của bạn

Trong hướng dẫn này, bạn sẽ khám phá cách bạn có thể làm sạch và chuẩn bị văn bản sẵn sàng để lập mô hình bằng máy học

Sau khi hoàn thành hướng dẫn này, bạn sẽ biết

  • Cách bắt đầu bằng cách phát triển các công cụ làm sạch văn bản rất đơn giản của riêng bạn
  • Cách tiến một bước và sử dụng các phương pháp phức tạp hơn trong thư viện NLTK
  • Cách chuẩn bị văn bản khi sử dụng các phương pháp biểu diễn văn bản hiện đại như nhúng từ

Bắt đầu dự án của bạn với cuốn sách mới của tôi Học sâu để xử lý ngôn ngữ tự nhiên, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ

Bắt đầu nào

  • Cập nhật tháng 11/2017. Đã sửa lỗi đánh máy mã trong phần 'chia thành các từ', cảm ơn David Comfort

Cách phát triển các mô hình Perceptron nhiều lớp để dự báo chuỗi thời gian
Ảnh của Cục quản lý đất đai, bảo lưu một số quyền.

Hướng dẫn tổng quan

Hướng dẫn này được chia thành 6 phần;

  1. Biến thái của Franz Kafka
  2. Làm sạch văn bản là nhiệm vụ cụ thể
  3. Mã thông báo thủ công
  4. Token hóa và dọn dẹp với NLTK
  5. Cân nhắc làm sạch văn bản bổ sung
  6. Mẹo làm sạch văn bản để nhúng Word

Cần trợ giúp với Deep Learning cho dữ liệu văn bản?

Tham gia khóa học xử lý sự cố email miễn phí trong 7 ngày của tôi ngay bây giờ [có mã]

Nhấp để đăng ký và cũng nhận được phiên bản PDF Ebook miễn phí của khóa học

Bắt đầu khóa học cấp tốc MIỄN PHÍ của bạn ngay bây giờ

Biến thái của Franz Kafka

Hãy bắt đầu bằng cách chọn một tập dữ liệu

Trong hướng dẫn này, chúng tôi sẽ sử dụng văn bản từ cuốn sách Metamorphosis của Franz Kafka. Không có lý do cụ thể, ngoài việc nó ngắn, tôi thích nó và bạn cũng có thể thích nó. Tôi mong nó là một trong những tác phẩm kinh điển mà hầu hết học sinh phải đọc ở trường

Toàn văn của Metamorphosis có sẵn miễn phí từ Project Gutenberg

  • Biến thái của Franz Kafka trong Dự án Gutenberg

Bạn có thể tải bản mã ASCII của văn bản tại đây

  • Metamorphosis của Franz Kafka Văn bản thuần túy UTF-8 [có thể cần tải trang hai lần]

Tải xuống tệp và đặt nó vào thư mục làm việc hiện tại của bạn với tên tệp là “biến chất. txt“

Tệp chứa thông tin đầu trang và chân trang mà chúng tôi không quan tâm, cụ thể là thông tin về bản quyền và giấy phép. Mở tệp và xóa thông tin đầu trang và chân trang và lưu tệp với tên “metamorphosis_clean. txt“

Phần đầu của tệp sạch sẽ giống như

Một buổi sáng, khi Gregor Samsa tỉnh dậy sau những giấc mơ rắc rối, anh thấy mình đang nằm trên giường biến thành một con sâu bọ khủng khiếp.

Tệp phải kết thúc bằng

Và, như để xác nhận những ước mơ và ý định tốt đẹp mới của họ, ngay khi họ đến đích, Grete là người đầu tiên đứng dậy và vươn vai.

Gregor tội nghiệp…

Làm sạch văn bản là nhiệm vụ cụ thể

Sau khi thực sự nắm được dữ liệu văn bản của bạn, bước đầu tiên trong việc dọn dẹp dữ liệu văn bản là có ý tưởng rõ ràng về những gì bạn đang cố gắng đạt được và trong bối cảnh đó, hãy xem lại văn bản của bạn để xem chính xác điều gì có thể giúp ích cho bạn

Hãy dành một chút thời gian để xem văn bản. Bạn để ý những gì?

Đây là những gì tôi thấy

  • Đó là văn bản thuần túy nên không có đánh dấu để phân tích cú pháp [yay. ]
  • Bản dịch của nguyên bản tiếng Đức sử dụng tiếng Anh Anh [e. g. "đi du lịch"]
  • Các dòng được bao bọc một cách giả tạo bằng các dòng mới với khoảng 70 ký tự [meh]
  • Không có lỗi đánh máy hoặc lỗi chính tả rõ ràng
  • Có dấu chấm câu như dấu phẩy, dấu nháy đơn, dấu ngoặc kép, dấu chấm hỏi, v.v.
  • Có các mô tả có gạch nối như “giống như áo giáp”
  • Có rất nhiều cách sử dụng dấu gạch ngang [“-“] để tiếp tục câu [có thể thay thế bằng dấu phẩy?]
  • Có tên [e. g. "Ông. luân hồi“]
  • Dường như không có số nào cần xử lý [e. g. 1999]
  • Có đánh dấu phần [e. g. “II” và “III”], và chúng tôi đã loại bỏ chữ “I” đầu tiên

Tôi chắc chắn rằng còn nhiều điều nữa đang xảy ra với con mắt được đào tạo

Chúng ta sẽ xem xét các bước làm sạch văn bản chung trong hướng dẫn này

Tuy nhiên, hãy xem xét một số mục tiêu khả thi mà chúng ta có thể có khi làm việc với tài liệu văn bản này

Ví dụ

  • Nếu chúng tôi quan tâm đến việc phát triển một mô hình ngôn ngữ Kafkaesque, chúng tôi có thể muốn giữ nguyên tất cả các trường hợp, dấu ngoặc kép và dấu chấm câu khác
  • Nếu chúng ta quan tâm đến việc phân loại các tài liệu là “Kafka” và “Không phải Kafka”, có lẽ chúng ta sẽ muốn bỏ cách viết hoa, dấu chấm câu và thậm chí cắt các từ về gốc của chúng

Sử dụng nhiệm vụ của bạn làm ống kính để chọn cách chuẩn bị dữ liệu văn bản của bạn

Mã thông báo thủ công

Làm sạch văn bản rất khó, nhưng văn bản chúng tôi đã chọn để làm việc đã khá sạch rồi

Chúng tôi chỉ có thể viết một số mã Python để dọn dẹp thủ công và đây là một bài tập tốt cho những vấn đề đơn giản mà bạn gặp phải. Các công cụ như biểu thức chính quy và tách chuỗi có thể giúp bạn đi một chặng đường dài

1. Tải dữ liệu

Hãy tải dữ liệu văn bản để chúng ta có thể làm việc với nó

Văn bản nhỏ và sẽ tải nhanh và dễ dàng phù hợp với bộ nhớ. Điều này không phải lúc nào cũng đúng và bạn có thể cần viết mã vào bộ nhớ ánh xạ tệp. Các công cụ như NLTK [được đề cập trong phần tiếp theo] sẽ giúp làm việc với các tệp lớn dễ dàng hơn nhiều

Chúng ta có thể tải toàn bộ “metamorphosis_clean. txt” vào bộ nhớ như sau

1

2

3

4

5

# tải văn bản

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

Chạy ví dụ tải toàn bộ tệp vào bộ nhớ sẵn sàng hoạt động với

2. Chia theo khoảng trắng

Văn bản sạch thường có nghĩa là một danh sách các từ hoặc mã thông báo mà chúng ta có thể làm việc với các mô hình máy học của mình

Điều này có nghĩa là chuyển đổi văn bản thô thành một danh sách các từ và lưu lại

Một cách rất đơn giản để thực hiện việc này là chia tài liệu theo khoảng trắng, bao gồm ” “, dòng mới, tab, v.v. Chúng ta có thể làm điều này trong Python với hàm split[] trên chuỗi đã tải

1

2

3

4

5

6

7

8

# tải văn bản

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành các từ bằng khoảng trắng

từ = văn bản. tách[]

in[từ[. 100]]

Chạy ví dụ này sẽ chia tài liệu thành một danh sách dài các từ và in 100 từ đầu tiên để chúng tôi xem lại

Chúng ta có thể thấy rằng dấu câu được giữ nguyên [e. g. "không" và "giống như áo giáp"], thật tuyệt. Chúng ta cũng có thể thấy rằng dấu chấm câu cuối câu được giữ nguyên với từ cuối cùng [e. g. "tư tưởng. ”], điều đó không tuyệt vời

1

['Một', 'buổi sáng', 'khi', 'Gregor', 'Samsa', 'thức dậy', 'từ', 'gặp rắc rối', 'giấc mơ', 'anh ấy', 'tìm thấy', 'chính mình' . ', 'Anh ấy', 'nằm', 'trên', 'của anh ấy', 'giống như áo giáp', 'lưng', 'và', 'nếu', 'anh ấy', 'nâng lên', 'của anh ấy', ' . ', 'Cái', 'bộ đồ giường', 'đã', 'hầu như', 'có thể', 'đến', 'che', 'nó', 'và', 'dường như', 'sẵn sàng', 'đến', . ', 'Của anh ấy', 'nhiều', 'chân', 'đáng thương', 'gầy', 'so sánh', 'với', 'the', 'size', 'of', 'the', 'rest' . ', '"Chuyện gì', 'đã xảy ra', 'với', 'tôi?"', 'anh ấy', 'nghĩ. ', 'Nó', "đã không", 'a', 'giấc mơ. ', 'Của anh ấy', 'phòng', 'a', 'thích hợp', 'con người']

3. Chọn từ

Một cách tiếp cận khác có thể là sử dụng mô hình biểu thức chính quy [tái] và chia tài liệu thành các từ bằng cách chọn các chuỗi ký tự chữ và số [a-z, A-Z, 0-9 và '_']

Ví dụ

1

2

3

4

5

6

7

8

9

# tải văn bản

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# phân chia chỉ dựa trên các từ

nhập lại

từ = lại. tách[r'\W+', text]

in[từ[. 100]]

Một lần nữa, chạy ví dụ, chúng ta có thể thấy rằng chúng ta có danh sách các từ. Lần này, chúng ta có thể thấy “armour-like” giờ đây là hai từ “armour” và “like” [tốt] nhưng các từ rút gọn như “What’s” cũng là hai từ “What” và “s” [không tuyệt]

1

['Một', 'buổi sáng', 'khi', 'Gregor', 'Samsa', 'thức dậy', 'từ', 'gặp rắc rối', 'giấc mơ', 'anh ấy', 'tìm thấy', 'chính mình', '

3. Chia theo khoảng trắng và xóa dấu câu

Ghi chú. Ví dụ này được viết cho Python 3

Chúng tôi có thể muốn các từ, nhưng không có dấu chấm câu như dấu phẩy và dấu ngoặc kép. Chúng tôi cũng muốn giữ các cơn co thắt cùng nhau

Một cách là chia tài liệu thành các từ bằng khoảng trắng [như trong “2. Chia theo khoảng trắng“], sau đó sử dụng dịch chuỗi để thay thế tất cả dấu chấm câu bằng không có gì [e. g. gỡ bỏ nó]

Python cung cấp một hằng số được gọi là chuỗi. dấu chấm câu cung cấp một danh sách tuyệt vời các ký tự dấu chấm câu. Ví dụ

1

in[chuỗi. dấu câu]

Kết quả trong

1

!"#$%&'[]*+,-./:;[email protected][\]^_`{|}~

Python cung cấp một hàm được gọi là sẽ ánh xạ một bộ ký tự này sang một bộ ký tự khác

Chúng ta có thể sử dụng chức năng để tạo một bảng ánh xạ. Chúng ta có thể tạo một bảng ánh xạ trống, nhưng đối số thứ ba của hàm này cho phép chúng ta liệt kê tất cả các ký tự cần loại bỏ trong quá trình dịch. Ví dụ

1

bảng = str. maketrans['', . , string.dấu câu]

Chúng ta có thể đặt tất cả những thứ này lại với nhau, tải tệp văn bản, chia nó thành các từ bằng khoảng trắng, sau đó dịch từng từ để xóa dấu câu

1

2

3

4

5

6

7

8

9

10

11

12

# tải văn bản

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành các từ bằng khoảng trắng

từ = văn bản. tách[]

# xóa dấu câu khỏi mỗi từ

nhập chuỗi

bảng = str. maketrans['', . , string.dấu câu]

bị tước = [w. dịch[bảng] cho w in words]

in[bị tước[. 100]]

Chúng ta có thể thấy rằng điều này đã có hiệu quả mong muốn, chủ yếu là

Các dạng rút gọn như "Cái gì" đã trở thành "Cái gì" nhưng "giống như áo giáp" đã trở thành "giống như áo giáp"

1

['Một', 'buổi sáng', 'khi', 'Gregor', 'Samsa', 'thức dậy', 'từ', 'gặp rắc rối', 'giấc mơ', 'anh ấy', 'tìm thấy', 'chính mình', '

Nếu bạn biết bất cứ điều gì về regex, thì bạn biết mọi thứ có thể trở nên phức tạp từ đây

4. Trường hợp bình thường hóa

Thông thường để chuyển đổi tất cả các từ thành một trường hợp

Điều này có nghĩa là từ vựng sẽ giảm kích thước, nhưng một số điểm khác biệt bị mất [e. g. “Apple” công ty vs “apple” trái cây là một ví dụ thường được sử dụng]

Chúng ta có thể chuyển đổi tất cả các từ thành chữ thường bằng cách gọi hàm Lower[] trên mỗi từ

Ví dụ

1

2

3

4

5

6

7

8

9

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành các từ bằng khoảng trắng

từ = văn bản. tách[]

# chuyển thành chữ thường

từ = [từ. hạ[] cho từ in words]

in[từ[. 100]]

Chạy ví dụ, chúng ta có thể thấy rằng tất cả các từ bây giờ là chữ thường

1

['một', 'buổi sáng', 'khi', 'gregor', 'samsa', 'wake', 'từ', 'gặp rắc rối', 'giấc mơ', 'anh ấy', 'tìm thấy', 'chính mình' . ', 'anh ấy', 'nằm', 'trên', 'của anh ấy', 'giống như áo giáp', 'lưng', 'và', 'nếu', 'anh ấy', 'nâng lên', 'của anh ấy', ' . ', 'cái', 'bộ đồ giường', 'đã', 'hầu như', 'có thể', 'đến', 'che phủ', 'nó', 'và', 'dường như', 'sẵn sàng', 'đến', . ', 'của anh ấy', 'nhiều', 'chân', 'đáng thương', 'gầy', 'so sánh', 'với', 'the', 'size', 'of', 'the', 'rest' . ', '"chuyện gì', 'đã xảy ra', 'với', 'tôi?"', 'anh ấy', 'nghĩ. ', 'nó', "đã không", 'a', 'giấc mơ. ', 'của anh ấy', 'phòng', 'a', 'thích hợp', 'con người']

Ghi chú

Làm sạch văn bản thực sự khó khăn, vấn đề cụ thể và đầy sự đánh đổi

Hãy nhớ rằng, đơn giản là tốt hơn

Dữ liệu văn bản đơn giản hơn, mô hình đơn giản hơn, từ vựng nhỏ hơn. Bạn luôn có thể làm cho mọi thứ trở nên phức tạp hơn sau này để xem liệu nó có mang lại kỹ năng mô hình tốt hơn không

Tiếp theo, chúng ta sẽ xem xét một số công cụ trong thư viện NLTK cung cấp nhiều hơn là tách chuỗi đơn giản

Token hóa và dọn dẹp với NLTK

Bộ công cụ ngôn ngữ tự nhiên, viết tắt là NLTK, là một thư viện Python được viết để làm việc và mô hình hóa văn bản

Nó cung cấp các công cụ tốt để tải và làm sạch văn bản mà chúng ta có thể sử dụng để chuẩn bị sẵn sàng cho dữ liệu của mình để làm việc với các thuật toán học máy và học sâu

1. Cài đặt NLTK

Bạn có thể cài đặt NLTK bằng trình quản lý gói yêu thích của mình, chẳng hạn như pip

1

sudo pip cài đặt -U nltk

Sau khi cài đặt, bạn sẽ cần cài đặt dữ liệu được sử dụng với thư viện, bao gồm một bộ tài liệu tuyệt vời mà bạn có thể sử dụng sau này để thử nghiệm các công cụ khác trong NLTK

Có một số cách để thực hiện việc này, chẳng hạn như từ bên trong tập lệnh

1

2

nhập nltk

nltk. tải xuống[]

Hoặc từ dòng lệnh

1

trăn -m nltk. trình tải xuống tất cả

Để được trợ giúp thêm về cài đặt và thiết lập NLTK, hãy xem

  • Cài đặt NLTK
  • Cài đặt dữ liệu NLTK

2. Chia thành câu

Bước đầu tiên rất hữu ích là chia văn bản thành các câu

Một số tác vụ lập mô hình thích đầu vào ở dạng đoạn văn hoặc câu, chẳng hạn như word2vec. Trước tiên, bạn có thể chia văn bản của mình thành các câu, chia từng câu thành các từ, sau đó lưu từng câu vào tệp, mỗi câu một dòng

NLTK cung cấp hàm send_tokenize[] để chia văn bản thành câu

Ví dụ bên dưới tải “metamorphosis_clean. txt” vào bộ nhớ, chia thành các câu và in câu đầu tiên

1

2

3

4

5

6

7

8

9

# tải dữ liệu

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành câu

từ nltk nhập sent_tokenize

câu = sent_tokenize[văn bản]

in[câu[0]]

Chạy ví dụ này, chúng ta có thể thấy rằng mặc dù tài liệu được chia thành các câu nhưng mỗi câu vẫn giữ nguyên dòng mới từ dòng nhân tạo của các dòng trong tài liệu gốc

Một buổi sáng, khi Gregor Samsa tỉnh dậy sau những giấc mơ rắc rối, anh thấy
mình biến trên giường thành một con sâu bọ khủng khiếp.

3. Chia thành các từ

NLTK cung cấp một hàm gọi là word_tokenize[] để chia chuỗi thành các mã thông báo [trên danh nghĩa là các từ]

Nó phân tách mã thông báo dựa trên khoảng trắng và dấu chấm câu. Ví dụ: dấu phẩy và dấu chấm được lấy làm mã thông báo riêng. Các cơn co thắt được tách ra [e. g. “What’s” trở thành “What” “‘s“]. Báo giá được lưu giữ, v.v.

Ví dụ

1

2

3

4

5

6

7

8

9

# tải dữ liệu

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành các từ

từ nltk. mã hóa mã hóa nhập word_tokenize

mã thông báo = word_tokenize[văn bản]

in[mã thông báo[. 100]]

Chạy mã, chúng ta có thể thấy rằng dấu chấm câu hiện là mã thông báo mà sau đó chúng ta có thể quyết định lọc ra một cách cụ thể

1

['Một', 'buổi sáng', ',', 'khi', 'Gregor', 'Samsa', 'thức dậy', 'từ', 'gặp rắc rối', 'giấc mơ', ',', 'anh ấy', ' . ', 'Anh ấy', 'nằm', 'trên', 'của anh ấy', 'giống như áo giáp', 'lưng', ',', 'và', 'nếu', 'anh ấy', 'nâng lên', 'của anh ấy . ', 'Cái', 'bộ đồ giường', 'đã', 'hầu như', 'có thể', 'đến', 'che', 'nó', 'và', 'dường như', 'sẵn sàng', 'đến', . ', 'của anh ấy', 'nhiều', 'chân', ',', 'đáng thương', 'gầy', 'so sánh', 'với', 'the', 'size', 'of', 'the', . ', '``', 'Cái gì', "'s", 'đã xảy ra', 'đến']

4. Lọc ra dấu chấm câu

Chúng tôi có thể lọc ra tất cả các mã thông báo mà chúng tôi không quan tâm, chẳng hạn như tất cả các dấu chấm câu độc lập

Điều này có thể được thực hiện bằng cách lặp lại tất cả các mã thông báo và chỉ giữ lại những mã thông báo có tất cả các chữ cái. Python có chức năng có thể được sử dụng. Ví dụ

1

2

3

4

5

6

7

8

9

10

11

# tải dữ liệu

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành các từ

từ nltk. mã hóa mã hóa nhập word_tokenize

mã thông báo = word_tokenize[văn bản]

# xóa tất cả các mã thông báo không phải là chữ cái

từ = [từ cho word in tokens if word.isalpha[]]

in[từ[. 100]]

Chạy ví dụ này, bạn có thể thấy rằng không chỉ các mã thông báo dấu chấm câu, mà cả các ví dụ như “giống áo giáp” và “‘s” cũng được lọc ra

1

['Một', 'buổi sáng', 'khi', 'Gregor', 'Samsa', 'thức dậy', 'từ', 'gặp rắc rối', 'giấc mơ', 'anh ấy', 'tìm thấy', 'chính mình', '

5. Lọc ra các từ dừng [và đường dẫn]

Từ dừng là những từ không đóng góp vào ý nghĩa sâu sắc hơn của cụm từ

Chúng là những từ phổ biến nhất như. “the“, “a“, và “is“

Đối với một số ứng dụng như phân loại tài liệu, có thể loại bỏ các từ dừng

NLTK cung cấp một danh sách các từ dừng thường được thống nhất cho nhiều ngôn ngữ, chẳng hạn như tiếng Anh. Chúng có thể được tải như sau

1

2

3

từ nltk. corpus nhập từ dừng

stop_words = stopwords. từ['tiếng Anh']

print[stop_words]

Bạn có thể xem danh sách đầy đủ như sau

1

['tôi', 'tôi', 'của tôi', 'bản thân tôi', 'chúng tôi', 'của chúng tôi', 'của chúng tôi', 'chính chúng tôi', 'bạn', 'của bạn', 'của bạn', 'chính bạn', '

Bạn có thể thấy rằng tất cả chúng đều là chữ thường và đã xóa dấu chấm câu

Bạn có thể so sánh các mã thông báo của mình với các từ dừng và lọc chúng ra, nhưng bạn phải đảm bảo rằng văn bản của bạn được chuẩn bị theo cùng một cách

Hãy chứng minh điều này bằng một quy trình chuẩn bị văn bản nhỏ bao gồm

  1. Tải văn bản thô
  2. Chia thành các mã thông báo
  3. Chuyển thành chữ thường
  4. Xóa dấu chấm câu khỏi mỗi mã thông báo
  5. Lọc ra các mã thông báo còn lại không phải là chữ cái
  6. Lọc ra các mã thông báo là từ dừng

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# tải dữ liệu

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành các từ

từ nltk. mã hóa mã hóa nhập word_tokenize

mã thông báo = word_tokenize[văn bản]

# chuyển thành chữ thường

mã thông báo = [w. thấp hơn[] cho w in tokens]

# xóa dấu câu khỏi mỗi từ

nhập chuỗi

bảng = str. maketrans['', . , string.dấu câu]

bị tước = [w. dịch[bảng] cho w in tokens]

# xóa các mã thông báo còn lại không phải là chữ cái

từ = [từ cho word in stripped if word.isalpha[]]

# lọc ra các từ dừng

từ nltk. corpus nhập từ dừng

stop_words = set[stopwords.từ['english']]

từ = [w cho w in words if not w in stop_words]

in[từ[. 100]]

Chạy ví dụ này, chúng ta có thể thấy rằng ngoài tất cả các biến đổi khác, các từ dừng như “a” và “to” đã bị xóa

Tôi lưu ý rằng chúng tôi vẫn còn lại các mã thông báo như “nt“. Hố thỏ sâu;

1

['một', 'buổi sáng', 'gregor', 'samsa', 'wake', 'grouble', 'dreams', 'found', 'transformed', 'bed', 'khủng khiếp', 'sâu bọ', '

6. từ gốc

Stemming đề cập đến quá trình rút gọn từng từ về gốc hoặc cơ sở của nó

Ví dụ: "câu cá", "đánh bắt", "ngư dân" đều rút gọn thành gốc "cá. ”

Một số ứng dụng, chẳng hạn như phân loại tài liệu, có thể được hưởng lợi từ việc bắt đầu từ để vừa giảm từ vựng vừa tập trung vào ý nghĩa hoặc tình cảm của tài liệu hơn là ý nghĩa sâu sắc hơn

Có nhiều thuật toán xuất phát, mặc dù một phương pháp phổ biến và lâu đời là thuật toán Xuất phát Porter. Phương thức này có sẵn trong NLTK thông qua lớp PorterStemmer

Ví dụ

1

2

3

4

5

6

7

8

9

10

11

12

13

# tải dữ liệu

tên tệp = 'metamorphosis_clean. txt'

tệp = mở[tên tệp, 'rt']

văn bản = tệp. đọc[]

tệp. đóng[]

# chia thành các từ

từ nltk. mã hóa mã hóa nhập word_tokenize

mã thông báo = word_tokenize[văn bản]

# bắt nguồn từ

từ nltk. thân cây. porter nhập PorterStemmer

porter = PorterStemmer[]

xuất phát = [khuân vác. thân[từ] cho word in tokens]

in[xuất phát[. 100]]

Chạy ví dụ này, bạn có thể thấy rằng các từ đã được rút gọn về gốc của chúng, chẳng hạn như "trouble" đã trở thành "troubl". Bạn cũng có thể thấy rằng việc triển khai từ gốc cũng đã giảm mã thông báo thành chữ thường, có khả năng tra cứu nội bộ trong bảng từ

Bạn cũng có thể thấy rằng việc triển khai từ gốc cũng đã giảm mã thông báo thành chữ thường, có khả năng tra cứu nội bộ trong bảng từ

1

['một', 'buổi sáng', ',', 'khi', 'gregor', 'samsa', 'wake', 'từ', 'gặp rắc rối', 'giấc mơ', ',', 'anh ấy', ' . ', 'Anh ấy', 'nằm', 'bật', 'xin chào', 'áo giáp', 'lưng', ',', 'và', 'nếu', 'anh ấy', 'nâng', 'xin chào . ', 'cái', 'giường', 'đã', 'hầu như', 'có thể', 'đến', 'che', 'nó', 'và', 'dường như', 'sẵn sàng', 'đến', . ', 'hi', 'mani', 'leg', ',', 'piti', 'thin', 'so sánh', 'với', 'the', 'size', 'of', 'the', . ', '``', 'chuyện gì', 'đã xảy ra', 'đến'

Có một bộ thuật toán gốc và thuật toán từ vựng tuyệt vời để lựa chọn trong NLTK, nếu việc rút gọn các từ về gốc của chúng là điều bạn cần cho dự án của mình

Cân nhắc làm sạch văn bản bổ sung

Chúng tôi chỉ mới bắt đầu

Bởi vì văn bản nguồn của hướng dẫn này khá rõ ràng để bắt đầu, nên chúng tôi đã bỏ qua nhiều lo ngại về việc làm sạch văn bản mà bạn có thể cần giải quyết trong dự án của riêng mình

Dưới đây là danh sách ngắn các cân nhắc bổ sung khi làm sạch văn bản

  • Xử lý các tài liệu lớn và bộ sưu tập lớn các tài liệu văn bản không phù hợp với bộ nhớ
  • Trích xuất văn bản từ đánh dấu như HTML, PDF hoặc các định dạng tài liệu có cấu trúc khác
  • Phiên âm các ký tự từ các ngôn ngữ khác sang tiếng Anh
  • Giải mã các ký tự Unicode thành dạng chuẩn hóa, chẳng hạn như UTF8
  • Xử lý các từ, cụm từ và từ viết tắt cụ thể của miền
  • Xử lý hoặc xóa số, chẳng hạn như ngày tháng và số tiền
  • Định vị và sửa các lỗi chính tả và lỗi chính tả phổ biến

Danh sách có thể tiếp tục

Hy vọng rằng bạn có thể thấy rằng việc có được văn bản thực sự rõ ràng là không thể, rằng chúng tôi đang thực sự làm tốt nhất có thể dựa trên thời gian, nguồn lực và kiến ​​thức mà chúng tôi có

Ý tưởng “sạch” thực sự được xác định bởi nhiệm vụ hoặc mối quan tâm cụ thể của dự án của bạn

Mẹo chuyên nghiệp là liên tục xem xét mã thông báo của bạn sau mỗi lần chuyển đổi. Tôi đã cố gắng thể hiện điều đó trong hướng dẫn này và tôi hy vọng bạn ghi nhớ điều đó

Lý tưởng nhất là bạn sẽ lưu một tệp mới sau mỗi lần chuyển đổi để có thể dành thời gian cho tất cả dữ liệu ở biểu mẫu mới. Mọi thứ luôn đột ngột xuất hiện khi bạn dành thời gian để xem lại dữ liệu của mình

Bạn đã từng làm sạch văn bản chưa? .
Let me know in the comments below.

Mẹo làm sạch văn bản để nhúng Word

Gần đây, lĩnh vực xử lý ngôn ngữ tự nhiên đã chuyển từ mô hình túi từ và mã hóa từ sang nhúng từ.

Lợi ích của việc nhúng từ là chúng mã hóa từng từ thành một vectơ dày đặc ghi lại điều gì đó về ý nghĩa tương đối của nó trong văn bản đào tạo

Điều này có nghĩa là các biến thể của từ như cách viết hoa, chính tả, dấu chấm câu, v.v. sẽ tự động được học để giống nhau trong không gian nhúng. Đổi lại, điều này có thể có nghĩa là lượng công việc dọn dẹp văn bản cần thiết có thể ít hơn và có lẽ khá khác so với công việc dọn dẹp văn bản cổ điển

Ví dụ: có thể không còn hợp lý khi ngắt từ hoặc loại bỏ dấu chấm câu đối với các từ viết tắt

Tomas Mikolov là một trong những nhà phát triển của word2vec, một phương pháp nhúng từ phổ biến. Anh ấy gợi ý rằng chỉ cần làm sạch văn bản rất tối thiểu khi học một mô hình nhúng từ

Dưới đây là câu trả lời của anh ấy khi được hỏi về cách chuẩn bị dữ liệu văn bản tốt nhất cho word2vec

Không có câu trả lời phổ quát. Tất cả phụ thuộc vào những gì bạn định sử dụng các vectơ cho. Theo kinh nghiệm của tôi, việc ngắt kết nối [hoặc loại bỏ] dấu câu khỏi các từ thường là tốt và đôi khi cũng chuyển đổi tất cả các ký tự thành chữ thường. Người ta cũng có thể thay thế tất cả các số [có thể lớn hơn một số hằng số] bằng một số mã thông báo duy nhất, chẳng hạn như

Tất cả các bước xử lý trước này nhằm mục đích giảm kích thước từ vựng mà không xóa bất kỳ nội dung quan trọng nào [điều này có thể không đúng khi bạn viết thường một số từ nhất định, tức là. 'Bush' khác với 'bush', trong khi 'Another' thường có nghĩa giống như 'another']. Từ vựng càng nhỏ, độ phức tạp của bộ nhớ càng thấp và các tham số cho các từ được ước tính càng mạnh mẽ. Bạn cũng phải xử lý trước dữ liệu thử nghiệm theo cách tương tự

Làm cách nào để xóa dấu câu khỏi tệp văn bản trong Python NLTK?

Để loại bỏ dấu câu, bạn có thể sử dụng biểu thức chính quy hoặc hàm isalnum[] của python . Nó hoạt động. >>> 'có dấu chấm. '. dịch [Không có, chuỗi.

Làm cách nào để xóa dấu câu khỏi chuỗi Python bằng regex?

Sử dụng Phương thức Biểu thức Chính quy [REGEX] . r'[^ws]'. Mẫu để chọn ký tự và số. with the help of a sub-string function and pattern. r'[^ws]' : Pattern to select character and numbers.

Chủ Đề