NLTK WordNet: ค้นหาคำพ้องจาก NLTK WordNet ใน Python

⚡ สรุปอย่างชาญฉลาด

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

  • 🧩 โปรแกรมอ่านคลังข้อมูล: WordNet นำเข้าจาก nltk.corpus และทำหน้าที่เป็นพจนานุกรมภาษาอังกฤษเชิงความหมาย
  • 🔁 ชุดซินเซ็ต: ซินเซ็ตคือกลุ่มคำที่มีความหมายเหมือนกัน เช่น ความหมายทั้งแปดที่ได้จากการค้นหาคำว่า “สุนัข”
  • 🔗 ความสัมพันธ์ทางคำศัพท์: การเชื่อมโยงความหมายแบบต่างตอบแทนเชื่อมโยงคำพ้องความหมาย คำตรงข้าม คำที่มีความหมายกว้างกว่า และคำที่มีความหมายแคบกว่าเข้าด้วยกัน
  • 🧪 คำพ้องความหมายและคำตรงข้าม: ห้องน้ำping ฐานข้อมูล synsets and lemmas รวบรวมคำพ้องความหมายและคำตรงข้ามทั้งหมดของคำนั้นๆ
  • 🌳 ลำดับชั้น: ไฮเปอร์นิม ไฮโปนิม โฮโลนิม และเมโรนิม จัดระเบียบคำต่างๆ ออกเป็นกลุ่มย่อย ได้แก่ คำนาม คำกริยา คำคุณศัพท์ และคำวิเศษณ์
  • 🤖 ประโยชน์ของ AI: WordNet เป็นซอฟต์แวร์ที่ช่วยประมวลผลข้อความในงานต่างๆ เช่น การแก้ไขการสะกดคำ การแปล และการตรวจจับสแปม

NLTK WordNet

เวิร์ดเน็ตคืออะไร?

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 เป็นพจนานุกรมที่ใช้งานได้จริงสำหรับโปรแกรมตรวจสอบการสะกดคำ การแปลภาษา การตรวจจับสแปม และงานวิเคราะห์ข้อความอื่นๆ ในปัญญาประดิษฐ์

คำถามที่พบบ่อย

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

ซินเซ็ต (Synset) หรือชุดคำพ้องความหมาย คือกลุ่มคำที่มีความหมายเหมือนกัน การเรียกใช้ wordnet.synsets(“dog”) จะส่งคืนซินเซ็ตหลายชุด โดยแต่ละชุดจะแสดงถึงความหมายที่แตกต่างกันของคำว่า “dog”

วนลูปผ่าน wordnet.synsets(word) จากนั้นวนซ้ำ lemmas() ของแต่ละ synset เพิ่ม lemma.name() เพื่อรวบรวมคำพ้องความหมาย และเรียก lemma.antonyms() เพื่อรวบรวมคำตรงข้าม ห่อหุ้มping ผลลัพธ์ในฟังก์ชัน set() จะลบรายการที่ซ้ำกันออก

ไฮเปอร์นิม (Hypernym) คือคำที่มีความหมายกว้างกว่าและเป็นคำทั่วไป (เช่น มื้ออาหารเป็นไฮเปอร์นิมของอาหารเช้า) ในขณะที่ไฮพนิม (Hyponym) คือคำที่เฉพาะเจาะจงกว่า (เช่น ข้าวเป็นไฮพนิมของมื้ออาหาร) WordNet เชื่อมโยงคำเหล่านี้เข้าด้วยกันเพื่อสร้างลำดับชั้นแบบ "เป็น" (is-a hierarchy)

ฐานข้อมูล WordNet ของอังกฤษประกอบด้วยคำศัพท์ประมาณ 155,287 คำ ซึ่งจัดเรียงเป็นชุดคำพ้องความหมายประมาณ 117,659 ชุด ฐานข้อมูลนี้ครอบคลุมคำสี่ประเภท ได้แก่ คำนาม คำกริยา คำคุณศัพท์ และคำวิเศษณ์ โดยแต่ละประเภทจะถูกจัดเก็บไว้ในเครือข่ายย่อยของตนเอง

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

ใช่แล้ว AI และกระบวนการเรียนรู้ของเครื่องใช้มาตรวัดความคล้ายคลึงของ WordNet เช่น ความคล้ายคลึงของเส้นทางและความคล้ายคลึงของ Wu-Palmer โดยจะให้คะแนนว่าชุดคำสองชุดมีความใกล้เคียงกันมากแค่ไหนโดยการวัดเส้นทางที่สั้นที่สุดระหว่างชุดคำเหล่านั้นในลำดับชั้นของคำที่มีความหมายกว้างกว่าและคำที่มีความหมายแคบกว่า

พจนานุกรมทั่วไปจะแสดงความหมายตามลำดับตัวอักษร แต่ WordNet เชื่อมโยงคำต่างๆ ด้วยความหมายผ่านชุดคำพ้องความหมายและความสัมพันธ์ทางศัพท์ ทำให้มันทำหน้าที่เหมือนพจนานุกรมและอรรถานุกรมรวมกัน ซึ่งเครื่องจักรสามารถใช้งานผ่านโปรแกรมได้

สรุปโพสต์นี้ด้วย: