こんにちは。
RubyでJUMANを使用していたら、UTF8のファイルでエラーが出まくっていたので調べてみたら「ただし,Windows 版は従来と同じく,入出力および辞書の文字コードはSJIS である.」とのことでした。(JUMAN version 7.0 マニュアルより)
なので、UTF8を用いてJUMANでなんかしらの操作をしたい場合はエンコーディングを行ってShift-JISに変更する必要があるみたいです。
という訳で、そこら辺を意識したRubyのプログラムを載せておきます。
[ruby]
# coding: utf-8
# ★文字処理について
# open3の受け渡し時のみShidt-JISにして,それ以外の処理はすべてUTF8で行う
# (前処理)→【utf8 to Shift-JIS】→(JUMAN処理)→【Shift-JIS to utf8】→(後処理)
require ‘open3’ # open3の呼び出し
# stringはUTF8
string ="犬も歩けば棒に当たるし、猿は木から落ちるし散々だ。"
# 形態素情報を格納する配列を初期化
#
# 大雑把な構造←中身は結構むずかしい
# [ [1番め文字の形態素情報], [2番め文字の形態素情報],
# …, [n番め文字の形態素情報] ]
keitaisojouhou = Array.new
# open3で標準入出力を操作してJumanコマンドを実行
Open3.popen3("juman -b") do |stdin, stdout, stderr|
# JUMANに文字列を受け渡す前にShift-JISに変換
string.encode!("Windows-31J")
# 入力
stdin.puts(string)
stdin.close
# 標準出力を取得した瞬間UTFに変換!
str = stdout.read.encode!("UTF-8")
# keitaisojouhouに追加
str.each_line do |line_str|
unless line_str == nil
keitaisojouhou.push(line_str.split(/\s/))
end
end
end
# 語彙のリストを表示
keitaisojouhou.each do |elm|
unless elm[2] == nil
print("・#{elm[2]}\n")
end
end
[/ruby]
コメントを残す