zoukankan      html  css  js  c++  java
  • java实现Google和Baidu的“您是不是要找”功能

    背景

      在使用搜索引擎和电商的搜索功能时,大家一定遇到过这样的情景:我想搜索博客园,可不小心输成博客员了,不用担心搜不到你想要的结果,因为建立在大数据上的搜索引擎会帮你自动纠错,就这个例子Google和Baidu返回给我的分别是:

    显示以下查询字词的结果: 博客 和  您要找的是不是: 博客园 ,他们都做到了自动纠错,关于自动纠错我之前也写过一篇陋文,当时是自己实现的N-Gram模型,但是效果不是太好,主要是针对不同的语料库算法的精确度是不一样的,我想换个算法试试看,目前主流的计算串间的距离(相反的,你也可以理解为相似度)是Levenshtein,当要实现时,发现lucene已经做了这个事,那咱就站在巨人的肩膀上成长吧。

    引用包:

      lucene-core-3.1.0.jar + lucene-spellchecker-3.1.0.jar,你可以在这里得到

    使用示例:

      在类SpellCorrector的main方法中加入以下代码

     1 //创建目录
     2 File dict = new File("");
     3 Directory directory = FSDirectory.open(dict);
     4 
     5 //实例化拼写检查器 
     6 SpellChecker sp = new SpellChecker(directory); 
     8 
     9 //创建词典
    10 File dictionary = new File(SpellCorrecter.class.getResource("dictionary.txt").getFile());
    11 
    12 //对词典进行索引
    13 sp.indexDictionary(new PlainTextDictionary(dictionary));
    15 
    16 //有错别字的搜索
    17 String search = "非常勿扰";
    18  
    19 
    20 //建议个数,这里我只想要最接近的那一个,你可以设置成别的数字,如3
    21 int suggestionNumber = 1;
    22  
    24 //获取建议的关键字
    25 String[] suggestions = sp.suggestSimilar(search, suggestionNumber);
    27 
    28 //显示结果
    29 System.out.println("搜索:" + search);
    31 
    32 for (String word : suggestions) {
    33     System.out.println("你要找的是不是:" + word);
    34 }
    35  

    注:这之前你需要有个语料库,我这里是个存放正确视频名称的文件,格式如下:

    1 红颜血泪
    2 冰上火一般的激情
    3 在敌之手
    4 驰风竞艇王第二部
    5 钓金龟
    6 潇湘路一号
    7 戏里戏外第二季
    8 草原狼爵士乐
    9 拯救大兵瑞恩

    好了,接下来就直接运行吧,见下图:

    完整代码和字典在这里(限于工作原因,字典只保留部分电影名称,你可以用你自己的语料库)

    有问题请联系我jeexianwu#gmail.com

    参考文献

  • 相关阅读:
    Properties类
    缓冲流
    Mybatis
    分页查询
    QueryRunner和JDBC连接池
    JSP
    Session
    Cookie
    http协议和eclipes绑定tomcat
    servlet
  • 原文地址:https://www.cnblogs.com/wuren/p/2862873.html
Copyright © 2011-2022 走看看