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

Redis Search系列 - 第七讲 Windows(CygWin)编译Friso

目录

    • 一、背景
    • 二、安装CygWin
    • 三、编译Friso
    • 四、运行Friso
    • 五、Friso分词效果测试

一、背景

最近在做RedisSearch的中文分词效果调研,底层的中文分词插件使用的就是Friso,目前手里的Linux环境上yum镜像仓库有问题导致没法安装gcc,又急于验证Friso分词效果,便根据仓库说明使用CygWin进行编译。

关于Friso
Friso 是使用 c 语言开发的一款开源的高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序中, 例如:MySQL,PHP,并且提供了php5, php7, ocaml, lua的插件实现。源码无需修改就能在各种平台下编译使用,加载完 20万的词条(UTF-8字典仅为2.53MB),内存占用稳定为 14.5M.

二、安装CygWin

关于CygWin
Cygwin 是一个在 Windows 上运行的类 Unix 环境。它提供了一个大型的 GNU 和 Open Source 工具集合,这些工具可以在 Windows 上运行,并且提供了类似于 Linux 的功能。Cygwin 还包括一个动态链接库(cygwin1.dll),它为程序提供了一个类似于 POSIX 的 API,使得在 Windows 上可以运行许多 Unix 程序。主要功能包括:

  1. 提供 Unix 风格的 shell 和命令行工具:如 bashgrepawksed 等。
  2. 支持编译和运行 Unix 程序:通过提供 GCC 编译器和其他开发工具,可以在 Windows 上编译和运行 Unix 程序。
  3. 与 Windows 系统的集成:可以访问 Windows 文件系统、注册表等资源。

Cygwin 适用于需要在 Windows 环境中使用 Unix 工具和脚本的开发者和系统管理员。

注: 阿里CygWin镜像仓库说明参见:
https://developer.aliyun.com/mirror/cygwin

下载地址:https://cygwin.com/setup-x86_64.exe?spm=a2c6h.13651104.d-4008.4.135c4a58iCGiVh&file=setup-x86_64.exe

下载成功后,运行安装文件,一直下一步,选择安装目录、软件包存储目录、选择阿里的镜像地址:
在这里插入图片描述

选择需要安装的软件:gcc-core、make

可先选择 视图完整,然后搜索需要的软件包如gcc,然后点击右侧箭头选择需要安装的版本:
在这里插入图片描述

之后一直下一步直到安装完成即可。

安装完成后再次点击安装文件(亦可通过该方法继续安装新的软件),一直下一步可查看所有已安装的软件如下图:
在这里插入图片描述

之后桌面出现如下图标,点击即可进入CygWin命令行环境:
在这里插入图片描述

三、编译Friso

1)从Friso的Github仓库的Tag列表中,下载最新版本:
https://github.com/lionsoul2014/friso/releases/tag/v1.6.4-release

2)解压后如下图:
在这里插入图片描述

3)进入src目录,删除原有的 Makefile, 更改 Makefile.cygwin 为 Makefile,注意删除Makefile中的--mno-cygwin选项,否则后续执行make编译报错。

4)打开 cygwin 的终端,cd 到 src 目录,运行make命令:

luohq@myorg /cygdrive/e/RedisStack/Search/friso-1.6.4-release-win/src
$ make
gcc -O2 -Wall -shared friso.c friso_array.c friso_hash.c friso_lexicon.c friso_link.c friso_string.c friso_ctype.c friso_UTF8.c friso_GBK.c  -o friso.dll -Wl,--output-def,friso.def,--out-implib,friso.lib
gcc -O2 -Wall -c tst-friso.c
gcc tst-friso.o -o ./friso -L. -lfriso

四、运行Friso

退出到src的上一层目录,即Friso的根目录,执行命令:

./src/friso -init ./friso.ini

friso.ini即对应friso的配置文件,可根据需要进行调整。

Friso的具体使用示例如下:

luohq@myorg /cygdrive/e/RedisStack/Search/friso-1.6.4-release-win
$ ./src/friso -init ./friso.ini
Initialized in 0.109000sec
Mode: Complex
+-Version: 1.6.4 (UTF-8)
+---------------------------------------------------------------+
| Friso - a Chinese word segmentation writen by c.              |
| bug report email - chenxin619315@gmail.com.                   |
| or: visit https://github.com/lionsoul2014/friso.              |
|     java version for https://github.com/lionsoul2014/jcseg    |
| type 'quit' to exit the program.                              |
+---------------------------------------------------------------+
friso>> 你好中国
分词结果:
你好 中国
Done, cost < 0.000000sec
friso>>

五、Friso分词效果测试

# default mode for friso.
# 1 : simple mode - simply maxmum matching algorithm.
# 2 : complex mode - four rules of mmseg alogrithm.
# 3 : detect mode - only return the words that the do exists in the lexicon
friso.mode = 2

切换不同friso.mode进行分词,具体结果见下表:

文档内容friso.mode = 1
分词结果
friso.mode = 2
分词结果
friso.mode = 3
分词结果
234234234234234234
问题2问题 2问题 2问题
以色列国防部长被解职以色列 国防部长 被 解职以色列 国防部长 被 解职以色列 国防部长 被 解职
以色列国防部部长被解职以色列 国防部 军事部 防卫厅 部长 被 解职以色列 国防部 军事部 防卫厅 部长 被 解职以色列 国防部 军事部 防卫厅 部长 被 解职
深圳又叫深圳市深圳 又叫 深圳市深圳 又叫 深圳市深圳 又叫 深圳市
http://www.lryc.cn/news/490445.html

相关文章:

  • 利用Docker容器技术部署发布web应用程序
  • [免费]SpringBoot+Vue毕业设计论文管理系统【论文+源码+SQL脚本】
  • BFS 算法专题(五):BFS 解决拓扑排序
  • 【Mysql】开窗聚合函数----SUM,AVG, MIN,MAX
  • java操作doc——java利用Aspose.Words操作Word文档并动态设置单元格合并
  • 探索 .NET 9 控制台应用中的 LiteDB 异步 CRUD 操作
  • 《进程隔离机制:C++多进程编程安全的坚固堡垒》
  • 构建无障碍的数字世界:深入探讨Web可访问性指南
  • 跨境出海安全:如何防止PayPal账户被风控?
  • 学习日记_20241123_聚类方法(MeanShift)
  • AI编程和AI绘画哪个更适合创业?
  • macOS 无法安装第三方app,启用任何来源的方法
  • 关于SpringBoot集成Kafka
  • 4.STM32之通信接口《精讲》之IIC通信---软件实现IIC《深入浅出》面试必备!
  • 6G通信技术对比5G有哪些不同?
  • 「Mac玩转仓颉内测版28」基础篇8 - 元组类型详解
  • WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
  • 机械设计学习资料
  • Python 快速入门(上篇)❖ Python 字符串
  • Ubuntu中使用多版本的GCC
  • 1+X应急响应(网络)文件包含漏洞:
  • 机器学习实战记录(1)
  • PHP8解析php技术10个新特性
  • C++模版特化和偏特化
  • Simulink中Model模块的模型保护功能
  • Linux常用工具的使用(2):文本编辑器的使用
  • 【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署
  • 联想ThinkServer服务器主要硬件驱动下载
  • Ansys Zemax Optical Studio 中的近视眼及矫正
  • 三次握手后的数据传输