2014-12-17 1 views
11

Некоторое время назад кто-то из пользователей SO спросил how to retrieve a list of words for a given synset с использованием оболочки wordnet от NLTK. Вот один из предложенных ответов:Извлечение Word из Synset с использованием Wordnet в NLTK 3.0

for synset in wn.synsets('dog'): 
    print synset.lemmas[0].name 

Выполнение этого кода с NLTK 3.0 выходами TypeError: 'instancemethod' object is not subscriptable.

Я пробовал все предлагаемые ранее решения (каждое из решений, описанных на странице, приведенной выше), но каждый из них вызывает ошибку. Поэтому я хотел спросить: возможно ли напечатать слова для списка синтезаторов с NLTK 3.0? Я был бы благодарен за любые советы, которые другие могут предложить по этому вопросу.

+0

Есть ли причина использования последней версии NLTK и более стабильной (хотя и более ранней) версии ? – user3898238

+0

Я работаю в многоязычных контекстах, и я думал, что Open Multilingual Wordnet реализован только в версии 3.0. Если бы он был доступен в более ранних итерациях, я все уши! – duhaime

+0

Похоже, OMW был доступен через NLTK в течение некоторого времени. Я попытаюсь вернуться к более раннему и более стабильному выпуску ... – duhaime

ответ

14

WordNet отлично работает в NLTK 3.0. Вы просто обращаетесь к леммам (и именам) неправильно. Попробуйте вместо этого:

>>> import nltk 
>>> nltk.__version__ 
'3.0.0' 
>>> from nltk.corpus import wordnet as wn 
>>> for synset in wn.synsets('dog'): 
    for lemma in synset.lemmas(): 
     print lemma.name() 


dog 
domestic_dog 
Canis_familiaris 
frump 
dog 
dog 
cad 
bounder 
blackguard 
... 

synset.lemmas способ и не имеет метода __getitem__() (и так не subscriptable).

+0

отлично - спасибо! – duhaime

+1

@duhaime Рад, что у вас это работает! –

+0

Я получаю ошибку в этом синтаксисе: nltk .__ version __ '3.0.0' Моя версия NLTK - 3.2.1, я пробовал nltk .__ version__ '3.2.1'. Но ошибка. –

6

Использование:

wn.synset('dog.n.1').name() 

вместо:

wn.synset('dog.n.1').name 

потому NLTK измененные свойства Synset, чтобы получить функции вместо. см https://github.com/nltk/nltk/commit/ba8ab7e23ea2b8d61029484098fd62d5986acd9c

Это хороший список изменений в API NLTK для удовлетворения py3.x: https://github.com/nltk/nltk/wiki/Porting-your-code-to-NLTK-3.0

+0

большое спасибо за ссылку! – duhaime

9

Вы также можете перейти непосредственно к именам чешуя с lemma_names():

>>> wordnet.synset('dog.n.1').lemma_names() 
['dog', 'domestic_dog', 'Canis_familiaris'] 

И это работает для нескольких языков

>>>> wordnet.synset('dog.n.1').lemma_names(lang='jpn') 
['イヌ', 'ドッグ', '洋犬', '犬', '飼犬', '飼い犬'] 

 Смежные вопросы

  • Нет связанных вопросов^_^