赞
踩
Friso是使用C语言开发的一款高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入到其他程序中,例如:MySQL,PHP等。同时支持对UTF-8/GBK编码的切分。
官方地址:https://code.google.com/p/friso/
Demo
#include "src/friso.h" //#include "src/friso_API.h" //加不加都不影响该demo //#include "src/friso_ctype.h"//加不加都不影响该demo int main() { /* 第一步:申明三个对象 */ 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, "friso.ini") != 1) { puts("friso 初始化失败"); } /* * 切分模式默认来自friso.ini中的设置 * 可以通过friso_set_mode函数自定义切分模式(简易,复杂,检测模式) * 简易模式:__FRISO_SIMPLE_MODE__ * 复杂模式:__FRISO_COMPLEX_MODE__ * 检测模式:__FRISO_DETECT_MODE__ * 例如,这里设置为使用复杂模式分词: */ friso_set_mode(config, __FRISO_COMPLEX_MODE__); /* 第三步:设置分词内容 */ char *s = "本人英文名Eric,自从16岁开始我学习各种编程语言目前已经初步掌握了C语言和C++另外还学习了python语言和JavaScript。\ 我喜欢的电影有《肖生克的救赎》 、《西红柿首富》。我喜欢的书籍有《三国演义》、《平凡的世界》还有《人性的弱点》。我有个小目标就是3年内赚到1000万。"; friso_set_text(task, s); /* 第四步:获取分词内容 */ while ((friso_next(friso, config, task)) != NULL) { /* task存储了分词的结果, task->hits->word: 词条内容 task->hits->offset: 词条在原始文本的offset task->hits->length: 词条的长度(字节数) task->hits->rlen: 词条的真正字节数(Friso转换后的长度-字节数) */ printf("%s [%d, %d]\n", task->hits->word, task->hits->offset, task->hits->length); } /* 第五步:释放对象 */ friso_free_task(task); friso_free_config(config); // 添加这行,后面的代码将不再执行,编译时没问题,运行时出错,原因还没找到 friso_free(friso); /* 备注: 第三步和第四步可以反复调用,使用friso_set_setx重置分词内容即可。 对于多线程环境,不同线程共享friso和config对象,需要分别初始化task使用对象 */ puts("end\n"); getchar(); }
friso_set_mode(config, FRISO_COMPLEX_MODE); 报错:结构 “” 没有字段 “FRISO_COMPLEX_MODE”
解决办法:按住ctrl点击鼠标左键,定位到该函数
#define friso_set_mode( friso, mode )\
do {\
friso->mode = mode;\
} while (0)
明显这里写错了,成员变量名和参数名相同,肯定不对。在friso.ini配置文件中,friso.mode = 2 这个成员变量名mode是固定值。
修改参数名解决问题
#define friso_set_mode( friso, mode_param)\
do {\
friso->mode = mode_param ;\
} while (0)
打开配置文件 friso.ini,friso.charset值改为 1,friso.lex_dir值改为 D:/friso/dict/GBK/
我把项目放在 D:\friso,上面的代码放在项目目录下的test.c文件,打开D:\friso\lib\win32\vs,把friso.dll也放在项目目录下。
用vs的32位编译器编译,开始菜单找到 Visual Studio 2022 文件夹,点击 x86 Native Tools Command Prompt for VS 2022
定位命令:cd /d D:\friso
编译命令:cl /I lib\win32\vs test.c lib\win32\vs\friso.lib
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。