spaCy:词汇表中的单词

6

我尝试使用spaCy进行错别字纠正,为此我需要知道一个单词在词汇表中是否存在。如果不存在,则需要将该单词拆成两部分,直到所有部分都存在为止。例如,“ofthe”不存在,“of”和“the”存在。所以我首先需要知道一个单词是否存在于词汇表中。问题就在这里。我尝试:

for token in nlp("apple"):
    print(token.lemma_, token.lemma, token.is_oov, "apple" in nlp.vocab)
apple 8566208034543834098 True True

for token in nlp("andshy"):
    print(token.lemma_, token.lemma, token.is_oov, "andshy" in nlp.vocab)
andshy 4682930577439079723 True True

很明显这是毫无意义的,在这两种情况下,“is_oov”均为True,而它在词汇表中。我正在寻找像这样简单的东西
"andshy" in nlp.vocab = False, "andshy".is_oov = True
"apple" in nlp.vocab = True, "apple".is_oov = False

在下一步中,还需要进行一些单词矫正的处理方法。我可以使用拼写检查库,但那与spaCy词汇表不一致。
这个问题似乎是一个经常性的问题,欢迎提供任何建议(代码)。
谢谢,
AHe

这里似乎没有问题。 - erip
问题是:“你怎么做到这一点?”总结问题比编写大量不起作用的代码更有意义(在我看来)。 - user9165100
我仍然不知道"this"是什么。你的问题是什么?关于如何提问的提示,请参考此页面 - erip
1
问题是:“如何在spaCy词汇表中找到一个单词。”很抱歉造成混淆和歧义。 - user9165100
2个回答

6
简短回答:spacy的模型中没有适合拼写纠正的单词列表。
更详细的解答:
Spacy的词汇表(vocab)不是特定语言的固定单词列表,而只是包含在训练和处理过程中出现的标记的词汇信息的缓存。检查一个标记是否在nlp.vocab中仅仅是检查这个缓存中是否存在该标记,因此它不适用于拼写纠正。
Token.is_oov具有更具体的含义,这在文档中的简短描述并不明显:它报告模型是否包含关于此令牌的一些附加词汇信息,如Token.prob。 对于像en_core_web_sm这样的小型spacy模型,它不包含任何概率,因此is_oov对所有标记默认为True。md和lg模型包含100万个以上的标记的词汇信息,而单词向量包含60万个以上的标记,但是这些列表太大且太嘈杂,无法用于拼写纠正。

谢谢。我会使用拼写检查器(https://pypi.org/project/pyspellchecker/)和一些个人修改来进行拼写检查。例如,有一个广泛的错别字列表出现在你的语料库中... - user9165100

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接