Đào tạo Tokenizer & Lọc từ dừng

Tại sao phải đào tạo tokenizer câu riêng?

Đây là một câu hỏi rất quan trọng mà nếu chúng ta có trình mã hóa câu mặc định của NLTK thì tại sao chúng ta cần đào tạo trình mã hóa câu? Câu trả lời cho câu hỏi này nằm ở chất lượng của trình mã hóa câu mặc định của NLTK. Tokenizer mặc định của NLTK về cơ bản là một tokenizer có mục đích chung. Mặc dù nó hoạt động rất tốt nhưng nó có thể không phải là một lựa chọn tốt cho văn bản không chuẩn, có lẽ là văn bản của chúng ta, hoặc đối với văn bản có định dạng duy nhất. Để mã hóa văn bản như vậy và đạt được kết quả tốt nhất, chúng ta nên đào tạo trình mã hóa câu của riêng mình.

Ví dụ triển khai

Đối với ví dụ này, chúng tôi sẽ sử dụng kho văn bản webtext. Tệp văn bản mà chúng ta sẽ sử dụng từ kho tài liệu này có văn bản được định dạng như các hộp thoại được hiển thị bên dưới -

Guy: How old are you?
Hipster girl: You know, I never answer that question. Because to me, it's about
how mature you are, you know? I mean, a fourteen year old could be more mature
than a twenty-five year old, right? I'm sorry, I just never answer that question.
Guy: But, uh, you're older than eighteen, right?
Hipster girl: Oh, yeah.

Chúng tôi đã lưu tệp văn bản này với tên là training_tokenizer. NLTK cung cấp một lớp có tênPunktSentenceTokenizervới sự trợ giúp của chúng tôi có thể đào tạo trên văn bản thô để tạo ra một trình mã hóa câu tùy chỉnh. Chúng ta có thể lấy văn bản thô bằng cách đọc trong một tệp hoặc từ một kho tài liệu NLTK bằng cách sử dụngraw() phương pháp.

Hãy cùng chúng tôi xem ví dụ dưới đây để hiểu rõ hơn về nó -

Đầu tiên, nhập PunktSentenceTokenizer lớp từ nltk.tokenize gói -

from nltk.tokenize import PunktSentenceTokenizer

Bây giờ, nhập webtext kho dữ liệu từ nltk.corpus gói hàng

from nltk.corpus import webtext

Tiếp theo, bằng cách sử dụng raw() lấy văn bản thô từ training_tokenizer.txt tập tin như sau -

text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')

Bây giờ, hãy tạo một phiên bản của PunktSentenceTokenizer và in các câu mã hóa từ tệp văn bản như sau:

sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

Đầu ra

White guy: So, do you have any plans for this evening?
print(sents_1[1])
Output:
Asian girl: Yeah, being angry!
print(sents_1[670])
Output:
Guy: A hundred bucks?
print(sents_1[675])
Output:
Girl: But you already have a Big Mac...

Hoàn thành ví dụ triển khai

from nltk.tokenize import PunktSentenceTokenizer
from nltk.corpus import webtext
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

Đầu ra

White guy: So, do you have any plans for this evening?

Để hiểu sự khác biệt giữa trình mã hóa câu mặc định của NLTK và trình mã hóa câu được đào tạo của riêng chúng tôi, chúng ta hãy mã hóa cùng một tệp với trình mã hóa câu mặc định tức là sent_tokenize ().

from nltk.tokenize import sent_tokenize
   from nltk.corpus import webtext
   text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sents_2 = sent_tokenize(text)

print(sents_2[0])
Output:

White guy: So, do you have any plans for this evening?
print(sents_2[675])
Output:
Hobo: Y'know what I'd do if I was rich?

Với sự trợ giúp của sự khác biệt trong đầu ra, chúng ta có thể hiểu khái niệm rằng tại sao việc đào tạo trình mã hóa câu của chính chúng ta lại hữu ích.

Từ dừng là gì?

Một số từ phổ biến có trong văn bản nhưng không góp phần tạo nên ý nghĩa của câu. Những từ như vậy hoàn toàn không quan trọng đối với mục đích truy xuất thông tin hoặc xử lý ngôn ngữ tự nhiên. Các từ dừng phổ biến nhất là 'the' và 'a'.

Kho ngữ liệu từ dừng NLTK

Trên thực tế, Bộ công cụ ngôn ngữ tự nhiên đi kèm với kho ngữ liệu từ khóa chứa danh sách từ cho nhiều ngôn ngữ. Hãy để chúng tôi hiểu cách sử dụng của nó với sự trợ giúp của ví dụ sau:

Đầu tiên, nhập từ khóa tạm dừng từ gói nltk.corpus -

from nltk.corpus import stopwords

Bây giờ, chúng tôi sẽ sử dụng từ dừng từ Ngôn ngữ tiếng Anh

english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

Đầu ra

['I', 'writer']

Hoàn thành ví dụ triển khai

from nltk.corpus import stopwords
english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

Đầu ra

['I', 'writer']

Tìm danh sách đầy đủ các ngôn ngữ được hỗ trợ

Với sự trợ giúp của tập lệnh Python sau, chúng tôi cũng có thể tìm thấy danh sách đầy đủ các ngôn ngữ được hỗ trợ bởi kho ngữ liệu từ dừng NLTK -

from nltk.corpus import stopwords
stopwords.fileids()

Đầu ra

[
   'arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french',
   'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali',
   'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish',
   'swedish', 'tajik', 'turkish'
]