Pocket

こんにちは。

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]

Pocket