代码之家  ›  专栏  ›  技术社区  ›  Kim Stacks

如何对混合了英文字母的汉字进行Norvig拼写检查?

  •  1
  • Kim Stacks  · 技术社区  · 8 年前

    我的数据库中存储了一个由英文字母、数字和汉字混合书写的产品名称列表。

    有一张桌子叫 products 与田野 name_en , name_zh 除其他外。

    例如。

    AB 10"机翼
    

    fantastic algorithm for spell check 但它只适用于英语。

    我想知道是否有一种方法可以为一个包含汉字的狭义术语列表做类似的事情?

    E、 g.错误销售,如:

    A10机翼
    AB 10鸡翼
    AB 10鸡一
    AB 10木几翼
    

    一切都会迅速 AB 10"机翼 作为正确的拼写

    我该怎么做?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Community CDub    4 年前

    你有一个比诺维格更复杂的问题:

    中文输入法

    本例中的拼写错误(至少在本例中)主要是由 pinyin 输入法。同一个“jiyi”(英语:飞机机翼)的类型可能会导致不同的中文短语:

     机翼
     鸡翼
     鸡一
     几翼
    

    汉语分词

    在汉语中,要将一个长句分解成具有语义意义的小标记,您需要 segmentation 例如:

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

    你可能可以从一系列拼写错误开始实验。我想你可以从你的用户日志中收集一些。使用您的示例,一次找出一个拼写错误:

    AB 10鸡翼
    

    A-B-10-鸡翼
    

    (在这里,您可能需要一个中文分割算法来实现é应该一起处理)。

    然后,您应该尝试使用编辑距离思想在产品数据库中查找其最近的邻居。注意:

    • 您不是一次删除/编辑/替换一个字符,而是一次删除或编辑/替换其中一个标记。
    • 在编辑/替换时,我们应该将候选对象限制为原始令牌的近邻。例如,é->,,

    构建Lucene索引

    lucene 索引。然后,对于每个用户查询,查询匹配问题被转换为搜索问题,其中我们向搜索引擎发出查询,以在数据库中找到最佳匹配文档。在这种情况下,我相信Lucene可能会负责分段(如果不是,您需要扩展其功能以满足您自己的需要)和标记化。