如何对 pandas 数据框中的字符串进行词形还原?

Mia*_*Mia 5 python lemmatization pandas spacy

我有一个 Python Pandas 数据框,我需要对其中两列中的单词进行词形还原。我正在使用 spacy 来实现这一点。

import spacy
nlp = spacy.load("en")
Run Code Online (Sandbox Code Playgroud)

我正在尝试基于此示例使用词形还原(效果非常好):

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_)
Run Code Online (Sandbox Code Playgroud)

我已经重写了它以循环遍历数据框中一列的每一行:

for row in example['col1']:
    for token in row:
        print(token.lemma_)
Run Code Online (Sandbox Code Playgroud)

这是可行的,但是,我无法弄清楚如何用词形还原的单词替换 col1 中的单词。

我已经尝试过,它不会返回错误,但也不会替换任何单词。知道出了什么问题吗?

for row in example['col1']:
    for token in row:
        token = token.lemma_
Run Code Online (Sandbox Code Playgroud)

Dav*_*cco 8

在代码的最后一个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"]})
Run Code Online (Sandbox Code Playgroud)

apply列表推导式可以完成以下工作:

example["col1"].apply(lambda row: " ".join([w.lemma_ for w in nlp(row)]))
Run Code Online (Sandbox Code Playgroud)