spaCy 模糊匹配错误:“不允许额外字段”

问题描述 投票:0回答:2

我正在尝试运行 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"}
,代码运行不会出现错误。

请解释一下为什么返回错误?

python spacy fuzzy-search matcher
2个回答
2
投票

您不能在规则中单独使用 FUZZY,它需要位于另一个项目下,告诉它要检查哪个字段。如果您再次检查文档,您将看到这一行:

就像 REGEX 一样,它始终需要应用于 TEXT 或 LOWER 等属性。

您还可以看到所有示例都类似于

{"LOWER": {"FUZZY": ...
{"TEXT": {"FUZZY": ...
。默认情况下标记文本会被匹配似乎很自然,但实际上您必须指定这一点,因为它可以与引理等其他内容匹配。

在这种情况下,您可以通过将模式更改为以下方式来修复代码:

pattern = [{"LOWER": "hello"}, {"LOWER": {"FUZZY": "world"}}]

0
投票
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:

  • [pattern -> 0 -> Lower] 不允许有额外字段 图案1:
  • [pattern -> 2 -> Lower] 不允许有额外字段 图案2:
  • [模式 -> 0 -> Lower] 不允许有额外字段
© www.soinside.com 2019 - 2024. All rights reserved.