friso中文分词器库的安装及详细说明见github:
https://github.com/lionsoul2014/friso/tree/bb35f949efaeb26f33723719dad9adfd4e283995
#include <friso/friso.h>
#include <stdio.h>
#include <string.h>
//安装目录中的配置文件位置
char* setting_file_addr = "/root/friso/friso.ini";
void analyzer(char **analyzer_res, char * text, int *count)
{
/* 第一步:申明三个对象 */
friso_t friso; /* Friso 分词对象 */
friso_config_t config; /* Friso 配置对象 */
friso_task_t task; /* Friso 任务对象 */
/* 第二步:初始化相应的对象 */
friso = friso_new();
config = friso_new_config();
task = friso_new_task();
/* 从friso.ini配置文件中初始化 friso */
if (friso_init_from_ifile(friso, config, setting_file_addr) != 1) {
/* friso 初始化失败 */
}
friso_set_mode(config, __FRISO_COMPLEX_MODE__);
/* 第三步:设置分词内容 */
friso_set_text(task, text);
/* 第四步:获取分词内容 */
while (config->next_token(friso, config, task) != NULL) {
/*
* * task存储了分词的结果,
* * task->token->word: 词条内容
* * task->token->offset: 词条在原始文本的offset
* * task->token->length: 词条的长度(字节数)
* * task->token->rlen: 词条的真正字节数(Friso转换后的长度-字节数)
* * */
analyzer_res[*count] = (char*)malloc(sizeof(char));
strcpy(analyzer_res[*count], task->token->word);
(*count)++;
}
/* 第五步:释放对象 */
friso_free_task(task);
friso_free_config(config);
friso_free(friso);
}
int main()
{
char *text = "Friso 是使用 c 语言开发的一款开源的高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序中, 例如:MySQL,PHP,并且提供了php5, php7, ocaml, lua的插件实现。源码无需修改就能在各种平台下编译使用,加载完 20 万的词条,内存占用稳定为 14.5M.";
char *analyzer_res[300];
int count = 0;
analyzer(analyzer_res, text, &count);
int i;
for(i = 0; i < count; i++)
{
printf("%s\n", analyzer_res[i]);
}
return 0;
}
gcc编译的时候加上 -lfriso 指定使用的动态链接库