Стэнфордская лемматизация NLP не может обрабатывать слова с -ing

Я экспериментировал с набором инструментов Stanford NLP и его возможностями лемматизации. Я удивлен, как он лемматизирует некоторые слова. Например:

depressing -> depressing
depressed -> depressed
depresses -> depress

Он не может преобразовать depressing и depressed в одну и ту же лемму. Аналогично происходит с confusing и confused, hopelessly и hopeless. У меня такое ощущение, что единственное, что он может сделать, это удалить s, если слово находится в такой форме (например, feels -> feel). Является ли такое поведение нормальным для Lematizatiors в английском языке? Я ожидаю, что они смогут преобразовать такие вариации обычных слов в одну и ту же лемму.

Если это нормально, следует ли мне использовать стеммеры? И есть ли способ использовать стеммеры, такие как Porter (Snowball и т. д.) в StanfordNLP? В их документации нет упоминания о стеммерах; однако в API есть несколько CoreAnnotations.StemAnnotation. Если это невозможно в StanfordNLP, какие стеммеры вы рекомендуете использовать в Java?


person nikicc    schedule 13.05.2015    source источник


Ответы (2)


Лемматизация в решающей степени зависит от части речи токена. Только токены с одной и той же частью речи отображаются в одну и ту же лемму.

В предложении «Это сбивает с толку» confusing анализируется как прилагательное, и поэтому оно лемматизируется до confusing. Напротив, в предложении «Я спутал вас с кем-то другим» confusing анализируется как глагол и лемматизируется до confuse.

Если вы хотите, чтобы токены с разными частями речи были сопоставлены с одной и той же леммой, вы можете использовать алгоритм стемминга, такой как Porter Stemming, который можно просто вызывать для каждого токена.

person yvespeirsman    schedule 13.05.2015
comment
Ага. используйте стеммер, если вам нужны псевдо-основы, но будьте очень осторожны, так как основы не всегда являются реальными словами (он просто использует набор жестко запрограммированных правил и регулярных выражений, так что это не так уж умно)! - person user3639557; 15.05.2015

Добавление к ответу yvespeirsman:

Я вижу, что при применении лемматизации мы должны следить за тем, чтобы в тексте сохранялась пунктуация, то есть удаление пунктуации должно предшествовать лемматизации, так как лемматизатор учитывает тип слова (часть речи ) при выполнении своей задачи.

Обратите внимание на слова запутать и запутать в приведенных ниже примерах.

С пунктуацией:

for token in nlp("This is confusing. You are confusing me."):
   print(token.lemma_)

Выход:

this
be
confusing
.
-PRON-
be
confuse
-PRON-
.

Без знаков препинания:

for token in nlp("This is confusing You are confusing me"):
   print(token.lemma_)

Выход:

this
be
confuse
-PRON-
be
confuse
-PRON-
person karr    schedule 30.08.2020