今天我查询了一下Ruby语言下的分词算法,看到了Rseg和其算法原理,感觉不错。于是我按照文章中的介绍安装。过程很简单,直接gem:
安装完成后,运行例子发现错误:
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 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.