海水正蓝

面朝大海,春暖花开
posts - 145, comments - 29, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

背景

  在使用搜索引擎和电商的搜索功能时,大家一定遇到过这样的情景:我想搜索电影“十二生肖”,可不小心输成“十二生效”了,不用担心搜不到你想要的结果,因为建立在大数据上的搜索引擎会帮你自动纠错,就这个例子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);
 7   
 8  
 9  //创建词典
10  File dictionary = new File(SpellCorrecter.class.getResource("dictionary.txt").getFile());
11  
12  //对词典进行索引
13  sp.indexDictionary(new PlainTextDictionary(dictionary));
14   
15  
16  //有错别字的搜索
17  String search = "非常勿扰";
18   
19  
20  //建议个数,这里我只想要最接近的那一个,你可以设置成别的数字,如3
21  int suggestionNumber = 1;
22   
23  
24  //获取建议的关键字
25  String[] suggestions = sp.suggestSimilar(search, suggestionNumber);
26   
27  
28  //显示结果
29  System.out.println("搜索:" + search);
30   
31  
32  for (String word : suggestions) {
33      System.out.println("你要找的是不是:" + word);
34  }

注:这之前你需要有个语料库,我这里是个存放正确视频名称的文件,格式如下:
红颜血泪
 冰上火一般的激情
 在敌之手
 驰风竞艇王第二部
 钓金龟
 潇湘路一号
 戏里戏外第二季
 草原狼爵士乐
 拯救大兵瑞恩

好了,接下来就直接运行吧,例如我搜索“十二生效”,则提示说是不是要找“十二生肖”

原文出自:
http://www.cnblogs.com/wuren/archive/2013/01/16/2862873.html


只有注册用户登录后才能发表评论。


网站导航: