Spacy3自定义管道向doc.ents追加新实体触发TypeError报错求解
报错触发原因
错误完全来自doc.ents = list(doc.ents) + [cars]这行的语法逻辑错误:
- 你通过列表推导生成的
cars变量本身就是元素为Span对象的一维列表,格式和list(doc.ents)完全匹配。 - 拼接时你额外给
cars套了一层[],导致最终赋值给doc.ents的是嵌套列表:[原有实体Span, ..., [汽车1_Span, 汽车2_Span...]]。 - spaCy的
doc.ents属性要求赋值内容必须是纯Span对象组成的一维可迭代对象,嵌套列表不符合格式要求,底层解析时预期读取Span对应的位置整数属性,实际读取到了子列表对象,因此抛出整数要求的类型错误。
修复方案
将错误行修改为如下内容即可正常运行:
doc.ents = list(doc.ents) + cars
如果后续出现实体重叠报错,可以调用spaCy内置的filter_spans方法处理冲突:
from spacy.util import filter_spans doc.ents = filter_spans(list(doc.ents) + cars)
内容的提问来源于stack exchange,提问作者Salih
相关产品推荐
相关产品推荐

