使用命名实体注释将标签合并到我的文件中

Merging tags into my file using named entity annotation

在学习文本挖掘的基础知识时,我 运行 遇到了以下问题:我必须使用命名实体注释来查找和定位命名实体。但是,一旦找到,标签必须包含在文档中。因此,例如:"Hello I am Koen" 必须导致“你好,我是 Koen < /PERSON>。

我想出了如何查找和标记命名实体,但我仍然坚持以正确的方式将它们放入文件中。我试过比较 ent.orth_ 是否在文件中,然后用标签 + ent.orth_ + 结束标签替换它。

print([(X, X.ent_iob_, X.ent_type_) for X in doc])

我用它来定位实体的位置和起点。

for ent in doc.ents:
    entities.append(ent.orth_ + ", " + ent.label_)

我用它来创建一个既有原始形式又有标签的变量。

现在我有了带有所有原始形式和标签的变量,并且知道实体的开始和结束位置。然而,当我试图以某种方式替换它时,我的知识 运行 很短,找不到任何类似的例子。

试试这个:

import spacy

nlp = spacy.load("en_core_web_sm")
s ="Apple is looking at buying U.K. startup for  billion"
doc = nlp(s)

def replaceSubstring(s, replacement, position, length_of_replaced):
    s = s[:position] + replacement + s[position+length_of_replaced:]
    return(s)

for ent in reversed(doc.ents):
    #print(ent.text, ent.start_char, ent.end_char, ent.label_)
    replacement = "<{}>{}</{}>".format(ent.label_,ent.text, ent.label_)
    position = ent.start_char
    length_of_replaced = ent.end_char - ent.start_char 
    s = replaceSubstring(s, replacement, position, length_of_replaced)

print(s)
#<ORG>Apple</ORG> is looking at buying <GPE>U.K.</GPE> startup for <MONEY> billion</MONEY>