在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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 http://www.cnblogs.com/Tachikoma/archive/2010/01/28/1658261.html 这是我写的 RJB 在windows下的一些安装事项 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. 在我们代码的根目录下(这点很重要,稍后讨论),运行
ruby ICTCLAS.rb 可以看到结果
这/r 篇/q 文章/n 摘自/v Tachikoma/nx 的/b 乱七八糟/i
讨论: 1. 路径问题 前面提到过两个问题 1] 将ICTCLAS4j 的 DATA 文件夹 复制到代码根目录下 2] 必须从代码根目录启动程序 否则易出现以下错误
in `method_missing': unknown exception (NullPointerException)
其原因就是 ICTCLAS4j 源代码中,org.ictclas4j.bean.Dictionary中load方法使用相对路径读取字典文件(位于DATA文件夹),就要求DATA文件夹位于程序启动目录下 这个可以认为是ICTCLAS4j的一个BUG吧 P.S. 当然也自然有以下两种思路来解决这个问题 1] 修改源代码,重新编译ICTCLAS4j,使用绝对路径 2] 使用jvm启动参数 user.dir,但是经过多次尝试,失败 问题解决: 重新修改ICTCLAS.rb
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文件夹下 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论