java实现Google和Baidu的“您是不是要找”成果
配景 :
在利用搜索引擎和电商的搜索成果时,各人必然碰着过这样的情景:我想搜索博客园,可不小心输成博客员了,不消担忧搜不到你想要的功效,因为成立在大数据上的搜索引擎会帮你自动纠错,就这个例子Google和Baidu返回给我的别离是:
显示以下查询字词的功效: 博客园 和 您要找的是不是: 博客园 ,他们都做到了自动纠错,关于自动纠错我之前也写过一篇陋文,其时是本身实现的N-Gram模子,可是结果不是太好,主要是针对差异的语料库算法的准确度是纷歧样的,我想换个算法试试看,今朝主流的计较串间的间隔(相反的,你也可以领略为相似度)是Levenshtein,当要实现时,发明lucene已经做了这个事,那咱就站在巨人的肩膀上生长吧。
引用包:
lucene-core-3.1.0.jar + lucene-spellchecker-3.1.0.jar,你可以在这里获得
利用示例:
在类SpellCorrector的main要领中插手以下代码
//建设目次 File dict = new File(""); Directory directory = FSDirectory.open(dict); //实例化拼写查抄器 SpellChecker sp = new SpellChecker(directory); //建设辞书 File dictionary = new File(SpellCorrecter.class.getResource("dictionary.txt").getFile()); //对辞书举办索引 sp.indexDictionary(new PlainTextDictionary(dictionary)); //有错别字的搜索 String search = "很是勿扰"; //发起个数,这里我只想要最靠近的那一个,你可以配置成此外数字,如3 // 查察本栏目朱颜血泪 冰上火一般的豪情 在敌之手 驰风竞艇王第二部 钓金龟 潇湘路一号 戏里戏外第二季 草原狼爵士乐 拯救大兵瑞恩好了,接下来就直接运行吧,见下图:
完整代码和字典在这里(限于事情原因,字典只保存部门影戏名称,你可以用你本身的语料库)