โทเค็นการฝึกอบรมและการกรองคำหยุด
ทำไมต้องฝึกโทเค็นเซอร์ประโยคของตัวเอง
นี่เป็นคำถามที่สำคัญมากว่าถ้าเรามีโทเค็นเซอร์ประโยคเริ่มต้นของ 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'
]