在Spacy3中的文档中追加新实体失败 [英] Appending new entities in doc.ents in Spacy3 fails

查看:37
本文介绍了在Spacy3中的文档中追加新实体失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Spacy的nlp管道中添加一个自定义组件。下面是我要遵循的步骤。

  1. 创建匹配器来挑选汽车名称
  2. 定义使用此匹配器的自定义组件,并将匹配项追加到现有的doc.ents

尽管提供了SPAN对象类型,但最后一次追加失败。

# Matcher info
cars = ['honda', 'toyota', 'yamaha', 'mazda', 'range rover', 'mercedes']
matcher = PhraseMatcher(nlp.vocab)
patterns = list(nlp.pipe(cars))
matcher.add('acar?', None, *patterns)

# Define component
@Language.component('car_check')
def car_component(doc, name='isacar?'):
    cars =[Span(doc,start, end, label='CAR')
           for match_id, start, end in matcher(doc)]
    doc.ents = list(doc.ents) + [cars]
    return doc

nlp.add_pipe('car_check',after='ner')

doc=nlp("fascinated by european cars like range rover & mercedes, love japanese cars like toyota and nissan ")

我在最后一步中遇到以下错误。

---->    doc.ents = list(doc.ents) + [cars]
TypeError: an integer is required

此操作为什么失败?

推荐答案

不确定为什么会出现这样的错误,但问题是您将cars包装在一个列表中,但它已经是一个列表。试试这个:

doc.ents = list(doc.ents) + cars

另请注意,如果实体重叠,则不起作用。

您看到EntityRuler了吗?您基本上是在做同样的事情,所以直接使用它可能会更容易。

这篇关于在Spacy3中的文档中追加新实体失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆