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

使用Spacy Matcher时触发SyntaxError语法错误求助

问题排查与修正

核心语法错误原因

你的pattern变量存在字典结构错误:你把三个匹配规则(问候词匹配、重复修饰、标点匹配)塞进了同一个字典里,违反了Python字典key:value的语法规则,直接导致语法报错。

其他两处错误

  1. 未初始化Matcher实例:必须先创建Matcher对象才能调用其方法。
  2. for循环内的print语句未缩进:Python要求循环体代码必须缩进(通常4个空格)。

修正后的完整代码

import spacy
from spacy.matcher import Matcher

# 加载模型并初始化Matcher
nlp = spacy.load("en_core_web_md")
matcher = Matcher(nlp.vocab)  # 新增:创建Matcher实例

doc1 = nlp("Hello hello hello, how are you?")
doc2 = nlp("Hello, how are you?")
doc3 = nlp("How are you?")

# 修正pattern:拆分为两个独立的匹配规则字典
# 规则1:匹配0次或多次问候词(OP="*"),规则2:匹配标点
pattern = [
    {"LOWER": {"IN": ["hello", "hi", "hallo"]}, "OP": "*"},
    {"IS_PUNCT": True}
]

matcher.add("greetings", [pattern])

# 修正缩进:print语句缩进4个空格
for mid, start, end in matcher(doc1):
    print(start, end, doc1[start:end])

补充说明

  • 如果只想匹配至少一次问候词(比如不匹配单独的标点),可以把OP="*"改成OP="+"。
  • 运行修正后的代码,会匹配doc1中的Hello hello hello,和doc2中的Hello,,doc3因为没有开头的问候词+标点,不会被匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:20:41