如何用Spacy提取‘asked’前的人名实体?是否需结合Matcher与NER?
解决方案:提取"asked"之前的人物实体
你需要结合Matcher和NER来实现需求,NER负责识别文本中的人物实体,Matcher用来定位"asked"的位置,从而筛选出该词之前的人物。
修改后的代码如下:
import spacy from spacy.matcher import Matcher nlp = spacy.load("en_core_web_trf") doc = nlp( "Mr Louis Ng asked what kind of additional support can we give to sectors and businesses where the human interaction cannot be mechanised. Mr Lam Pin Min replied that businesses could hire extra workers in such cases." ) # 初始化Matcher,绑定当前nlp的词汇表 matcher = Matcher(nlp.vocab) # 添加匹配规则:匹配"asked"这个词 pattern = [{"TEXT": "asked"}] matcher.add("ASKED_PATTERN", [pattern]) # 获取匹配结果 matches = matcher(doc) # 提取第一个匹配到的"asked"的起始位置 asked_start = None for match_id, start, end in matches: asked_start = start break # 遍历所有实体,筛选出"asked"之前的人物 if asked_start is not None: for ent in doc.ents: if ent.label_ == "PERSON" and ent.end < asked_start: print(ent.text)
代码说明:
- 导入
Matcher工具,用于精准定位"asked"在文本中的位置 - 定义匹配规则,锁定目标单词"asked"
- 获取"asked"在文档中的起始索引,以此作为筛选边界
- 遍历NER识别出的所有实体,只保留标签为
PERSON且实体结束位置在"asked"起始位置之前的内容
运行后输出:
Louis Ng
内容的提问来源于stack exchange,提问作者123456
相关产品推荐
相关产品推荐

