您的位置:首页 > 编程语言 > Ruby

ruby 下使用 ICTCLAS(JAVA)

2010-01-30 18:03 239 查看
ICTCLAS并没有RUBY开发版本,RUBY可以使用C版本和JAVA版本的ICTCLAS来做分词

RUBY用C的代码,涉及到重写接口和包装的问题,比较麻烦

在此讨论RUBY用JAVA版本的ICTCLAS实现分词

总体思想:RJB是个很精彩的库

1. 下载ICTCLAS4j

2. 目录结构

==ICTCLAS.rb

==ICTCLAS(ICTCLAS4j的源文件)

==DATA(复制ICTCLAS4j的源文件中的DATA文件夹,为什么复制在此我们稍后讨论)


3. 环境

  Windows 7

  Ruby 1.8.6

rjb-1.2.0-x86-mswin32-60

4. 安装RJB

  /article/7115792.html

  这是我写的 [b]RJB 在windows下的一些安装事项[/b]

5. ICTCLAS.rb 的源代码

  

#代码用UTF-8格式保存
require "rubygems"
require "rjb"

require "iconv"

class ICTCLAS
def self.fenci(input)
output = ""
Rjb::load(classpath="ICTCLAS/bin")
segtag_class = Rjb::import('org.ictclas4j.segment.SegTag')
string_class = Rjb::import('java.lang.String')
input = string_class.new_with_sig("Ljava.lang.String;" , input)
segtag = segtag_class.new_with_sig("I",1)
seg_res = segtag.split(input)
output = seg_res.getFinalResult()
output
end
end

output = ICTCLAS.fenci("这篇文章摘自Tachikoma的乱七八糟")
puts Iconv.iconv("GBK","utf-8",output) #转换码制以便输出


6. 在我们代码的根目录下(这点很重要,稍后讨论),运行

可以看到结果

 ]这/r 篇/q 文章/n 摘自/v Tachikoma/nx 的/b 乱七八糟/i


讨论:

1. 路径问题

  前面提到过两个问题

    1] 将ICTCLAS4j 的 DATA 文件夹 复制到代码根目录下

    2] 必须从代码根目录启动程序

  否则易出现以下错误

require "rubygems"
require "rjb"

require "iconv"

class ICTCLAS
def self.fenci(input)
root_path = "#{File.dirname(__FILE__)}/ICTCLAS"
output = ""
Dir.chdir(root_path) do |path|
Rjb::load(classpath="bin")
segtag_class = Rjb::import('org.ictclas4j.segment.SegTag')
string_class = Rjb::import('java.lang.String')
input = string_class.new_with_sig("Ljava.lang.String;" , input)
segtag = segtag_class.new_with_sig("I",1)
seg_res = segtag.split(input)
output = seg_res.getFinalResult()
end
output
end
end

     这样就可以从任意位置调用 ICTCLAS.fenci 方法 , DATA文件夹也可以放在ICTCLAS4j文件夹下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: