НЛТК слова лемматизирующие

Я пытаюсь сделать лемматизацию слов NLTK,

Что я могу найти сейчас, так это то, что я могу использовать stem пакет, чтобы получить некоторые результаты, такие как преобразование "автомобили" в "машину" и "женщины" в "женщину", однако я не могу провести лемматизацию некоторых слов с аффиксами, такими как "подтверждение".

Когда используешь WordNetLemmatizer() на "подтверждение", он возвращает "подтверждение" и используя .PorterStemmer(), он возвращает "подтверждение", а не "подтверждение".

Может кто-нибудь сказать мне, как устранить аффиксы слов?
Скажем, когда вход "подтверждение", выход "подтверждение"

1 ответ

Решение

Лемматизация не возвращает (и не должна) возвращать "подтверждение" для "подтверждение". Первый - глагол, а второй - существительное. С другой стороны, алгоритм портирования Портера просто использует фиксированный набор правил. Таким образом, ваш единственный способ изменить правила в источнике. (НЕ правильный способ решить вашу проблему).

То, что вы ищете, это родственная форма "подтверждения", и для этого вашим лучшим источником является WordNet. Вы можете проверить это онлайн на WordNet.

Существует довольно много библиотек на основе WordNet, которые вы можете использовать для этого (например, в JWNL в Java). В Python NLTK должен иметь возможность получить связанную с деривацией форму, которую вы видели онлайн:

from nltk.corpus import wordnet as wn

acknowledgment_synset = wn.synset('acknowledgement.n.01')
acknowledgment_lemma = acknowledgment_synset.lemmas[1]

print(acknowledgment_lemma.derivationally_related_forms())
# [Lemma('admit.v.01.acknowledge'), Lemma('acknowledge.v.06.acknowledge')]
Другие вопросы по тегам