Gangmax Blog

在Ruby1.9下设置中文分词实现gem Rseg-0.1.7

今天我查询了一下Ruby语言下的分词算法,看到了Rseg和其算法原理,感觉不错。于是我按照文章中的介绍安装。过程很简单,直接gem:

1
gem install rseg

安装完成后,运行例子发现错误:

1
2
3
4
5
6
7
8
9
10
11
/home/user/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': /home/user/.rvm/gems/ruby-1.9.2-p180/gems/rseg-0.1.7/lib/engines/number.rb:4: invalid multibyte char (US-ASCII) (SyntaxError)
/home/user/.rvm/gems/ruby-1.9.2-p180/gems/rseg-0.1.7/lib/engines/number.rb:4: invalid multibyte char (US-ASCII)
/home/user/.rvm/gems/ruby-1.9.2-p180/gems/rseg-0.1.7/lib/engines/number.rb:4: syntax error, unexpected $end, expecting ']'
'', '', '', '', '五...
^
from /home/user/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/user/.rvm/gems/ruby-1.9.2-p180/gems/rseg-0.1.7/lib/rseg.rb:9:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:33:in `require'
from <internal:lib/rubygems/custom_require>:33:in `rescue in require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from s.rb:2:in `<main>'

我机器上默认使用的是Ruby1.9。从网上搜索得知,Ruby 1.9实现了新的字符串编码方式,而rseg-0.1.7的代码用的还是Ruby1.8的字符串机制,所以导致该错误。解决的方法是,修改如下每个文件,在其开头第一行加入:

1
# coding: utf-8

修改的文件包括:

1
2
3
4
5
6
lib/rseg.rb
lib/engine/number.rb
lib/engine/name.rb
lib/filters/conjunction.rb
lib/filters/fullwidth.rb
lib/filters/symbol.rb

修改完成后,例子可以顺利运行。

另外,按照该文章的方法,自定义词库中的词也可以正常被分词。

该分词算法的思想简单巧妙且有效,赞一个!

Edited on 2019-12-10: The original urls are dead, here is the github URL of Rseg.

Comments