Norvig如何拼写中英文字母和英文字母拼写检查?

时间:2016-12-06 03:02:56

标签: artificial-intelligence spell-checking spelling

我有一个产品名称列表,中混合了英文字母和数字以及存储在我数据库中的中文字符。

有一个名为products的表格,其中包含name_enname_zh字段等。

E.g。

AB 10"机翼

Peter Norvig有一个fantastic algorithm for spell check,但它只适用于英语。

我想知道是否有一种方法可以为包含中文字符的一个较窄的术语列表做类似的事情?

E.g。

等错误拼写
A10机翼
AB 10鸡翼
AB 10鸡一
AB 10木几翼

所有人都会提示AB 10"机翼作为正确的拼写

我该怎么做?

1 个答案:

答案 0 :(得分:2)

你有比Norvig更复杂的问题:

中文输入法

您案例中的错误拼写(至少在您的示例中)主要是由pinyin输入法引起的。同样打字“jiyi”(英文:飞机机翼)可能导致不同的中文短语:

 机翼
 鸡翼
 鸡一
 几翼

中文细分

同样用中文将长句分成具有语义含义的小标记,你需要做segmentation。例如:

飞机模型零件 ->  Before segmentation
飞机-模型-零件   After segmentation you got three phrases separated by '-'.

在令牌级

上工作

你可能可以从错误拼写列表开始进行实验。我想你可以从你的用户日志中收集一堆。使用您的示例一次取出一个拼写错误:

AB 10鸡翼

首先将其分解为代币:

A-B-10-鸡翼

(这里你可能需要一个中文分词算法来实现鸡翼应该一起对待)。

然后你应该尝试使用编辑距离的想法在你的产品数据库中找到它最近的邻居。请注意:

  • 您不会一次删除/编辑/替换一个字符,但一次删除/编辑/替换一个标记。
  • 编辑/替换时,我们应该将我们的候选人限制为原始令牌的近邻。例如,鸡翼 - >机翼,几翼,机一

构建Lucene索引

您也可以尝试以不同的方式解决问题,从正确的产品名称开始。将每个产品名称视为文档,并从中预构建lucene索引。然后,对于每个用户查询,查询匹配问题将转换为搜索问题,在该问题中,我们向搜索引擎发出查询,以便在我们的数据库中查找最匹配的文档。在这种情况下,我相信Lucene可能会处理分段(如果没有,您需要扩展其功能以满足您自己的需要)并为您进行标记化。