【问题标题】:All synonyms for word in python? [duplicate]python中单词的所有同义词? [复制]
【发布时间】:2013-10-21 08:29:30
【问题描述】:

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

from nltk.corpus import wordnet

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

>>['dog', 'domestic_dog', 'Canis_familiaris']

但是 dog.n.02 给出了不同的词。对于任何单词,我不知道可能有多少个单词。如何返回一个单词的所有同义词?

【问题讨论】:

    标签: python nltk wordnet


    【解决方案1】:

    使用wn.synset('dog.n.1').lemma_names 是访问意义的同义词的正确方法。 因为一个词有多种含义,列出特定含义/含义的同义词更合适。要列举含义相似的词,可能还可以查看下义词。

    遗憾的是,Wordnet 的大小非常有限,因此每种感官可用的 lemma_names 很少。

    使用 Wordnet 作为字典/同义词库本身并不是很合适,因为它是作为意义/意义清单而不是单词清单而开发的。但是,您可以使用访问特定意义和几个(不是很多)相关词的意义。可以将 Wordnet 用作:

    字典:给定一个词,这个词的不同含义是什么

    for i,j in enumerate(wn.synsets('dog')):
      print "Meaning",i, "NLTK ID:", j.name
      print "Definition:",j.definition
    

    同义词库:给定一个单词,对于每个含义该单词的不同单词是什么

    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
    

    【讨论】:

    • 要使其在 NLTK 2.7.10 中工作,您需要将 .name 替换为 .name(),将 .definition 替换为 .definition(),将 .lemma_names 替换为 .lemma_names()
    • 从 nltk.corpus 导入 wordnet 作为 wn;从 itertools 导入链
    【解决方案2】:

    注意this other answer

    >>> 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')]
    

    请记住,在您的代码中,您试图获取引理,但这对于您想要的东西来说太深了。 同义词层次是关于意义的,而引理层次是给你词的。 In other words:

    在 WordNet 中(我在这里说的是英语 WordNet,虽然我认为 其他语言中的那些也有类似的组织)一个引理有 感官。具体来说,一个引理(即,一个基本词形式是 在 WordNet 中索引)具有与 它参与的同义词集。相反,正如你所说,同义词集 包含一个更多的引理,这意味着多个引理(单词) 可以代表相同的意义或意义。

    还可以查看NLTK's WordNet how to,了解更多探索含义或单词的方法。

    【讨论】:

      【解决方案3】:

      documentation suggests

      wordnet.synsets('dog') 
      

      获取 dog 的所有同义词。

      【讨论】:

      • 链接已失效。
      猜你喜欢
      • 2013-02-26
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多