ค้นหาคำใน Wordnet

Wordnet คืออะไร?

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

  • สามารถใช้เพื่อค้นหาคำจำกัดความของคำ
  • เราสามารถค้นหาคำพ้องความหมายและคำตรงข้ามของคำ
  • สามารถสำรวจความสัมพันธ์ของคำและความคล้ายคลึงกันได้โดยใช้ Wordnet
  • การเปลี่ยนความรู้สึกของคำสำหรับคำเหล่านั้นที่มีการใช้งานและคำจำกัดความที่หลากหลาย

วิธีการนำเข้า Wordnet

Wordnet สามารถนำเข้าได้โดยใช้คำสั่งต่อไปนี้ -

from nltk.corpus import wordnet

สำหรับคำสั่งที่กะทัดรัดมากขึ้นให้ใช้สิ่งต่อไปนี้ -

from nltk.corpus import wordnet as wn

อินสแตนซ์ Synset

Synset คือการจัดกลุ่มคำพ้องความหมายที่แสดงแนวคิดเดียวกัน เมื่อคุณใช้ Wordnet เพื่อค้นหาคำคุณจะได้รับรายการอินสแตนซ์ Synset

wordnet.synsets (คำ)

ในการรับรายการ Synsets เราสามารถค้นหาคำใดก็ได้ใน Wordnet โดยใช้ wordnet.synsets(word). ตัวอย่างเช่นในสูตร Python ถัดไปเราจะค้นหา Synset สำหรับ 'สุนัข' พร้อมกับคุณสมบัติและวิธีการบางอย่างของ Synset -

ตัวอย่าง

ขั้นแรกให้นำเข้า wordnet ดังนี้ -

from nltk.corpus import wordnet as wn

ตอนนี้ระบุคำที่คุณต้องการค้นหา Synset สำหรับ -

syn = wn.synsets('dog')[0]

ที่นี่เราใช้เมธอด name () เพื่อรับชื่อเฉพาะสำหรับ synset ซึ่งสามารถใช้เพื่อรับ Synset ได้โดยตรง -

syn.name()
Output:
'dog.n.01'

ต่อไปเราจะใช้วิธีการ definition () ซึ่งจะให้คำจำกัดความของคำว่า -

syn.definition()
Output:
'a member of the genus Canis (probably descended from the common wolf) that has
been domesticated by man since prehistoric times; occurs in many breeds'

อีกวิธีหนึ่งคือตัวอย่าง () ซึ่งจะให้ตัวอย่างที่เกี่ยวข้องกับคำว่า -

syn.examples()
Output:
['the dog barked all night']

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

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.name()
syn.definition()
syn.examples()

รับ Hypernyms

Synsets จัดอยู่ในโครงสร้างมรดกเช่นเดียวกับโครงสร้างที่ Hypernyms แสดงถึงคำที่เป็นนามธรรมมากขึ้นในขณะที่ Hyponymsแสดงถึงคำที่เฉพาะเจาะจงมากขึ้น สิ่งที่สำคัญอย่างหนึ่งคือต้นไม้นี้สามารถโยงไปถึงรูตไฮเปอร์นีม ให้เราเข้าใจแนวคิดด้วยความช่วยเหลือของตัวอย่างต่อไปนี้ -

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()

เอาต์พุต

[Synset('canine.n.02'), Synset('domestic_animal.n.01')]

ที่นี่เราจะเห็นว่าสุนัขและสัตว์ในบ้านเป็นไฮเปอร์ไนมส์ของ 'สุนัข'

ตอนนี้เราสามารถค้นหาคำนามของ 'dog' ได้ดังนี้ -

syn.hypernyms()[0].hyponyms()

เอาต์พุต

[
   Synset('bitch.n.04'),
   Synset('dog.n.01'),
   Synset('fox.n.01'),
   Synset('hyena.n.01'),
   Synset('jackal.n.01'),
   Synset('wild_dog.n.01'),
   Synset('wolf.n.01')
]

จากผลลัพธ์ข้างต้นเราจะเห็นว่า 'dog' เป็นเพียงหนึ่งในหลาย ๆ คำพ้องความหมายของ 'domestic_animals'

ในการค้นหารากของสิ่งเหล่านี้เราสามารถใช้คำสั่งต่อไปนี้ -

syn.root_hypernyms()

เอาต์พุต

[Synset('entity.n.01')]

จากผลลัพธ์ข้างต้นเราจะเห็นว่ามันมีเพียงรูทเดียว

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

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()
syn.hypernyms()[0].hyponyms()
syn.root_hypernyms()

เอาต์พุต

[Synset('entity.n.01')]

Lemmas ใน Wordnet

ในภาษาศาสตร์รูปแบบที่บัญญัติหรือรูปแบบทางสัณฐานวิทยาของคำเรียกว่า lemma หากต้องการค้นหาคำพ้องความหมายและคำตรงข้ามของคำเรายังสามารถค้นหาคำศัพท์ใน WordNet ให้เราดูว่า

การค้นหาคำพ้องความหมาย

โดยใช้เมธอด lemma () เราสามารถค้นหาจำนวนคำพ้องความหมายของ Synset ให้เราใช้วิธีนี้กับ synset 'dog' -

ตัวอย่าง

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
lemmas = syn.lemmas()
len(lemmas)

เอาต์พุต

3

ผลลัพธ์ด้านบนแสดงให้เห็นว่า 'dog' มีคำศัพท์สามตัว

ได้รับชื่อของ lemma ตัวแรกดังนี้ -

lemmas[0].name()
Output:
'dog'

ได้รับชื่อของ lemma ที่สองดังนี้ -

lemmas[1].name()
Output:
'domestic_dog'

ได้รับชื่อของ lemma ที่สามดังนี้ -

lemmas[2].name()
Output:
'Canis_familiaris'

จริงๆแล้ว Synset หมายถึงกลุ่มของคำศัพท์ที่มีความหมายคล้าย ๆ กันในขณะที่ lemma แสดงถึงรูปแบบคำที่แตกต่างกัน

การค้นหาคำตรงข้าม

ใน WordNet คำนามบางตัวมีคำตรงข้ามด้วย ตัวอย่างเช่นคำว่า 'good' มีคำพ้องความหมายทั้งหมด 27 คำในจำนวนนี้มีคำพ้องความหมาย 5 คำที่มีคำตรงข้าม ให้เราหาคำตรงข้าม (เมื่อคำว่า 'ดี' ใช้เป็นคำนามและเมื่อคำว่า 'ดี' ใช้เป็นคำคุณศัพท์)

ตัวอย่าง 1

from nltk.corpus import wordnet as wn
   syn1 = wn.synset('good.n.02')
   antonym1 = syn1.lemmas()[0].antonyms()[0]
antonym1.name()

เอาต์พุต

'evil'
antonym1.synset().definition()

เอาต์พุต

'the quality of being morally wrong in principle or practice'

ตัวอย่างข้างต้นแสดงให้เห็นว่าคำว่า 'ดี' เมื่อใช้เป็นคำนามมีคำตรงข้ามตัวแรก 'evil'

ตัวอย่าง 2

from nltk.corpus import wordnet as wn
   syn2 = wn.synset('good.a.01')
   antonym2 = syn2.lemmas()[0].antonyms()[0]
antonym2.name()

เอาต์พุต

'bad'
antonym2.synset().definition()

เอาต์พุต

'having undesirable or negative qualities’

ตัวอย่างข้างต้นแสดงให้เห็นว่าคำว่า 'ดี' เมื่อใช้เป็นคำคุณศัพท์มีคำตรงข้ามตัวแรก 'bad'