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
对于所有令牌都是 True
。 md
和 lg
模型包含有关 1M+ 标记的词汇信息,词向量包含 600K+ 标记,但这些列表太大且嘈杂,无法用于拼写校正。
【讨论】:
谢谢。我将使用拼写检查器 (pypi.org/project/pyspellchecker) 和一些个人技巧。例如,您的语料库中出现的大量错别字...【参考方案2】:对于拼写检查,您可以尝试 spacy_hunspell。 您可以将其添加到管道中。
更多信息和示例代码在这里: https://spacy.io/universe/project/spacy_hunspell
【讨论】:
以上是关于spaCy:词汇中的单词的主要内容,如果未能解决你的问题,请参考以下文章