已有拼写检查模型可帮助我们根据经过训练的正确拼写语料库找到建议的正确拼写.可以将粒度从字母表增加到“单词”,这样我们就可以得到偶数短语建议,这样如果输入了错误的短语,那么它应该从正确短语的语料库中建议最接近的正确短语,当然它是从有效短语列表.
是否有任何python库已经实现此功能或如何为现有的大型黄金标准短语语料库进行此操作以获得统计相关的建议?
注意:这与拼写检查器不同,因为拼写检查器中的字母是有限的,而在短语中,字母表本身就是一个单词,因此理论上是无限的,但我们可以限制短语库中的单词数量.
解决方法:
你想要构建的是一个N-gram模型,它包括计算每个单词遵循n个单词序列的概率.
您可以使用NLTK text corpora来训练模型,也可以使用nltk.sent_tokenize(text)和nltk.word_tokenize(句子)来标记自己的语料库.
你可以考虑2克(马尔可夫模型):
What is the probability for “kitten” to follow “cute”?
…或3克:
What is the probability for “kitten” to follow “the cute”?
等等
显然,训练n-1克的模型比n-gram更昂贵.
而不是考虑单词,你可以考虑其中pos是词性标签的夫妻(单词,pos)(你可以使用nltk.pos_tag(tokens)获得标签)
您也可以尝试考虑引理而不是单词.
这里有一些关于N-gram建模的有趣讲座:
这是一个简单而简短的代码示例(2-gram)未优化:
from collections import defaultdict
import nltk
import math
ngram = defaultdict(lambda: defaultdict(int))
corpus = "The cat is cute. He jumps and he is happy."
for sentence in nltk.sent_tokenize(corpus):
tokens = map(str.lower, nltk.word_tokenize(sentence))
for token, next_token in zip(tokens, tokens[1:]):
ngram[token][next_token] += 1
for token in ngram:
total = math.log10(sum(ngram[token].values()))
ngram[token] = {nxt: math.log10(v) - total for nxt, v in ngram[token].items()}
标签:python,nlp,text,nltk,phrases
来源: https://codeday.me/bug/20191006/1858719.html