Получите только одну лемму для каждого слова в списке токенов. - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно только одно слово в наборе синонимов wordnet для каждого слова в списке токенов, а не для всех.Как мне передать индекс самой первой леммы для каждого токена.Вот мой код:

from nltk.corpus import wordnet as wn

lemmas = []
text = ['one', 'oasis', 'halliday', 'avatar', 'time', 'school', 'year', 'thing', 'old', 'stack', 'every', 'world',
        'egg', 'game', 'around', 'real', 'name', 'room', 'still', 'even', 'began', 'trailer', 'much',
         'anorak', 'player']
for token in text:
    lemmas += [synset.lemmas()[0].name() for synset in wn.synsets(token)]
print(list(set(lemmas)))

print(len(lemmas))
print(len(text))

Длина текста 25, но длина лемм 203.

1 Ответ

0 голосов
/ 06 декабря 2018

Вы можете сделать следующее:

from nltk.corpus import wordnet as wn

lemmas = []
text = ['one', 'oasis', 'halliday', 'avatar', 'time', 'school', 'year', 'thing', 'old', 'stack', 'every', 'world',
        'egg', 'game', 'around', 'real', 'name', 'room', 'still', 'even', 'began', 'trailer', 'much',
         'anorak', 'player']
for token in text:
    synsets = wn.synsets(token)
    if synsets:
        lemmas.append(synsets[0].lemmas()[0].name())

print(list(set(lemmas)))
print(len(lemmas))
print(len(text))

Вывод

['old', 'stack', 'about', 'school', 'universe', 'evening', 'room', 'egg', 'game', 'one', 'player', 'thing', 'name', 'every', 'get_down', 'much', 'year', 'still', 'time', 'real_number', 'oasis', 'dawdler', 'embodiment', 'parka']
24
25

Длина лемм равна 24, так как слово "1009" не соответствуетесть синтаксис.Это подтверждается:

from nltk.corpus import wordnet as wn

synsets = wn.synsets('halliday')
print(synsets)

Выход

[]
...