1. 程式人生 > >Spark 中文文件分類(一) IKAnalyzer對文件進行分類

Spark 中文文件分類(一) IKAnalyzer對文件進行分類

原網址:http://lxw1234.com/archives/2015/07/422.htm

程式語言 1年前 (2015-07-22) 5885℃ 0評論

關鍵字:中文分詞、IKAnalyzer

最近有個需求,需要對爬到的網頁內容進行分詞,以前沒做過這個,隨便找了找中文分詞工具,貌似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. import java.io.StringReader;
  3. import org.apache.lucene.analysis.Analyzer;
  4. import org.apache.lucene.analysis.TokenStream;
  5. import org.apache.lucene.analysis
    .tokenattributes.CharTermAttribute;
  6. import org.wltea.analyzer.lucene.IKAnalyzer;
  7. /**
  8. *
  9. * @author lxw的大資料田地 -- lxw1234.com
  10. *
  11. */
  12. publicclassTest{
  13. publicstaticvoid main(String[] args)throwsException{
  14. String text ="lxw的大資料田地 -- lxw1234.com 專注Hadoop、Spark、Hive等大資料技術部落格。 北京優衣庫";
  15. Analyzer analyzer =newIKAnalyzer(false);
  16. StringReader reader =newStringReader(text);
  17. TokenStream ts = analyzer.tokenStream("", reader);
  18. CharTermAttribute term=ts.getAttribute(CharTermAttribute.class);
  19. while(ts.incrementToken()){
  20. System.out.print(term.toString()+"|");
  21. }
  22. analyzer.close();
  23. reader.close();
  24. }
  25. }

執行結果為:

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