词典在python的所有语言?

use*_*165 8 python nltk wordnet

在python中获取单词同义词的代码是:

from nltk.corpus import wordnet

dog = wordnet.synset('dog.n.01')
print dog.lemma_names

>>['dog', 'domestic_dog', 'Canis_familiaris']
Run Code Online (Sandbox Code Playgroud)

然而dog.n.02给出了不同的词.对于任何单词我都不知道可能有多少单词.如何返回单词的所有同义词?

alv*_*vas 20

使用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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

本体论:给出一个词,什么是下义词(即子类型)和上位词(即超类型).

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
Run Code Online (Sandbox Code Playgroud)

[本体输出]

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
Run Code Online (Sandbox Code Playgroud)

  • 为了使它在NLTK 2.7.10中工作,你需要将`.name`替换成`.name()`,`..define`替换为`.definition()`和`.lemma_names`替换为`.lemma_names()`. (6认同)
  • 从 nltk.corpus 导入 wordnet as wn;来自 itertools 导入链 (2认同)

art*_*omp 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')]
Run Code Online (Sandbox Code Playgroud)

请记住,在您的代码中,您试图获取引理,但这对于您想要的内容来说太深了.synset级别与意义有关,而引理级别则为您提供单词. 换句话说:

在WordNet中(我在这里谈到英语WordNet,虽然我认为其他语言中的那些同样有组织)但是一个引理有感觉.具体来说,引理(即,在WordNet中编入索引的基本单词形式)与其参与的同义词数量具有完全相同的感觉.相反,正如您所说,同义词包含更多的引理,这意味着多个词条(单词)可以表示相同的意义或含义.

还可以看看NLTK的WordNet如何探索一些意义或单词的方法.


Udo*_*ein 5

文档建议

wordnet.synsets('dog') 
Run Code Online (Sandbox Code Playgroud)

得到狗的所有同义词.