在python中获取单词同义词的代码是:
from nltk.corpus import wordnet
dog = wordnet.synset('dog.n.01')
print dog.lemma_names
>>['dog', 'domestic_dog', 'Canis_familiaris']
然而,dog.n.02给出了不同的词语。对于任何单词我都不知道可能有多少单词。如何返回单词的所有同义词?
答案 0 :(得分:19)
使用wn.synset('dog.n.1').lemma_names
是访问感知的同义词的正确方法。 这是因为一个单词有很多感官,而且更适合列出特定含义/意义的同义词。要枚举具有相似含义的单词,可能还可以查看下位词。
可悲的是,Wordnet的大小非常有限,因此每种感官都有很少的lemma_names。
使用Wordnet作为词典/ thesarus本身并不是很容易,因为它是作为一个感觉/意义的清单而不是单词清单而开发的。但是,你可以使用特定的意义和几个(不是很多)相关的词来理解感觉。可以使用Wordnet作为:
词典:给出一个词,
这个词有什么不同的含义for i,j in enumerate(wn.synsets('dog')):
print "Meaning",i, "NLTK ID:", j.name
print "Definition:",j.definition
Thesarus:一句话,的每个含义的是什么
for i,j in enumerate(wn.synsets('dog')):
print "Meaning",i, "NLTK ID:", j.name
print "Definition:",j.definition
print "Synonyms:", ", ".join(j.lemma_names)
print
本体论:给出一个词,什么是下义词(即子类型)和上位词(即超类型)。
for i,j in enumerate(wn.synsets('dog')):
print "Meaning",i, "NLTK ID:", j.name
print "Hypernyms:", ", ".join(list(chain(*[l.lemma_names for l in j.hypernyms()])))
print "Hyponyms:", ", ".join(list(chain(*[l.lemma_names for l in j.hyponyms()])))
print
[本体输出]
Meaning 0 NLTK ID: dog.n.01
Hypernyms words domestic_animal, domesticated_animal, canine, canid
Hyponyms puppy, Great_Pyrenees, basenji, Newfoundland, Newfoundland_dog, lapdog, poodle, poodle_dog, Leonberg, toy_dog, toy, spitz, pooch, doggie, doggy, barker, bow-wow, cur, mongrel, mutt, Mexican_hairless, hunting_dog, working_dog, dalmatian, coach_dog, carriage_dog, pug, pug-dog, corgi, Welsh_corgi, griffon, Brussels_griffon, Belgian_griffon
Meaning 1 NLTK ID: frump.n.01
Hypernyms: unpleasant_woman, disagreeable_woman
Hyponyms:
Meaning 2 NLTK ID: dog.n.03
Hypernyms: chap, fellow, feller, fella, lad, gent, blighter, cuss, bloke
Hyponyms:
Meaning 3 NLTK ID: cad.n.01
Hypernyms: villain, scoundrel
Hyponyms: perisher
答案 1 :(得分:6)
>>> wn.synsets('small')
[Synset('small.n.01'),
Synset('small.n.02'),
Synset('small.a.01'),
Synset('minor.s.10'),
Synset('little.s.03'),
Synset('small.s.04'),
Synset('humble.s.01'),
Synset('little.s.07'),
Synset('little.s.05'),
Synset('small.s.08'),
Synset('modest.s.02'),
Synset('belittled.s.01'),
Synset('small.r.01')]
请记住,在您的代码中,您试图获取引理,但这对于您想要的内容来说太深了。 synset级别与意义有关,而引理级别则为您提供单词。 In other words:
在WordNet中(虽然我认为,我在这里谈到英语WordNet) 其他语言中的那些同样有组织)一个引理 感官。具体来说,是一个引理(即基本单词形式) 在WordNet中索引)具有与数量一样多的感官 它参与的同义词。相反,正如你所说,同义词 包含更多的lemmas,这意味着多个lemmas(单词) 可以代表相同的意义或意义。
还可以查看NLTK's WordNet how to以了解更多探索意义或单词的方法。
答案 2 :(得分:5)