python3 nltk, WordNetLemmatizer Произошла ошибка

Я посмотрел на книгу и сделал код, как это было в книге. Кстати, у меня следующая ошибка. Что я должен делать?

from nltk.stem import PorterStemmer, WordNetLemmatizer

sent = 'The laughs you two heard were triggered by memories 
            of his own high j-flying exits for moving beasts'

lemmatizer = WordNetLemmatizer()
words = lemmatizer.lemmatize(sent, pos = 'pos')

File "D:/machine_learning/nltk_mapper.py", line 24, in <module>
    word = lemmatizer.lemmatize(words, pos='pos')
  File "D:\machine_learning\venv\lib\site-packages\nltk\stem\wordnet.py", line 40, in lemmatize
    lemmas = wordnet._morphy(word, pos)
  File "D:\machine_learning\venv\lib\site-packages\nltk\corpus\reader\wordnet.py", line 1818, in _morphy
    exceptions = self._exception_map[pos]
KeyError: 'pos'

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

  ['The', 'laugh', 'two', 'hear', 'trigger', 
   'memory', 'high', 'fly', 'exit', 'move', 'beast']

Спасибо


Я решил это. Я сослался на следующий URL. NLTK: лемматизатор и pos_tag

from nltk.tag import pos_tag
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
def lemmatize_all(sentence):
    wnl = WordNetLemmatizer()
    for word, tag in pos_tag(word_tokenize(sentence)):
        if tag.startswith("NN"):
            yield wnl.lemmatize(word, pos='n')
        elif tag.startswith('VB'):
            yield wnl.lemmatize(word, pos='v')
        elif tag.startswith('JJ'):
            yield wnl.lemmatize(word, pos='a')
        # else:
        #     yield word

print(' '.join(lemmatize_all('The laughs you two heard were triggered by memories of his own high j-flying exits for moving beasts')))

результат --> смех слышен быть триггером памяти собственный высокий j-fly выход двигаться зверь

благодарю вас


person susim    schedule 13.09.2018    source источник
comment
Кстати, в какой главе книги вы нашли этот фрагмент кода? Или это из другой книги, отличной от nltk.org/book/ch03.html?   -  person alvas    schedule 14.09.2018
comment
Да, я читал книгу «Расширенное машинное обучение с помощью Python».   -  person susim    schedule 14.09.2018


Ответы (1)


Цель лемматизации состоит в том, чтобы сгруппировать различные флективные формы слова, называемые леммами. Например, лемматизатор должен отобразить ушел, пошел и ушел в путь. Таким образом, мы должны лемматизировать каждое слово отдельно.

from nltk.stem import PorterStemmer, WordNetLemmatizer

sent = 'The laughs you two heard were triggered by memories of his own high j-flying exits for moving beasts'
sent_tokenized = sent.split(" ")
lemmatizer = WordNetLemmatizer()
words = [lemmatizer.lemmatize(word) for word in sent_tokenized]
person MNA    schedule 13.09.2018
comment
Спасибо. Как я уже упоминал, я хотел бы извлечь значимые слова. Там в любом случае? - person susim; 14.09.2018
comment
['The', 'смех', 'два', 'услышать', 'триггер', 'память', 'высокий', 'летать', 'выход', 'движение', 'зверь'] - person susim; 14.09.2018
comment
для этого вы должны удалить стоп-слова. для удаления стоп-слов обратитесь к этой ссылке. - person MNA; 14.09.2018
comment
большое спасибо - person susim; 14.09.2018