我正在尝试运行 spaCy 的 模糊匹配方法。我对 spaCy 包以及模型 en_core_web_sm 使用 3.5.0 版本。
我运行了以下命令:
import spacy
from spacy.matcher import Matcher
nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)
pattern = [{"LOWER": "hello"}, {"FUZZY": "world"}]
matcher.add("my_name", [pattern])
运行上述命令时,出现以下错误:
MatchPatternError:匹配器规则“my_name”的令牌模式无效
模式0: [模式 -> 1 -> 模糊] 不允许使用额外字段
我不熟悉这个错误的意思。鉴于上述示例取自 spaCy 的文档,我预计不会发生错误。如果我删除
{"FUZZY": "world"}
,代码运行不会出现错误。
请解释一下为什么返回错误?
您不能在规则中单独使用 FUZZY,它需要位于另一个项目下,告诉它要检查哪个字段。如果您再次检查文档,您将看到这一行:
就像 REGEX 一样,它始终需要应用于 TEXT 或 LOWER 等属性。
您还可以看到所有示例都类似于
{"LOWER": {"FUZZY": ...
或 {"TEXT": {"FUZZY": ...
。默认情况下标记文本会被匹配似乎很自然,但实际上您必须指定这一点,因为它可以与引理等其他内容匹配。
在这种情况下,您可以通过将模式更改为以下方式来修复代码:
pattern = [{"LOWER": "hello"}, {"LOWER": {"FUZZY": "world"}}]
import spacy
nlp = spacy.load('en_core_web_sm')
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
patterns = [
[{'Lower':'solarpower'}],
[{'LOWER':'solar'},{'IS_PUNCT':True},{'Lower':'power'}],
[{'Lower':'solar'},{'LOWER':'power'}]
]
matcher.add('SolarPower',patterns)
出现错误:
MatchPatternError:匹配器规则“SolarPower”的令牌模式无效 模式 0: