已有拼写检查模型可帮助我们根据经过训练的正确拼写语料库找到建议的正确拼写。可以将粒度从字母表增加到“单词”,这样我们就可以得到偶数短语建议,这样如果输入了错误的短语,那么它应该从正确短语的语料库中建议最接近的正确短语,当然它是从有效短语列表。
是否有任何已实现此功能的python库或如何为现有的大型黄金标准短语语料库进行此操作以获取具有统计相关性的建议?
注意:这与拼写检查器不同,因为拼写检查器中的字母是有限的,而在短语中,字母表本身就是一个单词,因此理论上是无限的,但我们可以限制短语库中的单词数量。 / p>
答案 0 :(得分:4)
你想要建立的是一个N-gram模型,它包括计算每个单词遵循n个单词序列的概率。
您可以使用NLTK text corpora来训练模型,也可以使用nltk.sent_tokenize(text)
和nltk.word_tokenize(sentence)
来标记自己的语料库。
你可以考虑2克(马尔可夫模型):
"小猫"的概率是多少?跟随"可爱"?
...或3克:
"小猫"的概率是多少?跟随"可爱的"?
等
显然,使用n + 1-gram训练模型比n-gram更昂贵。
您可以考虑使用(word, pos)
而不是考虑单词,pos
nltk.pos_tag(tokens)
是词性标记(您可以使用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()}
获取标记)
您也可以尝试考虑引理而不是单词。
这里有一些关于N-gram建模的有趣讲座:
这是一个简单而简短的代码示例(2-gram)未优化:
A
--> 'Amazon'
--> 'Apple'
B
--> 'Ba...'
--> 'Be...'
<?php
$temp = array(); // would also generate a dynamic array
$result = mysql_query("SELECT LEFT(`name_en-GB`, 1 ) AS FirstLetter, `name_en-GB` FROM `store` ORDER BY FirstLetter, `name_en-GB`");
while ($row = mysql_fetch_array($result)) {
$temp[$row['FirstLetter']][] = $row['name_en-GB'];
}