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

如何用Python SpaCy纯模式实现:匹配‘ptu’但排除‘ptu switch’?

解决方案

要实现匹配ptu但排除ptu switch搭配的需求,可借助SpaCy Matcher的否定属性约束和可选token规则,无需硬编码判断语句,纯通过匹配模式完成:

import spacy
from spacy.matcher import Matcher

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

# 定义两个模式,覆盖所有符合要求的场景
patterns = [
    # 模式1:ptu是句子/片段的最后一个词(后面无其他token)
    [{"LOWER": "ptu"}, {"OP": "!"}],
    # 模式2:ptu后面跟随的token不是switch
    [{"LOWER": "ptu"}, {"LOWER": {"NOT_IN": ["switch"]}}]
]

# 添加模式到匹配器
matcher.add("PTU_EXCLUDE_SWITCH", patterns)

# 测试不同文本
test_cases = [
    "ptu switch was replaced",
    "ptu was replaced",
    "check the ptu",
    "PTU test completed",
    "switch ptu"
]

for text in test_cases:
    doc = nlp(text)
    matches = matcher(doc)
    print(f"文本: {text}")
    if matches:
        for match_id, start, end in matches:
            span = doc[start:end]
            print(f"匹配结果: {span.text}")
    else:
        print("无符合要求的匹配")
    print("---")

模式说明

  • 模式1:{"OP": "!"}表示该位置不存在任何token,确保单独出现的ptu(作为片段最后一个词)能被匹配。
  • 模式2:{"LOWER": {"NOT_IN": ["switch"]}}明确约束ptu后面的token不能是switch(大小写不敏感),覆盖ptu后跟其他词汇的场景。

运行效果

  • 含ptu switch的文本不会触发匹配
  • 单独的ptu或ptu后跟非switch词汇的文本会正常匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:05:18