`
robbin
  • 浏览: 4820455 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137000
社区版块
存档分类
最新评论

rmmseg-cpp - 简洁高效的ruby中文分词程序

    博客分类:
  • Ruby
阅读更多
我在前一篇文章向大家介绍了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,效果还不错。
分享到:
评论
1 楼 xinbo.tang 2008-05-27  
非常感谢,帮我节省了很多时间 :)

相关推荐

    pymmseg-cpp python中文分词

    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.

    yaml-cpp-yaml-cpp-0.6.0.tar.gz

    yaml-cpp库的引入,使得运维人员能够更加高效地处理这些YAML格式的文件。YAML的语法简洁明了,易于人类阅读和编写,同时也方便计算机解析。通过yaml-cpp库,可以方便地将YAML数据转化为C++的数据结构,或者将C++的...

    Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe

    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库的编译与安装指南** yaml-cpp是一个用C++编写的YAML解析器和生成器库,广泛应用于配置文件处理和数据序列化。为了在项目中使用yaml-cpp,我们需要先下载、解压源代码,然后进行编译和安装。以下是一...

    aws-sdk-cpp-1.11.4(x86-windows)

    1,C++版本的现代化AWS SDK调用API接口,具有普遍可用性 2,压缩包中是从github下载的aws-sdk-cpp-1.11.4...3,将以上文件引入项目工程文件,即可调用aws-sdk-cpp api开发应用程序,免去了编译sdk花费大量时间的麻烦

    yaml-cpp-yaml-cpp-0.6.2.zip

    《深入理解YAML-CPP库:解析YAML文件的CPP实现》 YAML,全称“YAML Ain't Markup Language”(发音同“camel”,意为“不是标记语言”),是一种简洁、直观的数据序列化语言。它常用于配置文件、数据交换格式等领域...

    yaml-cpp.tar.gz

    YAML是一种简洁、直观的人类可读的数据序列化语言,常被用于配置文件、数据交换以及存储程序的状态。yaml-cpp库的出现,使得开发者在C++环境中能够方便地处理YAML数据,从而简化了项目中的数据管理和交互工作。 在...

    Dev-Cpp v5.11 TDM-GCC 4.9.2 Setup.exe.zip

    《Dev-Cpp v5.11 TDM-GCC 4.9.2:一款轻量级C++集成开发环境》 Dev-Cpp是一款经典且小巧的C++集成开发环境...尽管现代有更多的高级IDE选择,但Dev-Cpp依然因其简洁和高效而在一部分开发者中保持着一定的受欢迎度。

    Dev-Cpp 5.6.1 MinGW 4.8.1 Setup

    Dev-Cpp 5.6.1 MinGW 4.8.1 Setup 是一款集成开发环境(IDE),专门针对C和C++编程语言设计。这款软件是初学者和专业程序员的理想选择,因为它提供了一个轻量级但功能齐全的开发平台。在深入探讨其特点之前,我们先...

    Dev-Cpp-5.11-TDM-GCC-4.9.2-Setup.exe

    标题中的"Dev-Cpp-5.11-TDM-GCC-4.9.2-Setup.exe"和描述中的"Dev-Cpp_5.11_TDM-GCC_4.9.2_Setup.exe"指向的是同一款软件的安装程序,名为Dev-Cpp,这是一个集成开发环境(IDE),专门用于编写C++语言的程序。...

    activemq-cpp-library-3.9.5 编译的windows库文件,支持vs2015、vs2017

    总之,ActiveMQ-CPP Library 3.9.5为C++开发者提供了与ActiveMQ交互的便捷方式,结合Visual Studio 2015和2017的支持,能够在Windows平台上高效地构建消息驱动的应用程序。通过理解其核心组件和使用方法,开发者可以...

    Dev-Cpp 5.11 TDM-GCC 4.9.2

    软件:Dev-Cpp 5.11 TDM-GCC 4.9.2 这个软件我相信大部分人都认识 Dev-C++是一款C++开发工具 Dev C++也是一个Windows下的C和C++程序的集成开发环境 但大家应该遇到这个问题 在访问Dev-Cpp下载的网站: ...

    Dev-Cpp.rar

    不同于体积庞大的Visual Studio(VS)或Visual C++(VC++),Dev-Cpp以其简洁的界面和快速的启动速度,为用户提供了高效且便捷的编程体验。 首先,让我们深入了解Dev-Cpp的核心特点。Dev-Cpp基于MinGW(Minimalist ...

    AMQP-CPP是用于与RabbitMq消息中间件通信的c++库

    AMQP-CPP库使得C++开发者能够方便地在他们的应用程序中集成RabbitMQ的功能,实现分布式系统中的任务调度、解耦和负载均衡。 首先,我们需要了解AMQP协议。AMQP是一种二进制应用层协议,它定义了消息的格式以及消息...

    activemq-cpp-library-3.9.5-src.zip

    《ActiveMQ-CPP库3.9.5源代码解析与应用》 ActiveMQ-CPP库是Apache ActiveMQ项目的一部分,它提供了一套C++接口,用于与ActiveMQ消息代理进行通信。这个库允许开发者在C++应用程序中实现高级消息队列协议(AMQP)和...

    Dev-Cpp 5.9.2 TDM-GCC 4.8.1 Setup.rar

    Dev-Cpp因其简洁的界面和易于上手的特点,成为了许多初学者的首选。同时,理解编译器的工作原理,如预处理、编译、汇编和链接等步骤,也是深入学习C++的关键。通过使用这样的工具,开发者可以更好地理解代码如何被...

    Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.zip 2024年更新

    此外,Dev-Cpp还支持多语言,包括但不限于英语和中文,方便不同语言背景的用户使用。其自定义配置能力也是一大亮点,用户可以根据自己的需求调整编译器选项、构建步骤,甚至可以添加第三方库,以满足各种项目的需求...

    Dev-Cpp 5.9.2 TDM-GCC 4.8.1 Setup.zip

    首先,Dev-Cpp是一个轻量级且用户友好的IDE,它提供了编辑、编译、调试和运行C++程序所需的所有工具。它的主要特点包括代码高亮、自动完成、语法检查、项目管理以及内置的GDB调试器,这使得初学者和专业开发者都能...

    Dev-Cpp_5.11 安装包.zip

    总之,Dev-Cpp_5.11是一款在C++学习和开发初期极具价值的工具,它简洁易用,但功能全面,能够帮助开发者快速构建和调试C++程序。尽管已有些许年代,但它仍能在许多场景下发挥作用,尤其是对于那些需要一个轻量级IDE...

    Dev-Cpp_5.11_TDM-GCC_4.9.2_Setup.zip

    在描述中提到的"Dev-Cpp_5.11_TDM-GCC_4.9.2_Setup.zip"是一个压缩包文件,其中包含的主要内容是Dev-Cpp的安装程序,即"Dev-Cpp_5.11_TDM-GCC_4.9.2_Setup.exe"。这个可执行文件是用于在用户的Windows系统上安装Dev-...

Global site tag (gtag.js) - Google Analytics