Machine learning 我们能在通过NER标记的实体周围找到句子吗?

Machine learning 我们能在通过NER标记的实体周围找到句子吗?,machine-learning,nlp,spacy,Machine Learning,Nlp,Spacy,我们已经准备好了一个模型,它标识了一个自定义命名实体。问题是,如果给出了整个文档,那么模型就不能按照经验工作。如果只给出了几句话,它会给出惊人的结果 我想选择标记实体前后的两个句子 如果文档的一部分有world Colombo(标记为GPE),我需要在标记前选择两个句子,在标记后选择两个句子。我尝试了几种方法,但复杂度太高了 spacy是否有一种内在的方法可以解决这个问题 我正在使用python和spacy 我已尝试通过标识标记的索引来解析文档。但是这种方法确实很慢。看看您是否可以改进自定义命名

我们已经准备好了一个模型,它标识了一个自定义命名实体。问题是,如果给出了整个文档,那么模型就不能按照经验工作。如果只给出了几句话,它会给出惊人的结果

我想选择标记实体前后的两个句子

如果文档的一部分有world Colombo(标记为GPE),我需要在标记前选择两个句子,在标记后选择两个句子。我尝试了几种方法,但复杂度太高了

spacy是否有一种内在的方法可以解决这个问题

我正在使用python和spacy


我已尝试通过标识标记的索引来解析文档。但是这种方法确实很慢。

看看您是否可以改进自定义命名实体识别器,这可能是值得的,因为额外的上下文会影响性能是不寻常的,如果您解决了这个问题,它整体上会工作得更好

但是,关于你对周围句子的具体问题:

Token
Span
(实体是
Span
)具有
.sent
属性,该属性将覆盖语句作为
Span
提供。如果您查看给定句子的开始/结束标记之前/之后的标记,您可以获得文档中任何标记的上一个/下一个句子

导入空间
def get_上一句(文档、令牌索引):
如果doc[token_index].sent.start-1<0:
一无所获
返回单据[doc[token\u index].sent.start-1].sent
def get_next_语句(文档、令牌索引):
如果doc[token\u index].sent.end+1>=len(doc):
一无所获
返回单据[doc[token\u index].sent.end+1].sent
nlp=spacy.load('en\u core\u web\u lg')
text=“Jane是一个名字。这是一个句子。这是另一个句子。Jane在2010年是科伦坡市长。这是另一个填充句。这是另一个没有实体的填充句。其他人现在是科伦坡市长。”
doc=nlp(文本)
对于doc.ents中的ent:
打印(ent,ent.label,ent.sent)
打印(“上一页:”,获取上一句话(文档,ent.start))
打印(“下一步:”,获取下一句话(文档,ent.start))
打印(“---”)
输出:

Jane PERSON Jane is a name.
Prev: None
Next: Here is a sentence.
----
Jane PERSON Jane was the mayor of Colombo in 2010.
Prev: Here is another sentence.
Next: Here is another filler sentence.
----
Colombo GPE Jane was the mayor of Colombo in 2010.
Prev: Here is another sentence.
Next: Here is another filler sentence.
----
2010 DATE Jane was the mayor of Colombo in 2010.
Prev: Here is another sentence.
Next: Here is another filler sentence.
----
Colombo GPE Someone else is the mayor of Colombo right now.
Prev: And here is yet another padding sentence without entities.
Next: None
----