spaCy:词汇中的单词

Posted

技术标签:

【中文标题】spaCy:词汇中的单词【英文标题】:spaCy: Word in vocabulary 【发布时间】:2020-04-18 17:55:29 【问题描述】:

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

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

谢谢,

阿赫

【问题讨论】:

这里好像没有问题。 问题是:“你是怎么做到的”?概括这个问题比编写大量不起作用的代码更有意义(恕我直言)。 我仍然不知道“这个”是什么。你的问题是什么?提问方式请参考this page。 问题是:“我如何在 spaCy 中找到一个词”词汇。很抱歉造成了混乱和矛盾 【参考方案1】:

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

更长的答案:

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

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

【讨论】:

谢谢。我将使用拼写检查器 (pypi.org/project/pyspellchecker) 和一些个人技巧。例如,您的语料库中出现的大量错别字...【参考方案2】:

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

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

【讨论】:

以上是关于spaCy:词汇中的单词的主要内容,如果未能解决你的问题,请参考以下文章

从词汇中的所需单词创建新的词嵌入

朴素贝叶斯是不是应该将词汇表中的所有单词复数

根据文本语料库中的出现列出词汇表中的单词,使用 Scikit-Learn CountVectorizer

LeetCode 1160. 拼写单词

拼写单词

拼写单词[哈希表]----leetcode5048