НЛТК лемматизатор не знает, что делать со словом американцы - PullRequest
2 голосов
/ 04 ноября 2011

Запустил следующее:

from nltk import WordNetLemmatizer as wnl
wnl().lemmatize("American")
wnl().lemmatize("Americans")

Оба из которых просто возвращают свои аргументы. Я бы хотел, чтобы американцы стали американцами. У кого-нибудь есть идеи, как это сделать?

Я предполагал, что мне придется изменить любой внутренний словарь, используемый лемматизатором Это правильно? Кто-нибудь знает лучший способ?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 04 ноября 2011

Очевидно, дело в WordNet, но вы также можете использовать PorterStemmer.

>>> wnl().lemmatize('americans')
'american'
>>> from nltk.stem import PorterStemmer as ps
>>> ps().stem('Americans')
'American'
1 голос
/ 09 мая 2014

Вы можете преобразовать слово в нижний регистр перед передачей его в лемматизатор и впоследствии восстановить регистр.

Я использовал этот код в прошлом:

word = 'Americans'
lemmatized = wnl().lemmatize(word.lower())
if word.istitle():
    word = lemmatized.capitalize()
else:
    word = lemmatized
# word = 'American'

Это предполагаетчто в одном слове нет нескольких прописных букв (например, «MySpace»), что было верно для моего случая в то время.Я думаю, что в целом это так, поскольку слова с несколькими заглавными буквами, как правило, являются собственными существительными, и, следовательно, обычно нет необходимости их лемматизировать.

Если вас интересует все слово UPPERCASE, вы можете включитьэтот случай также:

word = 'AMERICANS'
lemmatized = wnl().lemmatize(word.lower())
if word.istitle():
    word = lemmatized.capitalize()
elif word.upper()==word:
    word = lemmatized.upper()
else:
    word = lemmatized
# word = 'AMERICAN'
...