海水正藍

          面朝大海,春暖花開
          posts - 145, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          背景

            在使用搜索引擎和電商的搜索功能時,大家一定遇到過這樣的情景:我想搜索電影“十二生肖”,可不小心輸成“十二生效”了,不用擔(dān)心搜不到你想要的結(jié)果,因為建立在大數(shù)據(jù)上的搜索引擎會幫你自動糾錯,就這個例子Google和Baidu返回給我的分別是:

          顯示以下查詢字詞的結(jié)果: 十二生肖 和 您要找的是不是: 十二生肖 ,他們都做到了自動糾錯,關(guān)于自動糾錯我之前也寫過一篇陋文,當(dāng)時是自己實現(xiàn)的N-Gram模型,但是效果不是太好,主要是針對不同的語料庫算法的精確度是不一樣的,我想換個算法試試看,目前主流的計算串間的距離(相反的,你也可以理解為相似度)是Levenshtein,當(dāng)要實現(xiàn)時,發(fā)現(xiàn)lucene已經(jīng)做了這個事,那咱就站在巨人的肩膀上成長吧。

          引用包:

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

          使用示例:

            在類SpellCorrector的main方法中加入以下代碼


           1 //創(chuàng)建目錄
           2  File dict = new File("");
           3  Directory directory = FSDirectory.open(dict);
           4  
           5  //實例化拼寫檢查器 
           6  SpellChecker sp = new SpellChecker(directory);
           7   
           8  
           9  //創(chuàng)建詞典
          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  //建議個數(shù),這里我只想要最接近的那一個,你可以設(shè)置成別的數(shù)字,如3
          21  int suggestionNumber = 1;
          22   
          23  
          24  //獲取建議的關(guān)鍵字
          25  String[] suggestions = sp.suggestSimilar(search, suggestionNumber);
          26   
          27  
          28  //顯示結(jié)果
          29  System.out.println("搜索:" + search);
          30   
          31  
          32  for (String word : suggestions) {
          33      System.out.println("你要找的是不是:" + word);
          34  }

          注:這之前你需要有個語料庫,我這里是個存放正確視頻名稱的文件,格式如下:
          紅顏血淚
           冰上火一般的激情
           在敵之手
           馳風(fēng)競艇王第二部
           釣金龜
           瀟湘路一號
           戲里戲外第二季
           草原狼爵士樂
           拯救大兵瑞恩

          好了,接下來就直接運行吧,例如我搜索“十二生效”,則提示說是不是要找“十二生肖”

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

          主站蜘蛛池模板: 永善县| 曲沃县| 邵武市| 个旧市| 丰原市| 茌平县| 任丘市| 石楼县| 安陆市| 青海省| 克什克腾旗| 新乐市| 朝阳区| 文山县| 新津县| 安化县| 乐平市| 搜索| 鲁甸县| 阳新县| 长宁区| 柯坪县| 茂名市| 镶黄旗| 嵩明县| 故城县| 株洲县| 乌拉特前旗| 喜德县| 土默特右旗| 中江县| 河津市| 英山县| 盐津县| 宜兰县| 磐石市| 横峰县| 铅山县| 樟树市| 钦州市| 松滋市|