词自动纠错

对于中文搜索引擎来说输入自动检查纠错功能是指:用户在输入关键词进行搜索之后,如果搜索引擎在返回结果中计算出与此关键词相似的另一形式(如词组中出现同音不同字、或者某一错别字现象)得到大量的搜索结果,用户将会在搜索结果页面看到系统提供的推测到的关键词项。使用自动纠错后,即使用户不小心输入错误,在很大程度上也能够方便地得到正确查询词的提示,在很大程度上方便了用户的使用。并保证了每次的查准率。

一、利用词库的方式

思想:
 研究中引入了关键词加权计算方法

将初步统计语言模型得出的纠错检查结果再次计算比较

最终得出优化的纠错结果。

步骤:

建立查询词词库,对查询日志的查询词进行统计,将平均每天查询次数超过阈值的查询词存储于所述查询词词库中;

对用户输入的新查询词,首先与所述查询词词库中查询词进行匹配,若完全匹配,则不作处理;若未完全匹配,则查找和该词最近似查询词,若查找成功,则将该查询词词库中的近似查询词返回给用户以校验;若查找失败,则不作处理。

二、通过拼音的方式

1)通过相似拼音纠错

搜索引擎把这些字还原成拼音,用一个拼音相同的已知的搜索词代替。

这是一种众所周知的纠错策略,但是,当输错的字是多音字,特别是有多个这样的错误输入时,所有的搜索引擎都尽量绕开这个问题,或者仅使用最常用的那些音去纠错。 因为要考虑所有可能的拼音组合,在极端情况下会导致指数爆炸! 例如美团的实现(枚举多音字全排列)

(2)基于自动机的算法可以完美解决这个指数爆炸问题
  • 这是自动机应用的又一个绝佳范例,作为演示,这个页面只收录了 800万 条 搜索词+词频,数据也不太干净
  • 该算法全部在内存中运行,使用了 293M 内存,这个数据量,如果用传统方法暴力实现,并且达到这个性能,需要 几十G 的内存
  • 暴力方法是 Query 越长越可怕,该算法则是 Query 越长,优势越大
  • 纠错耗时仅供参考(单核虚拟云主机: Xeon E5-2430 2.20GHz + RAM:1.5G)
(3)这个算法也可以用来解决用户输入预测(智能提示)功能

用户只输入Query开头部分,就自动提示出整个Query,例如用户输入举头望,就提示出举头望明月。就像现在各种搜索引擎做的那样。

(4)基于编辑距离的纠错

在已知的搜索词中寻找编辑距离与用户 Query 最小的词,使用我的算法也可以高效解决(还没做演示页面)


三、二元语言模型与字典分词相结合的方法

由于每个项目的输入汉字串基本上是有范围的,否则即使搜也搜不到内容,所以这种情况下语料库的范围相对稳定些,所以这里采用2-Gram即二元语言模型与字典分词相结合的方法;

思路:

对语料库进行分词处理 —> 计算二元词条出现概率(在语料库的样本下,用词条出现的频率代替) —> 对待分析的汉字串分词并找出最大连续字符串和第二大连续字符串 —>利用最大和第二大连续字符串与语料库的影片名称匹配 —> 部分匹配则现实拼写有误并返回更正的字符串(所以字典很重要)

不多说,看代码吧,代码请先clone代码,代码地址:

https://code.csdn.net/helihongzhizhuo/wordfind

clone下来后 运行下测试类 TestWordproofread 中下面的测试方法即可

@Test

    public void testwordproofread() {
        String input = "自动QUKUANJI";
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String startInitTime = sdf.format(new Date());
        System.out.println(startInitTime+" ---start initializing work---");
//        ChineseWordProofread cwp = new ChineseWordProofread(argu1,argu2);

        String endInitTime = sdf.format(new Date());
        System.out.println(endInitTime+" ---end initializing work---");


        chineseWordProofreadAnsj.proofreadAndSuggest(input);

    }



  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值