幾種常見的中文分詞包的分析與比較

Thinkgamer_gyt發表於2016-04-17

1:中文分詞簡介

2:Lucence的中文分詞

3:庖丁分詞簡介

4:IK中文分詞簡介


一:中文分詞簡介

    1:分詞演算法分類

        -----基於字串匹配的中文分詞方法

               eg:句子:我來自瀋陽航空航天大學

                       詞典:瀋陽  航空  航天  大學  瀋陽航空航天大學

                       匹配欄位:

                       匹配結果:

                選取詞典中最長欄位作為分詞起始的最長步伐,可知最長為8

                首先在句子中以“我”為起點,數八個字“我來自瀋陽航空航”在詞典中沒有匹配到,然後步長減一,為7

                然後數七個字“我來自瀋陽航空”同樣在字典中沒有匹配到,步長減一,為6

                ........

                步長為1時依然沒有匹配到,但是是單音節詞了,所以存放在匹配結果中

                以此執行,下一次從“是”開始......

                所以最終的匹配結果是:我  來   自  瀋陽航空航天大學  瀋陽  航空  航天  大學

       ------基於理解的分詞方法 

               類似於人工智慧分詞了,能夠自動識別詞語的意思,進行分詞

        ------基於統計的分詞方法

                這裡有一篇關於基於統計分詞的文章講的相當詳細,大家可以參考以下:http://www.cnblogs.com/xingyun/archive/2013/01/10/2854397.html

    2:兩大難題

        ----歧義識別

        ----新詞識別

    3:應用

        ----搜尋引擎

        ----自然語言處理


二:Lucence的中文分詞

        1:基於字串匹配的分詞

               ----paoding

               ----mmseg4j:MMseg演算法

               ----IK:正向迭代最細粒度劃分演算法

         2:基於統計的分詞

               ----imdict:採用隱馬爾可夫模型


三:庖丁分詞簡介

        極具有高效性和可擴充套件性,採用完全的物件導向設計,構思先進

        主頁:http://code.google.com/p/paoding

        優點:

               自定義詞庫,通過修改paoding-analysis.jar中的paoding-dic-home.properties檔案中的“paoding.dic.home=dic”定義自己 的詞庫

               能夠對未知的詞彙進行合理的分析,分詞效率高

        部署:

                下載地址:http://pan.baidu.com/s/1eQ88SZS

               

             1. 配置dic檔案:

             修改paoding-analysis.jar中的paoding-dic-home.properties檔案,將“#paoding.dic.home=dic”的註釋去掉,並配置成自己dic檔案的本地存放路徑。eg:/home/hadoop/work/paoding-analysis-2.0.4-beta/dic

             2. 把Jar包匯入到專案中:

                 將paoding-analysis.jar、commons-logging.jar、lucene-analyzers-2.2.0.jar和lucene-core-2.2.0.jar四個包匯入到專案中,這時就可以在程式碼片段中使用庖丁解牛工具提供的中文分詞技術

             3:程式碼例項

package tokens;

import java.io.IOException;
import java.io.StringReader;

import net.paoding.analysis.analyzer.PaodingAnalyzer;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenStream;

public class tokens {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String text = "本思想就是在分詞的同時進行句法、語義分析, 利用句法資訊和語義資訊來進行詞性標註, 以解決分詞歧義現象。因為現有的語法知識、句法規則十分籠統、複雜, 基於語法和規則的分詞法所能達到的精確度遠遠還不能令人滿意, 目前這種分詞系統還處在試驗階段。";
		//定義一個解析器
		Analyzer analyzer = new PaodingAnalyzer();
		
		//得到token序列的輸出流
		TokenStream tokens = analyzer.tokenStream(text, new StringReader(text));
		try{
			Token t;
			while((t=tokens.next() ) !=null){
				System.out.println(t);
                                //System.out.println(t.termText())  輸出單個詞
			}
		}catch(IOException e){
			e.printStackTrace();
		}
	}

}


           4:分詞結果
                

四:IK中文分詞簡介
       請參考之前的一篇部落格:http://blog.csdn.net/gamer_gyt/article/details/47168877

相關文章