繁体   English   中英

使用 Spacy 从数据框中删除名称 Python 3.9

[英]using Spacy to remove names from a data frame in Python 3.9

我正在使用 Python 3.9 中的 spacy package v3.2.1,想了解如何使用它从数据框中删除名称。 我尝试按照 spacy 文档进行操作,并且能够正确识别名称,但不了解如何删除它们。 我的目标是从数据框的特定列中删除所有名称。

实际的

ID 评论
A123 我今年五岁,我的名字叫约翰
X907 今天我见到了雅各布博士

我想要完成的事情

ID 评论
A123 我今年五岁,我的名字是
X907 今天我见到了博士。

代码:

#loading packages
import spacy
import pandas as pd
from spacy import displacy


#loading CSV
df = pd.read_csv('names.csv)

#loading spacy large model
nlp = spacy.load("en_core_web_lg")

#checking/testing is spacy large is identifying named entities
df['test_col'] = df['Comment'].apply(lambda x: list(nlp(x).ents)) 

我的代码做什么

ID 评论 测试列
A123 我今年五岁,我的名字叫约翰 [(约翰)]
X907 今天我见到了雅各布博士 [(雅各布)]

但是我 go 如何从 Comment 列中删除这些名称? 我想我是某种 function 遍历数据框的每一行并删除已识别的实体。 感谢您的帮助

谢谢

您可以使用

import spacy
import pandas as pd

# Test dataframe
df = pd.DataFrame({'ID':['A123','X907'], 'Comment':['I am five years old, and my name is John', 'Today I met with Dr. Jacob']})

# Initialize the model
nlp = spacy.load('en_core_web_trf')

def remove_names(text):
    doc = nlp(text)
    newString = text
    for e in reversed(doc.ents):
        if e.label_ == "PERSON": # Only if the entity is a PERSON
            newString = newString[:e.start_char] + newString[e.start_char + len(e.text):]
    return newString

df['Comment'] = df['Comment'].apply(remove_names)
print(df.to_string())

Output:

     ID                               Comment
0  A123  I am five years old, and my name is
1  X907                 Today I met with Dr.

这是使用字符串replace方法的想法:

编辑:去掉括号看看是否有帮助。

df['test_col'] = df['Comment'].apply(lambda x: str(x).replace(str(nlp(x).ents).lstrip('(').rstrip(')')), '')

我对变量进行了类型转换以帮助匹配,也不确定它是否是 str。 您可能需要使用索引,如果在单个评论中找到多个名称,则循环它,但这就是它的要点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM