Лемматизация слов с использованием spacy и nltk не дает правильной леммы - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу получить лемматизированные слова слов в приведенном ниже списке:

(например)

words = ['Funnier','Funniest','mightiest','tighter']

Когда я делаю простую,

import spacy
nlp = spacy.load('en')
words = ['Funnier','Funniest','mightiest','tighter','biggify']
doc = spacy.tokens.Doc(nlp.vocab, words=words)
for items in doc:
    print(items.lemma_)

Я получил такие леммы, как:

Funnier
Funniest
mighty
tight 

Когда я иду на nltk WordNetLemmatizer

from nltk.stem import WordNetLemmatizer 
lemmatizer = WordNetLemmatizer() 
words = ['Funnier','Funniest','mightiest','tighter','biggify']
for token in words:
    print(token + ' --> ' +  lemmatizer.lemmatize(token))

Я получил:

Funnier : Funnier
Funniest : Funniest
mightiest : mightiest
tighter : tighter

Любой, кто поможет мне в этом.

Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2019

Лемматизация полностью зависит от той части речевого тега, которую вы используете при получении леммы конкретного слова.

# Define the sentence to be lemmatized
sentence = "The striped bats are hanging on their feet for best"

# Tokenize: Split the sentence into words
word_list = nltk.word_tokenize(sentence)
print(word_list)
#> ['The', 'striped', 'bats', 'are', 'hanging', 'on', 'their', 'feet', 'for', 'best']

# Lemmatize list of words and join
lemmatized_output = ' '.join([lemmatizer.lemmatize(w) for w in word_list])
print(lemmatized_output)
#> The striped bat are hanging on their foot for best

Приведенный выше код представляет собой простой пример того, как использовать лемматизатор wordnet для слов и предложений.

Обратите внимание, что он не сработал.Потому что «are» не преобразуется в «be», а «hang» не преобразуется в «hang», как ожидалось.Это можно исправить, если в качестве второго аргумента lemmatize () указать правильный тег «часть речи» (POS-тег).

Иногда одно и то же слово может иметь несколько лемм в зависимости от значения/ context.

print(lemmatizer.lemmatize("stripes", 'v'))  
#> strip

print(lemmatizer.lemmatize("stripes", 'n'))  
#> stripe

Для приведенного выше примера () укажите соответствующий тег pos:

from nltk.stem import WordNetLemmatizer 
lemmatizer = WordNetLemmatizer() 
words = ['Funnier','Funniest','mightiest','tighter','biggify']
for token in words:
    print(token + ' --> ' +  lemmatizer.lemmatize(token, wordnet.ADJ_SAT))
...