当前位置: 首页 > 工具软件 > friso > 使用案例 >

C语言调用friso库实现中文分词器

夏嘉德
2023-12-01

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 指定使用的动态链接库

 类似资料: