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

如何在spaCy中实现作者姓名匹配模式的重复匹配

解决spaCy作者姓名模式重复匹配的问题

要实现整个模式序列的重复匹配,你可以把需要重复的子模式打包成一个带pattern和OP参数的字典,用"OP": "+"指定这个子模式重复一次或多次。

另外你原来的模式可以优化下:把标点限制为逗号或分号,避免匹配到无关标点。调整后的完整代码示例如下:

import spacy
from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)

# 定义单个作者+分隔符的子模式:姓 + 名 + 逗号/分号
author_subpattern = [
    {"IS_ALPHA": True},
    {"IS_ALPHA": True},
    {"ORTH": [",", ";"]}
]

# 将子模式包装为可重复组,OP="+"表示匹配1次或多次
repeatable_pattern = [{"pattern": author_subpattern, "OP": "+"}]
# 补充匹配最后一个不带分隔符的作者
final_author = [{"IS_ALPHA": True}, {"IS_ALPHA": True}]
# 组合成完整的作者列表匹配模式
full_author_pattern = repeatable_pattern + [final_author]

# 添加匹配规则
matcher.add("AUTHOR_LIST", [full_author_pattern])

# 测试示例文本
doc = nlp("Smith, John; Jones, Bob, Williams, Alice")
matches = matcher(doc)
for match_id, start, end in matches:
    print(f"匹配到的作者列表: {doc[start:end].text}")
  • 用{"pattern": 子模式, "OP": "+"}是spaCy实现整个序列重复匹配的核心方式,OP还可以设为*(0次或多次)、?(0次或1次),根据需求调整即可。
  • 把标点限定为逗号和分号比单纯用IS_PUNCT更精准,能避免误匹配句号、感叹号这类无关标点。
  • 补充不带标点的作者模式,是因为实际文本里最后一个作者后面通常不会带分隔符,这样能覆盖更完整的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:45:12