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

เวิร์ดเน็ตคืออะไร?
WordNet WordNet เป็นโปรแกรมอ่านคลังข้อมูล NLTK ซึ่งเป็นฐานข้อมูลคำศัพท์สำหรับภาษาอังกฤษ สามารถใช้ค้นหาความหมายของคำ คำพ้องความหมาย หรือคำตรงข้ามได้ อาจนิยามได้ว่าเป็นพจนานุกรมภาษาอังกฤษที่เน้นความหมายเป็นหลัก สามารถนำเข้า WordNet ได้ด้วยคำสั่งต่อไปนี้:
from nltk.corpus import wordnet as guru
เนื่องจาก WordNet มาพร้อมกับคลังข้อมูลสำเร็จรูป คุณจึงสามารถโหลดเพียงครั้งเดียวและเริ่มค้นหาความสัมพันธ์ของคำได้ทันทีโดยไม่ต้องสร้างพจนานุกรมด้วยตนเอง
ค้นหาคำพ้องความหมายจาก NLTK WordNet ใน Python
สถิติเผยว่ามี 155287 คำและ 117659 คำพ้องความหมาย ชุดคำศัพท์ที่รวมอยู่ใน WordNet ภาษาอังกฤษ คุณสามารถค้นหาวิธีการต่างๆ ที่มีให้ใช้งานใน WordNet ได้โดย typing dir(guru) ซึ่งแสดงรายการแอตทริบิวต์ตัวโหลดและเมธอดตัวช่วยทั้งหมดที่ตัวอ่านคอร์ปัสเปิดเผย
ซินเซ็ต: เรียกอีกอย่างว่าชุดคำพ้องความหมาย หรือกลุ่มคำที่มีความหมายเหมือนกัน ลองดูตัวอย่างกันครับ
from nltk.corpus import wordnet syns = wordnet.synsets("dog") print(syns)
Output:
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]
ความสัมพันธ์ทางคำศัพท์: นี่คือความสัมพันธ์ทางความหมายที่ต่างตอบแทนกัน หากมีความสัมพันธ์ระหว่าง {x1,x2,…xn} และ {y1,y2,…yn} แล้ว ก็จะมีความสัมพันธ์ระหว่าง {y1,y2,…yn} และ {x1,x2,…xn} ด้วยเช่นกัน ตัวอย่างเช่น คำพ้องความหมายคือคำตรงข้ามกับคำตรงข้าม ในขณะที่คำที่มีความหมายกว้างกว่าและคำที่มีความหมายแคบกว่าเป็นประเภทของแนวคิดทางคำศัพท์
ให้เราเขียนโปรแกรมโดยใช้ Python เพื่อค้นหาคำพ้องความหมายและคำตรงข้ามของคำว่า “active” โดยใช้ WordNet
from nltk.corpus import wordnet synonyms = [] antonyms = [] for syn in wordnet.synsets("active"): for l in syn.lemmas(): synonyms.append(l.name()) if l.antonyms(): antonyms.append(l.antonyms()[0].name()) print(set(synonyms)) print(set(antonyms))
ผลลัพธ์ของรหัส:
{'dynamic', 'fighting', 'combat-ready', 'active_voice', 'active_agent', 'participating', 'alive', 'active'} -- Synonym
{'stative', 'passive', 'quiet', 'passive_voice', 'extinct', 'dormant', 'inactive'} -- Antonym
คำอธิบายของรหัส:
- WordNet เป็นคลังข้อมูล ดังนั้นจึงต้องนำเข้าจากแพ็กเกจ nltk.corpus
- รายการคำพ้องความหมายและคำตรงข้ามสองรายการจะถือว่าว่างเปล่า ซึ่งจะนำไปใช้ในการต่อเติม
- คำพ้องความหมายของคำว่า “active” จะถูกค้นหาโดยใช้เมธอด synsets และเพิ่มเข้าไปในรายการคำพ้องความหมาย กระบวนการเดียวกันนี้ใช้ในการรวบรวมคำตรงข้ามด้วย
- ผลลัพธ์จะถูกพิมพ์ออกมาดังนี้ Python ตั้งค่าเพื่อให้ลบรายการที่ซ้ำกันออกโดยอัตโนมัติ
นอกเหนือจากคำพ้องความหมายและคำตรงข้ามแล้ว WordNet ยังแสดงคำที่มีความหมายกว้างกว่า (hypernyms) คำที่มีความหมายเฉพาะเจาะจงกว่า (hyponyms) คำที่มีความหมายครอบคลุม (holonyms) และคำที่มีความหมายย่อย (meronyms) ดังนั้นการค้นหาเพียงครั้งเดียวจึงสามารถวางคำหนึ่งคำไว้ในลำดับชั้น "เป็น" ทั้งหมดได้ ความสัมพันธ์เหล่านี้ทำให้ WordNet เป็นพจนานุกรมที่ใช้งานได้จริงสำหรับโปรแกรมตรวจสอบการสะกดคำ การแปลภาษา การตรวจจับสแปม และงานวิเคราะห์ข้อความอื่นๆ ในปัญญาประดิษฐ์
