spaCy:词汇中的单词

标签 spacy vocabulary

我尝试使用 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 词汇不一致

这个问题似乎是一个常见问题,非常欢迎任何建议(代码)。

谢谢,

阿赫

最佳答案

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

更长的答案:

斯帕西 vocab不是特定语言中的固定单词列表。它只是一个缓存,其中包含有关在训练和处理过程中看到的 token 的词汇信息。检查 token 是否在 nlp.vocab 中只是检查一个 token 是否在这个缓存中,所以它不是一个有用的拼写更正检查。
Token.is_oov具有更具体的含义,从文档中的简短描述中并不明显:它报告模型是否包含有关此标记的一些附加词汇信息,例如 Token.prob .对于像 en_core_web_sm 这样的小型空间模型不包含任何概率,is_oov将是 True默认情况下适用于所有 token 。 mdlg模型包含关于 1M+ 标记的词汇信息,词向量包含 600K+ 标记,但这些列表太大且嘈杂,无法用于拼写校正。

关于spaCy:词汇中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59523161/

相关文章:

c# - 关于英语的问题 : Using plural in the first part of an identifier name

python - 计算 SpaCy 上文本的平均向量

nlp - 如何在spaCy中获取斯坦福风格的解析树(带有 "noun phrases"和 "verb phrases")?

vocabulary - 我可以在 spaCy 中修剪解析器的词汇表吗?

terminology - 垫片和填充 Material 有什么区别?

java - 什么是 LAC 记录?

python - 为 NER 创建 Spacy Doc Bin

python - 找不到模型 'en_core_web_md' 。它似乎不是快捷方式链接、Python 包或数据目录的有效路径

python - 在 spacy 中进行多类分类时出错