![](/img/trans.png)
[英]How to extract Person Names from a data frame in Python using Spacy
[英]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.