对nltk来说还很新。我正在尝试找出解决方案
我目前正在研究的问题:


给定两个单词w1和w2,有没有一种方法可以找出它们是否在Wordnet数据库中属于相同的sysnet?
还可以找到包含给定单词的sysnet列表吗?


谢谢。

最佳答案

也可以找到包含给定的sysnet列表
  字?


是:

>>> from nltk.corpus import wordnet as wn
>>> auto, car = 'auto', 'car'
>>> wn.synsets(auto)
[Synset('car.n.01')]
>>> wn.synsets(car)
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')]


如果我们查看wn.synsets(car)中每个同义词集中的引理,我们会发现“汽车”作为引理之一存在:

>>> for ss in wn.synsets(car):
...     assert 'car' in ss.lemma_names()
...
>>> for ss in wn.synsets(car):
...     print 'car' in ss.lemma_names(), ss.lemma_names()
...
True [u'car', u'auto', u'automobile', u'machine', u'motorcar']
True [u'car', u'railcar', u'railway_car', u'railroad_car']
True [u'car', u'gondola']
True [u'car', u'elevator_car']
True [u'cable_car', u'car']


注意:引理并不完全是表面单词,另请参见Stemmers vs Lemmatizers,您可能会发现此有用的https://github.com/alvations/pywsd/blob/master/pywsd/utils.py#L66(免责声明:无耻插件)


  给定两个单词w1和w2,有一种方法可以找出它们是否
  属于Wordnet数据库中的同一sysnet?


是:

>>> from nltk.corpus import wordnet as wn
>>> auto, car = 'auto', 'car'
>>> wn.synsets(auto)
[Synset('car.n.01')]
>>> wn.synsets(car)
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')]
>>> auto_ss = set(wn.synsets(auto))
>>> car_ss = set(wn.synsets(car))
>>> car_ss.intersection(auto_ss)
set([Synset('car.n.01')])

关于python - 给定两个词,找出它们是否在同一个同义词集中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40166031/

10-16 17:30