空间:词汇表中的单词

时间:2019-12-29 20:49:57

标签: spacy vocabulary

我尝试使用spaCy进行错字校正,为此,我需要知道词汇中是否存在单词。如果不是这样,则想法是将单词分成两部分,直到所有段都存在为止。例如,“ ofthe”不存在,“ ofof”和“ 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 vocab不一致

此问题似乎是一个常见问题,任何建议(代码)都将受到欢迎。

谢谢

AHe

2 个答案:

答案 0 :(得分:1)

简短的回答:spacy的模型不包含任何适用于拼写校正的单词列表。

更长的答案:

Spacy的vocab不是特定语言的固定单词列表。它只是一个缓存,其中包含有关在训练和处理过程中看到的令牌的词汇信息。检查令牌是否在nlp.vocab中只是检查令牌是否在此缓存中,因此这不是用于拼写更正的有用检查。

Token.is_oov具有更具体的含义,从文档中的简短说明来看并不明显:它报告模型是否包含有关此标记的其他词汇信息,例如Token.prob。对于像en_core_web_sm这样的不包含任何概率的小型spacy模型,默认情况下,所有令牌的is_oov将是Truemdlg模型包含有关1M +令牌的词法信息,单词向量包含600K +令牌,但是这些列表太大且嘈杂,无法用于拼写校正。

答案 1 :(得分:0)

对于拼写检查,您可以尝试spacy_hunspell。 您可以将其添加到管道中。

更多信息和示例代码在这里: https://spacy.io/universe/project/spacy_hunspell