Python Spacy将ent.label==PERSON的值替换为其他值

Python Spacy将ent.label==PERSON的值替换为其他值,python,replace,entity,spacy,Python,Replace,Entity,Spacy,我正在使用Python Spacy将标签为“[XXX]”的任何实体替换为_==“PERSON”。 看起来我做得不错,但我正在努力将其替换到我的测试字符串中: import spacy from spacy.matcher import Matcher nlp = spacy.load("en_core_web_sm") file_text = """This is my teststring. Isaac Newton is supposed

我正在使用Python Spacy将标签为“[XXX]”的任何实体替换为_==“PERSON”。 看起来我做得不错,但我正在努力将其替换到我的测试字符串中:

import spacy
from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm")

file_text = """This is my teststring. Isaac Newton is supposed to be changed."""

nlp.add_pipe("merge_entities")

def change_names(file_text):
    text_doc = nlp(file_text)
    mylist = []
    for ent in text_doc.ents:
        if ent.label_ == "PERSON":
            print(ent)
            mylist.append("[XXX]")
        else:
            mylist.append(ent.text)
    res = ''.join(mylist)
    print(res)
    print(text_doc)

change_names(file_text)
这导致:

艾萨克牛顿 [XXX] 这是我的测试字符串。艾萨克·牛顿应该被改变

结果应该是: 这是我的测试字符串。[三十] 是应该改变的


现在我想迭代我的文本文档并用标签替换任何ent。这不适合我。我尝试使用双forloop对字符串进行迭代,如果一个项是一个实体,则跳入我在这里发布的for循环。有什么建议吗?

因为您只需要一个字符串输出,所以可以使用

result=[]
对于文本文档中的t:
如果t.ent\U类型=人:
结果。追加(“[XXX]”)
其他:
result.append(t.text)
result.append(t.whitespace)
res=''.join(结果)
打印(res)
即:

  • 一旦找到
    人员
    实体,将
    [XXX]
    附加到
    结果
    列表中
  • 否则,添加当前标记文本
  • 在标记(如果存在)后附加任何空格

然后,最后,加入
结果
项。

你不能指望
艾萨克•牛顿
会被更改,因为你甚至都没有试图修改
文本文档
。如果你尝试,你会发现。您只能重新创建文档。如果您只想获得一个字符串作为修改后的文本的输出,这会更容易。这就是我试图通过将其附加到列表并将其加入到新字符串中来实现的。我只是不知道在哪一点我必须把艾萨克牛顿的值改成[XXX]