Как я могу лемматизировать строки в кадрах данных pandas?

У меня есть кадр данных Python Pandas, где мне нужно лемматизировать слова в двух столбцах. Я использую для этого использование spacy.

import spacy
nlp = spacy.load("en")

Я пытаюсь использовать лемматизацию на основе этого примера (который отлично работает):

doc3 = nlp(u"this is spacy lemmatize testing. programming books are more better than others")
for token in doc3: 
    print (token, token.lemma, token.lemma_)

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

for row in example['col1']:
    for token in row:
        print(token.lemma_)

Это работает, однако я не смог понять, как заменить слова в col1 лемматизированными словами.

Я пробовал это, что не возвращает ошибку, но и не заменяет никаких слов. Любая идея, что происходит не так?

for row in example['col1']:
    for token in row:
        token = token.lemma_

person Mia    schedule 26.11.2017    source источник


Ответы (1)


В последнем цикле for вашего кода вы неоднократно присваиваете переменной token ее атрибут token.lemma_, а затем делаете это снова и снова (перезаписывая это на каждой итерации и не отслеживая предыдущие значения).

Вместо этого, предполагая, что ваш фрейм данных содержит строки, как в

example = pd.DataFrame({"col1":["this is spacy lemmatization testing.", "some programming books are better than others", "sounds like a quote from the Smiths"]})

apply и понимание списков могут выполнять эту работу с помощью:

example["col1"].apply(lambda row: " ".join([w.lemma_ for w in nlp(row)]))
person Davide Fiocco    schedule 16.03.2018