NLTK WordNetLemmatizer: не Lemmatizing как ожидаемый

Я пытаюсь lemmatize все слова в предложении с train_sentences [ 0 ] "Объяснение Почему изменения сделали имя пользователя Hardcore Metallica Fan вернули? Вандализм, закрытие GAs Я проголосовал за New York Dolls FAC. И, пожалуйста, удалите страницу обсуждения с тем, м пенсию now.89.205.38.27" «s лемматизатор = WordNetLemmatizer () new_sent = [ лемматизатор . lemmatize ( слово ) для слова в train_sentences [ 0 ]. split ()] print ( new_sent ) , У меня есть куча предложений, но я просто использую первое предложение, чтобы убедиться, что я делаю это правильно. Вот что я имею:

['Explanation', 'Why', 'edits', 'made', 'username', 'Hardcore', 'Metallica', 'Fan', 'reverted?', 'They', 'vandalisms,', 'closure', 'GAs', 'I', 'voted', 'New', 'York', 'Dolls', 'FAC.', 'And', 'please', 'remove', 'template', 'talk', 'page', 'since', "I'm", 'retired', 'now.89.205.38.27']

Итак, теперь я пытаюсь леммитировать каждое слово следующим образом:

lemmatizer.lemmatize("edits")

И я возвращаюсь:

edits

Пара вопросов:

1) Почему «lemmatizer.lemmatize (« вандализм »)« не преобразуется в «редактирование»? Признаюсь, что я вернусь, но был удивлен.from nltk import pos_tag from nltk.stem import WordNetLemmatizer wnl = WordNetLemmatizer() def penn2morphy(penntag): """ Converts Penn Treebank tags to WordNet. """ morphy_tag = {'NN':'n', 'JJ':'a', 'VB':'v', 'RB':'r'} try: return morphy_tag[penntag[:2]] except: return 'n' def lemmatize_sent(text): # Text input is string, returns lowercased strings. return [wnl.lemmatize(word.lower(), pos=penn2morphy(tag)) for word, tag in pos_tag(word_tokenize(text))] lemmatize_sent('He is walking to school')edits

2) Почему «пивдс» не превращается в «вандализм»? Это очень удивительноWordNetLemmatizer, поскольку, если я это сделаю , я вернусь ...pip install -U nltk python -m nltk.downloader popular pip install -U pywsdvandalism

Любое разъяснение / руководство было бы удивительным!

python,nltk,

0

Ответов: 2


1 принят

TL; DR

Сначала отметьте предложение, затем используйте тег POS в качестве дополнительного входного параметра для лемматизации.

>>> from pywsd.utils import lemmatize_sentence
Warming up PyWSD (takes ~10 secs)... took 9.307677984237671 secs.

>>> text = "Mary leaves the room"
>>> lemmatize_sentence(text)
['mary', 'leave', 'the', 'room']

>>> text = 'Dew drops fall from the leaves'
>>> lemmatize_sentence(text)
['dew', 'drop', 'fall', 'from', 'the', 'leaf']

Подробное описание того, как и почему требуется тег POS, см. На странице https://www.kaggle.com/alvations/basic-nlp-with-nltk


Кроме того, вы можете использовать nltktokenizer + lemmatizer, оболочку NLTK WordNetLemmatizer:

Установка:

,

Код:

vandalisms,

(Примечание для модераторов: я не могу отметить этот вопрос как дубликат nltk: как леммитировать использование окружающих слов в контексте? Потому что ответ не был принят там, но это дубликат).


1
  1. Это действительно то, на что nltkсообщество сможет ответить.
  2. Это происходит из- ,за конца. ,Чтобы удалить этот трейлинг ,, вы можете использовать .strip(',')или использовать mutliple delimiters, как описано здесь .
питон, NLTK,
Похожие вопросы