You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让spaCy为文本列表中未识别实体添加UNKNOWN标签?

为文本列表所有元素匹配实体标签(未识别标记为UNKNOWN)

需求与问题

需要实现一个函数,接收文本列表后返回每个元素对应的文本与实体标签:

  • 被spaCy识别的实体返回对应标签
  • 未被识别的实体标记为UNKNOWN

当前代码仅返回spaCy识别出的实体,无法覆盖所有输入元素;尝试通过doc.sents处理拼接后的文本,但添加的句号导致标签匹配失效。

当前代码

def get_label(text: list):
    doc = nlp('. '.join(text) + '.')
    keywords = []
    for ent in doc.ents:
        keywords.append((ent.text, ent.label_))
    return keywords

输入示例

['Kaggle', 'Google', 'San Francisco', 'this week', 'as early as tomorrow', 'Kag-ingle', 'about half a million', 'Ben Hamner', '2010', 'Earlier this month', 'YouTube', 'Google Cloud Platform', 'Crunchbase', '$12.5 to $13 million', 'Index Ventures', 'SV Angel', 'Hal Varian', 'Khosla Ventures', 'Yuri Milner']

解决方案

核心思路是逐个处理输入列表中的每个文本元素,避免拼接文本带来的匹配干扰,确保每个输入项的标签判断独立准确。

修改后的代码

import spacy

# 提前加载spaCy模型,避免重复加载
nlp = spacy.load("en_core_web_sm")

def get_label(text_list: list):
    result = []
    for item in text_list:
        doc = nlp(item)
        # 验证实体文本与输入元素完全匹配,避免部分匹配的误判
        if doc.ents and doc.ents[0].text.strip() == item.strip():
            result.append((item, doc.ents[0].label_))
        else:
            result.append((item, "UNKNOWN"))
    return result

代码说明

  1. 遍历输入列表的每个元素,单独用spaCy处理生成文档对象
  2. 检查文档是否包含实体,且实体文本与输入元素完全一致(去除首尾空白避免格式干扰)
  3. 匹配成功则返回实体标签,否则标记为UNKNOWN

输出示例(部分)

[
    ('Kaggle', 'ORG'),
    ('Google', 'ORG'),
    ('San Francisco', 'GPE'),
    ('this week', 'UNKNOWN'),
    ('as early as tomorrow', 'UNKNOWN'),
    ('Kag-ingle', 'UNKNOWN'),
    ('Ben Hamner', 'PERSON'),
    ('2010', 'DATE'),
    ...
]

内容的提问来源于stack exchange,提问作者Jared

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:30:09