GENIA taggerを使うクラスの見直し

 GENIA taggerC++で書かれた英文品詞解析ソフトですが、これをRubyで呼び出すため、今まではサーバプログラムとして起動していましたが、今回はこれを書き換えました。
 いちいち別プログラムとして起動してから、本命のRubyコードを走らせるのも面倒だし、ソケットを介すことになるので並列化して使用することができないので、今回はGENIAをRubyプログラムの子プロセスとして起動することを考えました。

 具体的には、GENIAの制御用Rubyクラスを作り、そのコンストラクタで子プロセスを起動しGENIAを実行するようにしました。後はクラスのメソッドに、英文を受取ってGENIAに渡し、解析結果をreturnするものを用意しました。

class GENIA_controller
def initialize(genia_path)
@genia = IO.popen("cd "+ genia_path +" ; ./geniatagger 2>/dev/null", "r+")
end

 詳細は私のGitHubの方にあります。
 これでより簡単にGENIAを使用することができるようになり、品詞解析の並列化にも対応できます。またこのクラスが破棄されるまで子プロセスは残り続けるので、GENIAを再起動することなく、次々に英文解析を行っていくことができます。
 次回はこれを使って英文解析結果をマージする部分を作っていこうと思います。