0

我目前正在尝试将拼写检查步骤添加到 Spacy 的内置管道之一中,特别是'en_core_web_sm'

我发现了一个非常简洁的组件,称为上下文拼写检查,我已将其插入到管道中。问题在于,即使在我将管道重新排序为['tok2vec', 'parser', 'contextual spellchecker', 'tagger', 'attribute_ruler', 'lemmatizer', 'ner'].

例如:

doc_a = nlp("Income wes $9.4 milion compared to the prior year of $2.7 milion.")
doc_b = nlp("Income was $9.4 milion compared to the prior year of $2.7 milion.")

将返回正确的拼写检查结果:

print(doc_a._.outcome_spellCheck)
# Income was $9.4 million compared to the prior year of $2.7 million.

print(doc_b._.outcome_spellCheck)
# Income was $9.4 million compared to the prior year of $2.7 million.

但是,检查基本结果:

# doc_a with misspelled 'was'. Note lemma is still the original typo 'wes'
print(doc_a.to_json()['tokens'])
# {'id': 1, 'start': 7, 'end': 10, 'tag': 'MD', 'pos': 'AUX', 'morph': 'VerbType=Mod', 'lemma': 'wes', 'dep': 'ROOT', 'head': 1}

# doc_b with correctly spelled 'was'. Correctly lemmatized to 'be'
print(doc_b.to_json()['tokens'])
# {'id': 1, 'start': 7, 'end': 10, 'tag': 'VBD', 'pos': 'AUX', 'morph': 'Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin', 'lemma': 'be', 'dep': 'ROOT', 'head': 1}

如何确保在拼写检查的术语上进行词形还原?

4

1 回答 1

1

spaCy 旨在确保原始文本永远不会被修改。不幸的是,这不是您想要的,但实际上并没有办法解决它。

在这种情况下,我建议您使用仅拼写检查管道,并使用拼写检查器输出生成一个新字符串,然后将其提供给您的词形还原管道。

像这样的东西...

spellchecker = ... minimal nlp with the spellchecker...
nlp = ... normal non-spellcheck pipeline ...

doc = nlp(spellchecker(text)._.outcome_spellCheck)

您还可以做其他事情,例如加载词形还原器并创建一个组件以直接将拼写检查结果提供给它,或者使用属性标尺将拼写检查输出映射到您的标记,但单独的管道可能更容易设置,因为它部分之间的依赖性最小。

于 2021-08-01T11:48:47.993 回答