Natural Language Toolkit - Tokenizing Text
Tokenizing คืออะไร?
อาจนิยามได้ว่าเป็นกระบวนการแบ่งข้อความออกเป็นส่วนย่อย ๆ เช่นประโยคและคำ ส่วนเล็ก ๆ เหล่านี้เรียกว่าโทเค็น ตัวอย่างเช่นคำเป็นโทเค็นในประโยคและประโยคเป็นโทเค็นในย่อหน้า
อย่างที่เราทราบกันดีว่า NLP ใช้ในการสร้างแอปพลิเคชันเช่นการวิเคราะห์ความรู้สึกระบบ QA การแปลภาษาแชทบอทอัจฉริยะระบบเสียง ฯลฯ ดังนั้นในการสร้างสิ่งเหล่านี้จึงจำเป็นอย่างยิ่งที่จะต้องเข้าใจรูปแบบในข้อความ โทเค็นที่กล่าวถึงข้างต้นมีประโยชน์มากในการค้นหาและทำความเข้าใจรูปแบบเหล่านี้ เราสามารถพิจารณาโทเค็นเป็นขั้นตอนพื้นฐานสำหรับสูตรอาหารอื่น ๆ เช่นการกำหนดคำและการสะกดคำ
แพ็คเกจ NLTK
nltk.tokenize เป็นแพ็คเกจที่จัดเตรียมโดยโมดูล NLTK เพื่อให้บรรลุกระบวนการโทเค็น
การแปลงประโยคเป็นคำ
การแยกประโยคออกเป็นคำหรือการสร้างรายการคำจากสตริงเป็นส่วนสำคัญของทุกกิจกรรมการประมวลผลข้อความ ให้เราเข้าใจด้วยความช่วยเหลือของฟังก์ชัน / โมดูลต่างๆที่จัดเตรียมโดยnltk.tokenize แพ็คเกจ
word_tokenize โมดูล
word_tokenizeโมดูลใช้สำหรับการสร้างโทเค็นคำพื้นฐาน ตัวอย่างต่อไปนี้จะใช้โมดูลนี้เพื่อแบ่งประโยคออกเป็นคำ
ตัวอย่าง
import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')
เอาต์พุต
['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']
TreebankWordTokenizer คลาส
word_tokenize โมดูลที่ใช้ข้างต้นเป็นฟังก์ชัน wrapper ที่เรียกใช้ฟังก์ชัน tokenize () เป็นอินสแตนซ์ของ TreebankWordTokenizerชั้นเรียน มันจะให้ผลลัพธ์เดียวกันกับที่เราได้รับในขณะที่ใช้โมดูล word_tokenize () สำหรับการแยกประโยคออกเป็นคำ ให้เราดูตัวอย่างเดียวกันที่นำไปใช้ข้างต้น -
ตัวอย่าง
ขั้นแรกเราต้องนำเข้าชุดเครื่องมือภาษาธรรมชาติ (nltk)
import nltk
ตอนนี้นำเข้าไฟล์ TreebankWordTokenizer คลาสเพื่อใช้อัลกอริทึม word tokenizer -
from nltk.tokenize import TreebankWordTokenizer
จากนั้นสร้างอินสแตนซ์ของคลาส TreebankWordTokenizer ดังนี้ -
Tokenizer_wrd = TreebankWordTokenizer()
ตอนนี้ป้อนประโยคที่คุณต้องการแปลงเป็นโทเค็น -
Tokenizer_wrd.tokenize(
'Tutorialspoint.com provides high quality technical tutorials for free.'
)
เอาต์พุต
[
'Tutorialspoint.com', 'provides', 'high', 'quality',
'technical', 'tutorials', 'for', 'free', '.'
]
ตัวอย่างการใช้งานที่สมบูรณ์
ให้เราดูตัวอย่างการใช้งานที่สมบูรณ์ด้านล่าง
import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')
เอาต์พุต
[
'Tutorialspoint.com', 'provides', 'high', 'quality',
'technical', 'tutorials','for', 'free', '.'
]
หลักการที่สำคัญที่สุดของโทเค็นไนเซอร์คือการแยกการหดตัว ตัวอย่างเช่นถ้าเราใช้โมดูล word_tokenize () เพื่อจุดประสงค์นี้จะให้ผลลัพธ์ดังนี้ -
ตัวอย่าง
import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')
เอาต์พุต
['wo', "n't"]]
การประชุมแบบนี้โดย TreebankWordTokenizerเป็นที่ยอมรับไม่ได้ นั่นเป็นเหตุผลที่เรามี tokenizers คำสองทางเลือก ได้แก่PunktWordTokenizer และ WordPunctTokenizer.
คลาส WordPunktTokenizer
โทเค็นคำอื่นที่แยกเครื่องหมายวรรคตอนทั้งหมดออกเป็นโทเค็นแยกกัน ให้เราเข้าใจด้วยตัวอย่างง่ายๆดังต่อไปนี้ -
ตัวอย่าง
from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")
เอาต์พุต
['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']
การแปลงข้อความเป็นประโยค
ในส่วนนี้เราจะแยกข้อความ / ย่อหน้าออกเป็นประโยค NLTK ให้sent_tokenize โมดูลสำหรับวัตถุประสงค์นี้
ทำไมจึงจำเป็น?
คำถามที่ชัดเจนที่อยู่ในใจของเราคือเมื่อเรามี word tokenizer แล้วทำไมเราถึงต้องใช้ tokenizer ประโยคหรือทำไมเราต้อง tokenize ข้อความเป็นประโยค สมมติว่าเราต้องนับจำนวนคำเฉลี่ยในประโยคเราจะทำได้อย่างไร? เพื่อให้งานนี้สำเร็จเราจำเป็นต้องมีทั้งการสร้างประโยคและโทเค็นคำ
ให้เราเข้าใจความแตกต่างระหว่างโทเค็นประโยคและคำด้วยความช่วยเหลือของตัวอย่างง่ายๆดังต่อไปนี้ -
ตัวอย่าง
import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer.
It is going to be a simple example."
sent_tokenize(text)
เอาต์พุต
[
"Let us understand the difference between sentence & word tokenizer.",
'It is going to be a simple example.'
]
โทเค็นประโยคโดยใช้นิพจน์ทั่วไป
หากคุณรู้สึกว่าผลลัพธ์ของโทเค็นคำไม่เป็นที่ยอมรับและต้องการควบคุมวิธีการโทเค็นข้อความโดยสมบูรณ์เรามีนิพจน์ทั่วไปที่สามารถใช้ได้ในขณะที่ทำโทเค็นประโยค NLTK ให้RegexpTokenizer ชั้นเรียนเพื่อให้บรรลุสิ่งนี้
ให้เราเข้าใจแนวคิดด้วยความช่วยเหลือจากสองตัวอย่างด้านล่าง
ในตัวอย่างแรกเราจะใช้นิพจน์ทั่วไปสำหรับการจับคู่โทเค็นที่เป็นตัวเลขและตัวอักษรบวกกับเครื่องหมายคำพูดเดี่ยวเพื่อที่เราจะไม่แยกการหดตัวเช่น “won’t”.
ตัวอย่าง 1
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")
เอาต์พุต
["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']
ในตัวอย่างแรกเราจะใช้นิพจน์ทั่วไปเพื่อสร้างโทเค็นบนช่องว่าง
ตัวอย่าง 2
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")
เอาต์พุต
["won't", 'is', 'a', 'contraction']
จากผลลัพธ์ด้านบนเราจะเห็นว่าเครื่องหมายวรรคตอนยังคงอยู่ในโทเค็น พารามิเตอร์ช่องว่าง = จริงหมายถึงรูปแบบจะระบุช่องว่างที่จะใช้โทเค็น ในทางกลับกันถ้าเราจะใช้พารามิเตอร์ gaps = False รูปแบบจะถูกใช้เพื่อระบุโทเค็นซึ่งสามารถเห็นได้ในตัวอย่างต่อไปนี้ -
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")
เอาต์พุต
[ ]
มันจะทำให้เราได้ผลลัพธ์ที่ว่างเปล่า