当前位置: 首页 > 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…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...