Лемма имеет атрибут synset
, который имеет свою собственную часть речи в своем атрибуте pos
. Итак, если у нас есть лемма l
, мы можем получить доступ к ее части речи следующим образом:
>>> l = Lemma('gladden.v.01.joy')
>>> l.synset.pos
'v'
В более общем смысле, мы можем расширить это в цикл для чтения вашего файла. Я использую оператор with
, потому что он хорошо закрывает файлы после завершения цикла.
>>> with open('sample.txt') as f:
... raw = f.read()
... for sentence in nltk.sent_tokenize(raw):
... sentence = nltk.wordpunct_tokenize(sentence)
... for word in sentence:
... for synset in wn.synsets(word):
... for lemma in synset.lemmas:
... print lemma.name, lemma.synset.pos
...
Если вы хотите убедиться, что вы выбираете только леммы с той же частью речи, что и слово, о котором вы сейчас говорите, то вам нужно будет также указать часть речи этого слова:
>>> import nltk
>>> from nltk.corpus import wordnet as wn
>>> with open('sample.txt') as f:
... raw = f.read()
... for sentence in nltk.sent_tokenize(raw):
... sentence = nltk.pos_tag(nltk.wordpunct_tokenize(sentence))
... for word, pos in sentence:
... print word, pos
Я оставлю примирение этих двух как упражнение для читателя.