幾種常見的中文分詞包的分析與比較
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();
}
}
}
相關文章
- 常見名詞的用法與比較【***】 02天
- 幾種中文字型的比較
- 幾種常見的JSP中文亂碼JS
- 幾種排序的比較排序
- 幾種常見的軟體開發模型分析模型
- 幾種常見的NO SQL DBSQL
- 幾種分散式呼叫鏈監控元件的實踐與比較(二)比較分散式元件
- 分割陣列的幾種方法比較陣列
- 【MyBatis】幾種批量插入效率的比較MyBatis
- iOS常見的幾種加密方法iOS加密
- 幾種常見的CSS佈局CSS
- python 中文分詞包 jiebaPython中文分詞Jieba
- 幾種常見網路抓包方式介紹
- 幾個比較火的BI分析工具
- ETL 幾種工具的比較(Kettle,Talend,Informatica )ORM
- AWR收集緩慢、掛起的幾種常見情況分析
- MySQL中幾種常見的日誌MySql
- 炸!業界難題,跨庫分頁的幾種常見方案
- 集中式Web的幾種替代方案比較Web
- IocPerformance 常見IOC 功能、效能比較ORM
- 幾種常見的效能測試方法概述
- 幾種常見的Python資料結構Python資料結構
- 比較喜歡的詩詞
- 分散式中幾種服務註冊與發現元件的原理與比較分散式元件
- 幾種非易失性儲存器的比較
- Vim常見模式有幾種?模式
- react常見幾種事件宣告React事件
- 九種常見的資料分析模型模型
- 幾種常見的Vue元件間的傳參方式Vue元件
- 總結幾種常見的垂直居中的佈局
- 網路安全——常見的幾種WEB攻擊:Web
- 幾種常見的排序演算法總結排序演算法
- 前後端常見的幾種鑑權方式後端
- 幾種常見的JS遞迴演算法JS遞迴演算法
- 幾種常見的DDOS攻擊應對策略
- 【開發經驗】幾種常見的加密方式加密
- 35.幾種常見的排序演算法排序演算法
- 用Flex實現常見的幾種佈局Flex
- Java幾種常用JSON庫效能比較JavaJSON