2016-10-20 3 views
1

Я довольно новичок в nltk. Я пытаюсь выяснить решение проблем я в настоящее время работаю на:Учитывая два слова, найдите, находятся ли они в одном синфаксе

  • Предоставлено два слова w1 и w2 есть способ, чтобы выяснить, относятся ли они к тому же Sysnet в базе Wordnet?
  • Также возможно найти список систем, содержащих данное слово?

Спасибо.

ответ

2

Также возможно найти список систем, содержащих заданное слово ?

Да:

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

Если мы посмотрим на чешуй в каждом из synset 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 (Отказ от ответственности: Shameless вилка)

Даны два слова w1 и w2 есть способ, чтобы выяснить, ли они принадлежат к одной и той же Sysnet в базе Wordnet?

Да:

>>> 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')]) 
Смежные вопросы