IKAnalyzer分詞


今天遇到一個新需求 需要在easyui的組件combox中輸入一段文字,然后根據文字自動匹配選項

先獲取combox的輸入文字

function getGoodSeries(){
   var value = "";
   //console.log($(".combo-text"));
   $.each($(".combo-text"),function(i,o){
   //console.log($(o).parent().prev().attr('comboname'));
   if($(o).parent().prev().attr('comboname') == 'tgdw'){
   //console.log($(o).val());
   value = $(o).val();
   }
   });
   return value;
   }

然后根據文字去后台通過分詞進行模糊匹配,返回匹配的選項id,然后賦值

 $('#tgdw').combobox('textbox').bind('blur', function(e) {
         var url = "${basePath}/cms/splitWord";
      $.post(url, {
       words : getGoodSeries()
      }, function(data) {
       if (data.msg == "OK") {
         $("#tgdw").combobox('setValues',data.tgdws.split(","));
       } else {
        alert(data.msg);
       }
      }, 'json');
        })

以下是分詞相關的,采用的網上的帖子

最近有個需求,需要對爬到的網頁內容進行分詞,以前沒做過這個,隨便找了找中文分詞工具,貌似IKAnalyzer評價不錯,因此就下來試試,在這里記錄一下使用方法,備查。
關於IKAnalyzer的介紹,網上很多,搜一下就知道了。下載地址見文章最后面。
 
下載解壓之后主要使用和依賴以下文件:
IKAnalyzer2012_u6.jar   — IKAnalyzer核心jar包
IKAnalyzer.cfg.xml    — 配置文件,可以在這里配置停詞表和擴展詞庫
stopword.dic    — 停詞表
lucene-core-3.6.0.jar  — lucene jar包,注意:只能使用這個3.6版本,高版本有問題
IKAnalyzer中文分詞器V2012_U5使用手冊.pdf  — 使用手冊
 
新建Java項目,將IKAnalyzer2012_u6.jar和lucene-core-3.6.0.jar添加到Build Path,將stopword.dic和IKAnalyzer.cfg.xml添加到項目根目錄。
看一下IKAnalyzer.cfg.xml的內容:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE properties SYSTEM “http://java.sun.com/dtd/properties.dtd”>
<properties>
<comment>IK Analyzer 擴展配置</comment>
<!–用戶可以在這里配置自己的擴展字典 –>
<entry key=”ext_dict”></entry>
<!–用戶可以在這里配置自己的擴展停止詞字典–>
<entry key=”ext_stopwords”>stopword.dic;</entry>
</properties>
 
使用示例代碼:
  1. package com.lxw1234.wordsplit;
  2.  
  3. import java.io.StringReader;
  4.  
  5. import org.apache.lucene.analysis.Analyzer;
  6. import org.apache.lucene.analysis.TokenStream;
  7. import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
  8. import org.wltea.analyzer.lucene.IKAnalyzer;
  9.  
  10. /**
  11. *
  12. * @author lxw的大數據田地 -- lxw1234.com
  13. *
  14. */
  15. public class Test {
  16.  
  17. public static void main(String[] args) throws Exception {
  18. String text = "lxw的大數據田地 -- lxw1234.com 專注Hadoop、Spark、Hive等大數據技術博客。 北京優衣庫";
  19. Analyzer analyzer = new IKAnalyzer(false);
  20. StringReader reader = new StringReader(text);
  21. TokenStream ts = analyzer.tokenStream("", reader); 
  22.         CharTermAttribute term=ts.getAttribute(CharTermAttribute.class);
  23.         while(ts.incrementToken()){ 
  24.             System.out.print(term.toString()+"|"); 
  25.         }
  26.         analyzer.close();
  27.         reader.close(); 
  28. }
  29.  
  30. }
  31.  
執行結果為:
lxw|的|大數|數據|田地|lxw1234.com|lxw|1234|com|專注|hadoop|spark|hive|等|大數|數據|技術|博客|北京|優|衣|庫|
分詞分的很細。
看這個構造函數:Analyzer analyzer = new IKAnalyzer(false);
IKAnalyzer支持兩種分詞模式:最細粒度和智能分詞模式,如果構造函數參數為false,那么使用最細粒度分詞。
 
改成智能分詞模式之后的結果:
Analyzer analyzer = new IKAnalyzer(true);
lxw|的|大|數據|田地|lxw1234.com|專注|hadoop|spark|hive|等|大|數據|技術|博客|北京|優|衣|庫|
 
結果還是不太理想,“大數據”和“優衣庫”都被分開了,原因是IKAnalyzer自帶的詞庫里面沒有這兩個詞。
需要配置擴展詞庫。
在項目根目錄新建文件MyDic.dic,里面內容為:
大數據
優衣庫
每行一個詞,特別注意:MyDic.dic的文件編碼必須為UTF-8。
 
編輯IKAnalyzer.cfg.xml配置文件,添加擴展詞庫:
<!–用戶可以在這里配置自己的擴展字典 –>
<entry key=”ext_dict”>MyDic.dic;</entry>
 
再運行:
lxw|的|大數據|田地|lxw1234.com|專注|hadoop|spark|hive|等|大數據|技術|博客|北京|優衣庫|
這下基本是我們想要的結果了。
 
下載地址:https://code.google.com/p/ik-analyzer/downloads/list
這個地址估計大家不方便,上傳了一份到網盤:
密:34w6

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM