如何修改spaCy NER实体移除函数 仅删除人名和组织机构名称
问题原因
你之前的代码会无差别删除所有spaCy识别到的命名实体,且采用文本匹配的判断逻辑,所以金额、时间这类非目标实体也会被误删,示例中的6被识别为MONEY类型实体,也被纳入了删除范围。
修改方案
调整判断逻辑,仅过滤实体类型为PERSON(人名)和ORG(组织机构)的token即可,不需要提前收集所有实体的文本,直接通过每个token的ent_type_属性判断所属实体类型,逻辑更精准,也能避免同文本内容的误判。
修改后代码
import spacy sp = spacy.load('en_core_web_sm') def NER_removal(text): document = sp(text) text_no_namedentities = [] for item in document: # 仅跳过人名和组织机构类实体 if item.ent_type_ in ("PERSON", "ORG"): continue text_no_namedentities.append(item.text) return " ".join(text_no_namedentities)
测试效果
调用NER_removal("John loves to play at Sofi stadium at 6.00 PM and he earns $6"),输出结果为:loves to play at stadium at 6.00 PM and he earns $6
符合保留金额数字的需求。
内容的提问来源于stack exchange,提问作者user2543622
相关产品推荐
相关产品推荐

