โทเค็นการฝึกอบรมและการกรองคำหยุด

ทำไมต้องฝึกโทเค็นเซอร์ประโยคของตัวเอง

นี่เป็นคำถามที่สำคัญมากว่าถ้าเรามีโทเค็นเซอร์ประโยคเริ่มต้นของ NLTK แล้วทำไมเราต้องฝึกโทเค็นไนเซอร์ประโยค? คำตอบสำหรับคำถามนี้อยู่ที่คุณภาพของโทเค็นไนเซอร์ประโยคเริ่มต้นของ NLTK โทเค็นไนเซอร์เริ่มต้นของ NLTK นั้นเป็นโทเค็นไนเซอร์ที่ใช้งานทั่วไป แม้ว่าจะใช้งานได้ดี แต่อาจไม่ใช่ทางเลือกที่ดีสำหรับข้อความที่ไม่เป็นมาตรฐานบางทีอาจเป็นข้อความของเราหรือสำหรับข้อความที่มีการจัดรูปแบบเฉพาะ ในการสร้างโทเค็นข้อความดังกล่าวและได้ผลลัพธ์ที่ดีที่สุดเราควรฝึกโทเค็นประโยคของเราเอง

ตัวอย่างการใช้งาน

สำหรับตัวอย่างนี้เราจะใช้ webtext corpus ไฟล์ข้อความที่เราจะใช้จากคลังข้อมูลนี้มีข้อความที่จัดรูปแบบเป็นกล่องโต้ตอบที่แสดงด้านล่าง -

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.

เราได้บันทึกไฟล์ข้อความนี้ด้วยชื่อ training_tokenizer NLTK มีคลาสชื่อPunktSentenceTokenizerด้วยความช่วยเหลือซึ่งเราสามารถฝึกกับข้อความดิบเพื่อสร้างโทเค็นประโยคที่กำหนดเองได้ เราสามารถรับข้อความดิบได้โดยการอ่านในไฟล์หรือจากคลังข้อมูล NLTK โดยใช้ไฟล์raw() วิธี.

ให้เราดูตัวอย่างด้านล่างเพื่อรับข้อมูลเชิงลึกมากขึ้น -

ก่อนอื่นให้นำเข้า PunktSentenceTokenizer คลาสจาก nltk.tokenize แพ็คเกจ -

from nltk.tokenize import PunktSentenceTokenizer

ตอนนี้นำเข้า webtext คลังข้อมูลจาก nltk.corpus แพ็คเกจ

from nltk.corpus import webtext

ถัดไปโดยใช้ raw() วิธีรับข้อความดิบจาก training_tokenizer.txt ไฟล์ดังนี้ -

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

ตอนนี้สร้างอินสแตนซ์ของ PunktSentenceTokenizer และพิมพ์ประโยคโทเค็นจากไฟล์ข้อความดังนี้ -

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

เอาต์พุต

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...

ตัวอย่างการใช้งานที่สมบูรณ์

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])

เอาต์พุต

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

เพื่อให้เข้าใจถึงความแตกต่างระหว่างโทเค็นเริ่มต้นประโยคของ NLTK กับโทเค็นเซอร์ประโยคที่ได้รับการฝึกฝนของเราเองให้เราโทเค็นไฟล์เดียวกันโดยใช้โทเค็นประโยคเริ่มต้นคือ 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?

ด้วยความช่วยเหลือของความแตกต่างในผลลัพธ์เราสามารถเข้าใจแนวคิดที่ว่าเหตุใดจึงมีประโยชน์ในการฝึกโทเค็นเซอร์ประโยคของเราเอง

คำหยุดคืออะไร?

คำทั่วไปบางคำที่มีอยู่ในข้อความ แต่ไม่มีส่วนในความหมายของประโยค คำดังกล่าวไม่สำคัญเลยสำหรับวัตถุประสงค์ในการดึงข้อมูลหรือการประมวลผลภาษาธรรมชาติ คำหยุดที่พบบ่อยที่สุดคือ "the" และ "a"

คลังข้อมูลคำหยุด NLTK

อันที่จริงชุดเครื่องมือภาษาธรรมชาติมาพร้อมกับคลังคำหยุดที่มีรายการคำสำหรับหลายภาษา ให้เราเข้าใจการใช้งานด้วยความช่วยเหลือของตัวอย่างต่อไปนี้ -

ก่อนอื่นให้นำเข้าคำหยุด copus จากแพ็คเกจnltk.corpus -

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]

เอาต์พุต

['I', 'writer']

ตัวอย่างการใช้งานที่สมบูรณ์

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]

เอาต์พุต

['I', 'writer']

ค้นหารายการภาษาที่รองรับทั้งหมด

ด้วยความช่วยเหลือของการทำตามสคริปต์ Python เรายังสามารถค้นหารายการภาษาทั้งหมดที่สนับสนุนโดยคลังคำหยุด NLTK -

from nltk.corpus import stopwords
stopwords.fileids()

เอาต์พุต

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