我在前一篇文章向大家介绍了
libmmseg实现ruby的中文分词,在这篇文章当中向大家介绍另外一个优秀的ruby中文分词程序rmmseg-cpp。
rmmseg是浙江大学的学生pluskid开发的纯ruby版本的中文分词程序,采用的也是“基于词典的最大匹配算法”,rmmseg的相关介绍请看:
http://www.iteye.com/news/1380。
rmmseg的主要问题是性能和内存消耗。用纯ruby编写的rmmseg分词的速度非常慢,而且内存消耗非常惊人,当使用复杂分词算法的时候,内存呈线性上升的现象,在我作的大量索引测试程序中曾经上升到了900MB以上。
为此rmmseg的作者pluskid再接再厉用C++重写了一遍rmmseg项目,这就是rmmseg-cpp。根据作者自己的简单测试表明:rmmseg-cpp的性能是rmmseg的400倍之多。下面简单介绍rmmseg-cpp的安装和使用:
1、安装
rmmseg-cpp目前只支持Unix操作系统,不支持Windows
gem install pluskid-rmmseg-cpp --source=http://gems.github.com
2、使用
require 'ferret'
require 'rmmseg'
analyzer = RMMSeg::Ferret::Analyzer.new do |tokenizer|
Ferret::Analysis::LowerCaseFilter.new(tokenizer)
end
就可以了,然后就可以使用analyzer进行分词索引和查询了。
rmmseg-cpp和libmmseg目前都可以作为比较好的ruby中文分词程序来使用,他们的性能和内存管理都相当不错,经过我们测试和使用的情况来看,都可以放心在生产环境当中使用。不过他们也有一些区别和各自的特点:
1、rmmseg-cpp的分词速度比libmmseg快一倍左右
rmmseg-cpp是专门为ruby的ferret编写的中文分词接口,代码十分简练,和ruby结合的很好;libmmseg主要是用来和sphinx配合的,并不是为ruby而写,他仅仅提供了一个非常简陋的ruby调用接口,在ruby程序当中使用中文分词的时候,rmmseg-cpp的性能明显胜出一筹。
2、rmmseg-cpp的内存管理似乎不如libmmseg稳定
Ruby本身是带有GC功能的脚本语言,用C/C++编写Ruby扩展本身是一件很麻烦的事情,因为C/C++自身是需要手工分配内存的,但是如果程序员对于Ruby的GC机制没有足够的了解,会带来很多麻烦,弄不好就可能内存泄漏,或者发生不期望的被使用中的对象被Ruby GC掉的问题。
rmmseg-cpp已经在GC方面下了很大的功夫,因此内存管理相当不错,但是我曾在一次数据量非常大量的全文索引过程当中观察到内存短时间内快速上升了几十MB的现象(但这种现象不常见)。
而libmmseg没有对ruby的依赖,仅仅提供一个简陋的接口,因此在数次测试当中,已经程序长时间运行观察下来,内存管理比rmmseg-cpp显得更加平稳一点,没有出现过一次内存快速上升的现象。
3、rmmseg-cpp目前没有Windows版本,而libmmseg支持windows版本
4、rmmseg-cpp安装配置很简单,不像libmmseg那么麻烦
总得来说,rmmseg-cpp和libmmseg都是用C++编写的优秀的中文分词程序,并且都可以支持在ruby当中实现全文检索的中文分词功能。如果不是特殊的需要,仅仅只是在ruby当中使用中文分词功能,那么推荐使用rmmseg-cpp。目前JavaEye网站的中文分词算法已经采用rmmseg-cpp,效果还不错。
分享到:
- 2008-05-27 00:47
- 浏览 11151
- 评论(1)
- 论坛回复 / 浏览 (1 / 4803)
- 查看更多
相关推荐
pymmseg-cpp is a Python port of the rmmseg-cpp project. rmmseg-cpp is a MMSEG Chinese word segmenting algorithm implemented in C++ with a Python interface.
Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exeDev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exeDev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exeDev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exeDev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exeDev-Cpp 5.11 TDM-GCC...
yaml-cpp-yaml-cpp-0.6.0.tar.gz
1,C++版本的现代化AWS SDK调用API接口,具有普遍可用性 2,压缩包中是从github下载的aws-sdk-cpp-1.11.4...3,将以上文件引入项目工程文件,即可调用aws-sdk-cpp api开发应用程序,免去了编译sdk花费大量时间的麻烦
软件:Dev-Cpp 5.11 TDM-GCC 4.9.2 这个软件我相信大部分人都认识 Dev-C++是一款C++开发工具 Dev C++也是一个Windows下的C和C++程序的集成开发环境 但大家应该遇到这个问题 在访问Dev-Cpp下载的网站: ...
zxing-cpp-master\cli zxing-cpp-master\cmake zxing-cpp-master\core zxing-cpp-master\opencv zxing-cpp-master\opencv-cli zxing-cpp-master\.gitignore zxing-cpp-master\README.md zxing-cpp-master\...
用于解决Ubuntu 20.04 ROS noetic rviz找不到yaml-cpp的错误。具体错误为输入 rviz rviz找不到libyaml-cpp0.6。修复方法为将本压缩包内的所有yaml文件复制到/usr/lib/x86_64-linux-gnu/下:sudo libyaml-cpp.* /usr/...
yaml-cpp库的编译&安装 一、 下载 二、 解压缩 三、 编译&安装 四、 使用说明
Dev-Cpp 5.6.1 MinGW 4.8.1 SetupDev-Cpp 5.6.1 MinGW 4.8.1 Setup
aws-sdk-cpp 1.9.26 C++ SDK 附带生成好的vs2017解决方案和工程文件,使用有问题请留言
Dev-Cpp Windows 32bit 安装程序
etcd-cpp-apiv3 是 etcd C++ 版本的客户端工具,可以用于操作 etcd 集群。但它的依赖比较多(grpc 和 cpprestsdk),源码编译会有点麻烦,压缩包中就是编译好的头文件和库文件。 压缩包中有 etcd-cpp-apiv3-0.14.3....
Dev-Cpp 5.6.0 MinGW 4.8.1 Setup.exe Dev-Cpp 5.6.0 MinGW 4.8.1 Setup.exe Dev-Cpp 5.6.0 MinGW 4.8.1 Setup.exe Dev-Cpp 5.6.0 MinGW 4.8.1 Setup.exe
activemq-cpp-library-3.9.5编译的C++库文件,支持vs2015,vs2017,包括了依赖的库文件和头文件,可以在项目中直接使用。
abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp 最新源代码abseil-cpp ...
Dev-Cpp.5.10.TDM-GCC.4.8.1.Setup
qpid rpm包 带依赖 直接yum localinstall qpid-cpp-server-1.39.0-1.el7.x86_64.rpm 就能安装
eclipse-cpp-2023-06-R-win32-x86_64.zip 适用于Windows系统
eclipse-cpp-2022-03-R-linux-gtk-aarch64.tar.gz
Embarcadero 公司重新资助的 Dev-Cpp 6.3版,包含TDM-GCC_9.2