使用Spacy Matcher时触发SyntaxError语法错误求助
问题排查与修正
核心语法错误原因
你的pattern变量存在字典结构错误:你把三个匹配规则(问候词匹配、重复修饰、标点匹配)塞进了同一个字典里,违反了Python字典key:value的语法规则,直接导致语法报错。
其他两处错误
- 未初始化
Matcher实例:必须先创建Matcher对象才能调用其方法。 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
相关产品推荐
相关产品推荐

