特定于上下文的拼写引擎

And*_*NER 2 spell-checking google-wave

我相信你们中的一些人会看到Google Wave的演示.我特别想知道拼写检查技术.一个拼写检查器是多么具有革命性,它通过弄清楚一个单词在句子中出现在哪里来提出这些建议?

我之前没有见过这种技术,但其他地方有这样的例子吗?
如果有,那么代码示例和文献在其工作中是什么?

Sni*_*loW 12

我的2美分.鉴于translate.google.com是一个统计机器翻译引擎和来自A Halevy,P Norvig(Google研究总监)和F Pereira的"数据的不合理有效性"这一事实:我做出假设(打赌)这是一个统计信息的拼写检查.

它是如何工作的:你收集一个非常大的语言语料库你要拼写检查.您将此语料库存储为适应数据结构中的短语表(后缀数组,例如,如果必须计算n-gram子集),以跟踪n-gram数的计数(估计的概率).

例如,如果您的语料库仅由以下组成:

I had bean soup last diner.
Run Code Online (Sandbox Code Playgroud)

从此条目中,您将生成以下bi-gram(2个单词的集合):

I had, had bean, bean soup, soup last, last diner
Run Code Online (Sandbox Code Playgroud)

和三克(三个字组成):

I had bean, had bean soup, bean soup last, soup last diner 
Run Code Online (Sandbox Code Playgroud)

但它们将通过统计相关性测试进行修剪,例如:我们可以假设三元组

I had bean 
Run Code Online (Sandbox Code Playgroud)

将消失的短语表.

现在,拼写检查只是看起来是这个大词组表并检查"概率".(你需要一个良好的基础设施来将这个短语表存储在一个有效的数据结构和RAM中,谷歌将它用于translate.google.com,为什么不这样做?它比统计机器翻译更容易.)

例如:你输入

I had been soup
Run Code Online (Sandbox Code Playgroud)

在短语表中有一个

had bean soup
Run Code Online (Sandbox Code Playgroud)

tri-gram的概率比你刚输入的概率高很多!实际上,你只需要改变一个单词(这是一个"不那么遥远的"三元组)来获得具有更高概率的三元组.应该有一个处理权衡距离/概率的评估函数.这个距离甚至可以用字符来计算:我们正在进行拼写检查,而不是机器翻译.

这只是我的假设性意见.;)