Лемматизация с использованием Spacy

У меня есть список, который содержит предложения.

list = ["I'm hoping to go jogging", "I haven't eaten in a while","where is everybody going"]

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

как мне это сделать с помощью spacy?

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


person Nimphadora    schedule 07.08.2017    source источник


Ответы (1)


Это похоже на то, что вы ищете:

import spacy
from spacy.en import English
parser = English()

list = ["I'm hoping to go jogging", "I haven't eaten in a while","where is everybody going", 
    "Hello, how are you? I'm doing good."]
lemmatized_list = []

for sentence in list:
    tokens = parser(sentence)
    lemmas = []
    for tok in tokens:
        if not tok.is_punct:
            lemmas.append(tok.lemma_.lower().strip() if tok.lemma_ != "-PRON-" else tok.lower_)
    lemmatized_phrase = ""
    for l in lemmas:
        lemmatized_phrase += l + " "
    lemmatized_phrase = lemmatized_phrase[:-1]
    lemmatized_list.append(lemmatized_phrase)
print (lemmatized_list)

>>> ['i be hop to go jogging', "i haven't eat in a while", 'where be everybody go', 'hello how be you i be do good']
person cardamom    schedule 07.08.2017
comment
это выглядит нормально, за исключением того, что есть такие предложения, как Привет, как дела? У меня все хорошо.. Запятая и точка будут восприниматься как другое слово. Как мне получить их такими, какие они есть. Я хочу, чтобы это выглядело как - привет, как дела? я буду делать хорошо. - person Nimphadora; 07.08.2017
comment
@AshanWijenayake Сначала токенизировать, затем лемматизировать, а затем присоединиться к лемматизированным токенам? Фактически удалите tok.is_punct из приведенного выше кода. - person erip; 08.08.2017
comment
Я поставил tok.is_punct, потому что он не хотел, чтобы в результате были вопросительные знаки и другие знаки препинания. - person cardamom; 08.08.2017