C語言開源高性能中文分詞器:friso

jopen 11年前發布 | 65K 次閱讀 C語言 中文分詞

一。friso中文分詞器

friso是使用c語言開發的一個中文分詞器,使用流行的mmseg算法實現。完全基于模塊化設計和實現,可以很方便的植入到其他程序中,例如:MySQL,PHP等。

1。目前最高版本:friso 0.1,只支持UTF-8編碼。【源碼無需修改就能在各種平臺下編譯使用,加載完20萬的詞條,內存占用穩定為14M。】。

2。mmseg四種過濾算法,分詞準確率達到了98.41%。

3。支持自定義詞庫。在dict文件夾下,可以隨便添加/刪除/更改詞庫和詞庫詞條,并且對詞庫進行了分類。

4。詞庫使用了friso的Java版本jcseg的簡化詞庫。

5。支持中英混合詞的識別。例如:c語言,IC卡。

7。很好的英文支持,電子郵件,網址,小數,分數,百分數。

8。支持阿拉伯數字基本單字單位的識別,例如2012年,5噸,120斤。

9。自動英文圓角/半角,大寫/小寫轉換。

附件目錄結構說明

core - friso核心目錄

└——dict ----- friso詞庫配置文件和所有詞庫文件。

└——src ----- friso c源程序。

└——friso.ini ----- friso配置文件【如何配置friso.ini】。

└——Install ----- 安裝說明文件。

└——Run ----- 測試程序運行說明文件。

└——Uninstall ----- 卸載說明文件。

lib - friso二進制目錄

└——win32 ----- win32的dll和lib文件。

└——linux ----- linux下的so和a文件。

ReadMe.txt ----- friso說明文件

二。分詞速度

測試環境:2.8GHZ/2G/Ubuntu

簡單模式:3.3M/秒

復雜模式:1.6M/秒

三。分詞結果:

1.文本1:

歧義去除:研究生命起源,friso是使用c語言開發的高性能中文分詞組件,混合詞: 做B超檢查身體,本質是X射線,單位和全角: 2009年8月6日開始大學之旅,英文數字: bug report chenxin619315@gmail.com or visit http://code.google.com/p/friso, 15% of the day's time i will be there.

friso分詞結果:

歧義 去除 研究 生命 起源 friso 是 使用 c語言 開發 的 高性能 中文分詞 組件 混合 詞 做 b超 檢查 身體 本質 是 x射線 單位 和 全角 2009年 8月 6日 開始 大學 之旅 英文 數字 bug report chenxin619315@gmail.com or visit http://code.google.com/p/friso 15% of the day's time i will be there

2.文本2:

叔叔親了我媽媽也親了我

friso分詞結果:

叔叔 親了 我 媽媽 也 親了 我

四。使用方法

1.分詞測試:

請按照附件中的Install說明(linux)安裝friso:

運行如下命令來啟動friso測試程序:

//run friso test program.

friso -init friso.ini文件地址

//例如我的friso.ini在/c/friso/文件夾中:
//請在friso.ini中正確的填寫friso.lex_dir(詞庫配置文件friso.lex.ini的目錄地址,必須以“/”結尾)

friso -init /c/friso/friso.ini

2.二次開發使用:

具體請參考tst-friso.c文件:

friso_t friso;
friso_task_t task;

//1.實例化一個friso分詞實例。
//__path__為friso.ini的地址。
friso = friso_new_from_ifile(__path__);

//2.創建一個分詞任務:
task = friso_new_task();

//3.設置分詞任務的分詞文本:
friso_set_text( task, "要被分詞的文本");

//4.分詞主程序:

while ( ( friso_next( friso, friso->mode, task ) ) != NULL ) {
    //printf("%s[%d,%d]/ ", task->hits->word, task->hits->type, task->hits->offset );
    printf("%s/ ", task->hits->word );
    if ( task->hits->type == __FRISO_NEW_WORDS__ ) {
        FRISO_FREE( task->hits->word );//釋放組合詞的內存。
    }
}


//5.釋放friso和分詞任務:
friso_free_task( task );
friso_free( friso );

五。friso動態:

friso的下一個版本:

1.加入中文數字識別以及其自動轉換為阿拉伯數字的功能。

2.加入同義詞功能。

3.加入中文人名識別。

項目主頁:http://www.baiduhome.net/lib/view/home/1356772893385

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!