Требуется другой Nltk, гипернимный вывод wordnet

Когда я пытаюсь напечатать гиперним, мне просто нужно слово, а не вся информация о слове.

pp = wn.synset('grow.v.01')
pp1= pp.hypernyms()
print pp1

Мой вывод: [Synset('change.v.02')]. Я просто хочу "перемен". Какое изменение мне нужно сделать? Извините, я новичок в wordnet.


person code ninja    schedule 16.06.2017    source источник
comment
См. stackoverflow.com/questions/27517924/   -  person alvas    schedule 16.06.2017


Ответы (1)


Вы можете использовать функцию lemma_names объекта Synset. Имейте в виду, что он возвращает список имен, вы можете выбрать то, которое вас устраивает (в этом случае это только 1 результат 'change').

>> print(pp1[0].lemma_names())
['change']

Также вызов hypernyms() также возвращает вам список, поэтому я использовал pp1[0]. Например, запрос 'dog' возвращает [dog, frump, cad...] и т. д. Если вы хотите получить все lemma_names для всех гипернимов, вы можете использовать понимание списка.

>> [s.lemma_names() for s in wn.synsets('dog')]
[['dog', 'domestic_dog', 'Canis_familiaris'],
 ['frump', 'dog'],
 ['dog'],
 ...
 ['chase', 'chase_after', 'trail', 'tail', 'tag', 'give_chase', 'dog', 'go_after',  'track']]
person umutto    schedule 16.06.2017
comment
спасибо, с помощью print(pp1[0].lemma_names()) я получаю вывод [u'change'], что означает 'u' и почему он отличается от вашего? Это проблема версии wordnet или что-то еще? - person code ninja; 16.06.2017
comment
Ключевое слово @codeninja u означает, что это строка unicode. Я написал свой ответ на python 3, где литеральные строки кодируются как unicode по по умолчанию, отсюда и разница. В любом случае, то, как это представлено на консоли, не должно иметь для вас никакого значения, вы обрабатываете change, u просто показывает вам свою кодировку. (Если вы печатаете член списка, например: print(pp1[0].lemma_names()[0]), я считаю, что он должен быть распечатан без ключевого слова unicode и в python 2) - person umutto; 16.06.2017