当前位置: 首页 > news >正文

C语言中文分词 Friso的使用教程

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: 词条在原始文本的offsettask->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

相关资料:

  • Friso分词接口一个完整的demo
  • C语言调用friso库实现中文分词器

相关文章:

C语言中文分词 Friso的使用教程

Friso是使用C语言开发的一款高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入到其他程序中,例如:MySQL,PHP等。同时支持对UTF-8/GBK编码的切分。 官方地址:https://…...

MySQL中drop、truncate和delete的区别

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…...

Deep Image Prior

自监督的开创性工作 从简单分布到复杂分布的映射,本质上是将重建限制到某一流形,在流形上通过观测图像的数据保真项作为监督。 称之为先验也是很准确,流形就是先验。 这个扰动也很关键,本质上一个平滑正则项。直观理解是各种扰动…...

leetcode148. 排序链表

方法1:插入方法进行改进 class Solution {public ListNode sortList(ListNode head) {/*想法:设置两个指针first,last分别指向当前有序子链表的头和尾节点;并遍历链表,当遍历到的节点值大于last的值时,就将该节点插入到有序子链表…...

【深度学习环境配置】一文弄懂cuda,cudnn,NVIDIA Driver version,cudatoolkit的关系

【深度学习环境配置】一文弄懂cuda,cuDNN,NVIDIA Driver version,cudatoolkit的关系 NVIDIA Driver version(NVIDIA驱动程序)CUDAcuDNNcudatoolkit深度学习环境配置顺序 今天突然发现配置的环境有些问题,意…...

C语言中的字符与字符串:魔法般的函数探险

前言 在C语言的世界里,字符和字符串是两个不可或缺的元素,它们像是魔法般的存在,让文字与代码交织出无限可能。而在这个世界里,有一批特殊的函数,它们如同探险家,引领我们深入字符与字符串的秘境&#xff0…...

【JAVASE】带你了解面向对象三大特性之一(继承)

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 1.继承 1.1 为什么需要继承 Java 中使用类对现实世界中实体来…...

Git 如何去使用

目录 1. Git暂存区的使用 1.1. 暂存区的作用 1.2. 暂存区覆盖工作区(注意:完全确认覆盖时使用) 1.3. 暂存区移除文件 1.4. 练习 2. Git回退版本 2.1. 概念 2.2. 查看提交历史 2.3. 回退命令 2.4. 注意 3. Git删除文件 3.1. 需求 …...

C语言 | Leetcode C语言题解之第12题整数转罗马数字

题目: 题解: const char* thousands[] {"", "M", "MM", "MMM"}; const char* hundreds[] {"", "C", "CC", "CCC", "CD", "D", "DC"…...

【软件工程】测试规格

1. 引言 1.1简介 本次的测试用例是基于核心代码基本开发完毕,在第一代系统基本正常运行后编写的,主要目的是为了后续开发与维护的便利性。 该文档主要受众为该系统后续开发人员,并且在阅读此文档前最后先阅读本系统的需求文档、概要设计文…...

Nginx中间件服务:负载均衡(调度算法)

文章目录 引言I 原理1.1 后端服务器在负载均衡调度中的状态1.2 调度算法II upstreamd的应用2.1 加权负载均衡的服务器列表2.2 AB测试中使用upstream切分流量2.3 基于URL的HASH2.4 IP_HASHsee also引言 作用 转发功能:按照一定的调度算法(轮询、权重)将客户端发来的请求转发…...

dm8数据迁移工具DTS

dm8数据迁移工具DTS DTS工具介绍 DM数据迁移工具提供了主流大型数据库迁移到DM、DM到DM、文件迁移到DM以及DM迁移到文件的功能。DM数据迁移工具采用向导方式引导用户通过简单的步骤完成需要的操作。 DM数据迁移工具支持: ◆ 主流大型数据库Oracle、SQLServer、MyS…...

【QT教程】QML与C++的交互

主页 软件开发 QT6 QML高级编程补天云火鸟自动化创作平台您能够创建大约3000 个短视频一天可以轻松创建多达 100 个视频 QML与C的交互 使用AI技术辅助生成 【QT免费公开课】您可以到这里观看大量的QT视频课程 【QT付费视频课程】QT QML C 高级扩展开发 目录 1 QML与C的交互…...

idea maven 打包 内存溢出 报 GC overhead limit exceeded -> [Help 1]

idea 使用maven打包 报GC overhead limit exceeded -> [Help 1] 解决方法: 打开settings -> 点开如同所示 将 vm Options 参数 设为 -Xmx8g...

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--创建新主题

前言 你可以在wordpress里面下载使用人家打包好的主题,但可能不是很好用,接下来就自己做一个自己的主题。你需要先找到xampp文件夹–htdocs–wordpress(我给更名为wplocal)–wp-content–themes 进入该文件夹之后你可以看到你之前下载导入的所有主题文件…...

docker从入门到熟悉

一、什么是docker? Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的快速交付…...

国家开放大学《消费者权益保护法》形考任务答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 消费者田女士买回一盒饼干价格20元,准备给小孩吃…...

element-ui card 组件源码分享

今日简单分享 card 组件源码,主要从以下两个方面: 一、card 组件页面结构 二、card 组件属性 2.1 header 属性,设置 header,也可以通过 slot#header 传入 DOM,类型 string,无默认值。 组件使用部分&#…...

MPLS基本转发过程,隧道特性、对TTL的处理、BGP路由黑洞

MPLS基本转发过程,隧道特性 标签操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作。 倒数第二跳弹出特性PHP(Penultimate Hop Popp…...

ubuntu16.04安装vscode那些事

1)安装deb包。 用ftp传输到ubuntu后,进入ftp的目录下, sudo dpkg -i code_1.32.3-1552606978_amd64.deb 安装完成后,进入/usr/share/applications/,找到vscode的图标,右键, copy to ,选择deskt…...

LayerDivider终极指南:5分钟掌握智能插画分层技术

LayerDivider终极指南:5分钟掌握智能插画分层技术 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经面对一张复杂的插画作品&#xf…...

Python 爬虫反爬突破:CDN 防护节点穿透采集

前言 当下大型互联网站点、电商平台资讯门户、行业数据网站均全面接入 CDN 内容分发网络,借助全球节点缓存、流量调度、智能分流、节点 IP 隐身、区域访问限制等机制构建底层防护体系。传统爬虫直接请求源站 IP 的方式会被 CDN 节点拦截、跳转、限速、IP 封禁、节点…...

告别时序烦恼:用Xilinx MIG IP核搞定FPGA DDR3内存接口(附MT41J256M16配置要点)

告别时序烦恼:用Xilinx MIG IP核搞定FPGA DDR3内存接口(附MT41J256M16配置要点) 在FPGA开发中,DDR3内存接口设计往往是让工程师头疼的难题之一。时序控制、信号完整性、配置参数选择,每一个环节都可能成为项目推进的拦…...

CMS三十年:从“手工建站”到“智能基座”

一个从业者的观察与思考不知不觉,跟CMS打交道已经十几年了。从早期的织梦、帝国,到后来的WordPress,再到现在的各类无头CMS和低代码平台,这个领域的变化比想象中要快得多。写这篇文章,算是对CMS发展历程的一次梳理&…...

从被看不起到被追更:《凰标》的逆袭就是行业缩影@凤凰标志

——《凰标》如何一刀劈开文娱偏见无资本即为小众,无热度即为劣质,无流量即为无用。 这条铁律,曾压弯无数民间创作者的笔。一、被看不起的开局:民间创作的“三无原罪”行业默认《凰标》现实顶级 IP 加持零 IP,纯原创豪…...

模拟工程师必备:口袋参考指南的实战价值与核心应用

1. 为什么每个硬件工程师都需要一本“口袋参考书”?前几天整理书桌,翻出来一本2016年从TI官网下载打印的《模拟工程师口袋参考指南》,纸张已经有点发黄,边角也卷了。但就是这么一本薄薄的小册子,从毕业到现在&#xff…...

HarnessGate:专为AI Agent设计的纯消息网关,实现多平台无缝桥接

1. 项目概述:一个纯粹的AI Agent消息网关如果你正在构建一个需要对接多个聊天平台(比如Telegram、Discord、Slack)的AI助手或客服机器人,你很可能已经踩过这样的坑:市面上主流的机器人框架,比如Botpress、L…...

Windows安卓子系统终极指南:从基础配置到专业开发全流程

Windows安卓子系统终极指南:从基础配置到专业开发全流程 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 想要在Windows 11上无缝运行安卓应用吗&…...

打破高频、高速四种材料混压

打破高频、高速四种材料混压,铸就PCB行业硬核实力。在航空航天领域,每一次技术的突破都意味着对材料与工艺的极致追求。今天,我们要聊的这款产品,堪称多材料混压天花板,——16层、四种材料混压、三次压合、板厚5.0mm、…...

保姆级教程:用Intel官方工具搞定Realsense D435深度不准和黑点问题

深度视觉优化实战:Intel RealSense D435深度校准全流程解析 刚拆封的RealSense D435摄像头在深度模式下出现零星黑点?深度图某些区域数值明显失真?这些问题往往不是硬件缺陷,而是出厂校准参数与实际使用环境不匹配导致的。作为计算…...