C语言开源高性能中文分词器:friso

jopen 9年前

一。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.open-open.com/lib/view/home/1356772893385