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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:10:32