如何在spaCy的IN模式中用正则匹配含指定词根的德语复合词?
用spaCy匹配包含指定词根的德语词汇(含复合词)
你原来的IN规则只能匹配完全一致的小写词汇,要覆盖德语里的复合词,直接用REGEX替代IN即可,通过正则表达式匹配包含指定词根的任意词汇,不用再枚举所有复合词。
核心修改思路
把原来的IN条件换成REGEX,用.*匹配任意前缀/后缀,结合逻辑或|同时匹配三个词根:
# 匹配包含studium、abschluss、ausbildung任一词根的词汇 pattern = [{"LOWER": {"REGEX": r".*(studium|abschluss|ausbildung).*"}}]
.*:匹配任意长度的任意字符(包括空),确保词根前后的复合部分都能被覆盖(studium|abschluss|ausbildung):逻辑或,匹配三个词根中的任意一个LOWER:统一转小写匹配,避免大小写干扰
完整示例代码
import spacy from spacy.matcher import Matcher # 加载德语模型 nlp = spacy.load("de_core_news_sm") matcher = Matcher(nlp.vocab) # 定义匹配规则:包含指定词根的词汇(支持复合词) pattern = [{"LOWER": {"REGEX": r".*(studium|abschluss|ausbildung).*"}}] matcher.add("EDUCATION_TERMS", [pattern]) # 测试文本 doc = nlp("Ich habe ein Hochschulstudium abgeschlossen und eine berufliche Ausbildung absolviert. Mein Studiengang war Informatik.") # 执行匹配并输出结果 matches = matcher(doc) for match_id, start, end in matches: span = doc[start:end] print(f"匹配结果: {span.text}")
可选优化:仅匹配名词
如果只想匹配名词类的复合词(排除动词形式如abgeschlossen),可以在规则中增加词性过滤:
pattern = [{"POS": "NOUN", "LOWER": {"REGEX": r".*(studium|abschluss|ausbildung).*"}}]
内容的提问来源于stack exchange,提问作者SalvaHH
相关产品推荐
相关产品推荐

