題名:Java Diary-45章

五郎の入り口に戻る

日付:2004/1/30

目次に戻る


GLBrowser-Part6(VerX)

さて、このころ私が開発している環境であるところのMacintoshのほうに変化があった。OS10.3 Pantherが発売されたのである。前のJaguarについて言えばあまり変化を感じなかったが、このPantherにはいろいろと使ってみたい機能がたくさんあったのだ。特に改良されたFinderは使いやすそうだったし、プログラミングの点でもいくつか改良がなされていた。

というわけで購入したのだが、問題はいつ入れ替えるか、ということである。今新しいプログラムはなんとなく動いている。しかしこれがOSをアップグレードした途端、全てアウトになる、などという自体はさけたい。というわけでまず会社にあるiMacに10.3をインストールしてみる。すると大抵のアプリケーションは動いているようだ。今回のプログラムも一応起動する。Googleに検索をかけるとなにやらコンソールにエラーメッセージが表示される。なになに、と観ればSenの内部で辞書がどうのこうのと言っているようだ。ふーん。たしか辞書まで含めると容量が大きく成りすぎるから、分割してiMacにコピーしたりしたんだよな。そのせいだ、と思いこんだ私は家に帰るとPower Bookを10.3にアップグレードする。ついでに開発ツールもXcodeに変更。それほどかわっていないとはいえ、最初はやはり苦労する。

あれやこれやのうちになんとか動き始めた。さて検索だ、とやってみると会社でみたようなエラーが起こる。何だこれは。辞書は問題ないはずだぞ、とよくよく観れば、根はもっと深いところにあった。

Javaが1.4になったところでいくつか追加されたパッケージがある。Senは使える場合それを使うような設定になっているのだが、不思議なことにそのパッケージを使おうとするとSecurity Exceptionなんか起こっている。がびーん。これはどうしたことだ。ソースコードを観るとそれを回避する方法は存在しているようだ。しかしそのためにはソースを変更し、Sen全体をコンパイルしなければならない。しかし私は軟弱ものなので、UNIXのmakeだのinstallだのという呪文は教えられた通りにしか唱えられないのであった。平たく言えばどうやれば再コンパイルできるのかわからない。

うげげげげ。形態素解析のところが動かないではこのプログラムが成立しないではないか。絶望にうちひしがれた私はとりあえずその晩早めにねた。とはいっても直面している問題は頭から離れない。あれこれ考え

「とりあえず全部もどしてみるというのはどうだろう」

と思いつく。翌日さっそく試みるがやはりうまく動かない。インターネットを漁り同じ問題に直面している人がいないかと思って探してみるがそうした情報は見つからない。Xcodeのどこかにコンパイラスイッチでも存在しており、それをいじれば問題が一挙に解決ということにならんか、と思い探してみるがやはり見つからない。

ここで私ははたと行き詰まる。元はといえばOS 10.3の新機能に目がくらみ、動かなくなる危険性を無視してアップグレートした私が馬鹿だった。しかしなんとかしないとこのプログラムは動かないままである。WISSで発表しようと言う野望もパーである。

嘆いていても問題は消えないから解決策を模索し始める。もうこのSenというのは諦めよう。それでなくても前からどうにも言葉をちょんぎる性能が悪いなあと思っていたのだ。では他にどういう選択肢があるか。そこで考えたのがMonzaiというプログラムである。MacOsには標準でことえりという日本語変換プログラムが搭載されている。ローマ字を入力して日本語にちゃんと変換してくれる、ということはMac OS側に日本語をある程度区切って品詞を識別してくれる機能があることに他ならない。

このMonzaiというのはApplescriptを介してその機能を呼び出し、入力を形態素解析してくれた結果をかえしてくれるプログラムだったのである。しかしソースコードは公開されていないからこのプログラムのまま使うしかない。

何か新しいソフトを使うときに

「別途これこれのパッケージが必要です」

と言われるのはとても面倒だと思う私は他人にそうした思いをさせたくない。ではどういう方法があるか。monzaiのダウンロードページにはMac OS が持っている日本語形態素解析機能に関するドキュメントが示されていた。だいぶ前にもダウンロードして読んだことがあるのだが、ほったらかしにしていたのである。だってCで書かれているし、おまけにCarbonなんだんもん。なんだか見慣れない型とかたくさん使われているし。

しかしもはや文句を言っている場合ではない。そのドキュメントにのっているCのプログラムや、他のサンプルプログラムを参考にあれこれ作り出す。ああ、Cのプログラム書いたの何年ぶりだろう。Objective-Cは一応CとUpper comaptibleということになっているのだが、それでも記憶をだいぶほじくり返さなくてはならない。#includeってなんだっけ。#ifndefとかいうのもあったなあ。ヘッダーファイルってのが別にあるし。

さて、そこら中から適当にファイルを寄せ集め、なんとかコンパイルエラーがでなくなるまでにだいぶ時間を要した。ここからまだ道は長い。何が面倒といって、Cに定義されている観たこともない型と、JavaのString の変換をしてやらなくてはならないのである。若い頃だったら迷いも何もなくこの実現に突き進んでいたと思う。もしこれができれば、GLBrowserと一緒に別のプログラムを配布することなく、形態素解析が可能となるのである。Senと辞書だけで数十Mの大きさがあるが、そんなものを配布しなくてもよくなる。Mac OSへの依存度はますます高まるが、まあいいではないか。

しかし年を取った私はふと立ち止まって自分に問い直す。今急いでプログラムを作っているのはWISSに間に合わせたいからだ。それであれば、別に無理してOS Xの言語解析機能を呼ばなくても、Monzai 使えばいいではないか。たぶんMonzaiの中ではややこしい型の変換とかやってくれているはずだし。

実はこの方針転換には一つ危うさがつきまとっていた。MonzaiとのやりとりはApple Event経由になる。しかし過去にGLBrowserとSafariを連動させるさい、Apple event経由で行ったが妙に反応が悪かったり、あるいはいくつか要求を投げると動作がおかしくなったりしたのである。このことから推察するに、Apple Eventというのは短時間にたくさん投げたりできないものなのかもしれない。

しかしいつまで迷っていてもしょうがない。Monzaiを利用するという方向に転換してあれこれ作り始める。以前Safariを呼び出すところで作ったApplescriptの呼び方をひっぱりだし、Monzaiに文字列を渡すのは簡単にできた。問題は解析結果を受け取るほうだ。

あれやこれや試行錯誤の末、結果を文字列として受け取り、Javaの側で解析することにした。品詞とかはこれでちゃんととれる。問題はちょんぎった文字列を取り出す方法である。Applescriptの世界で観ると実にきれいに文字列がちょんぎれて帰ってくるのだが、Javaでみるとなんだか怪しげな数字の列に変換されてしまっている。たとえば306D3053とか。

あれこれ調べてみるとどうもこれはUnicodeらしい。。はて、これをどうやったら普通の文字列にできるものか。またもやあれこれ試行錯誤の末なんとか文字列が取り出せるようになる。

ああ、これでなんとかなる。途端に私は有頂天になる。そうだよ。ちょっとした問題があってもちゃんと乗り越えられるのさ。おほほほほ。と誰に向けてあげているのかわからない高笑いをあげつつ、Monzai呼び出しルーチンを組み込む。さて、検索結果をばりばり解析してもらおうじゃないか、とやってみるとたちまちMonzaiがお亡くなりになる。正確な原因はわからないままだが、当初の悪い予感が現実となって私の前に立ちはだかる。やはりApple Event経由だと短期間に大量の解析をやらせる、というのは無理なようだ。

ほえーっと私は途方に暮れる。どうしたものだろうか。何かないか、何かとつぶやきながらあてもなくインターネットをさまよう。そして気がつく。AppleのサイトからMac用にまとめられた茶筅がダウンロードできることを。これは以前に使おうとしたことがあった。しかし例によって

「このプログラムを使う前には茶筅をインストールしてください」

と書くのがいやで使わずにいたものである。しかし今となってはここに戻ってくるしかないのではなかろうか。問題はCで書かれた茶筅をどうやってJavaにつなぐかである。同じ要望を持っている人は他にもいるらしく、「茶筅をJavaから使うにはどうしたらいいですか」という質問がネット上で見つかる。それに対しての答えは「JavaだったらSenというのがありますからそちらを使ってもらったほうがいいかもしれません」というものだった。ええい、そのSenが使えぬから苦労しているのではないか。ぶつぶつ言いながらさらに情報を漁るとJavaから茶筅を呼ぶサンプルコードを公開してくれているページが見つかった。やれうれしや。というわけでさっそく実装する。なんだか動いているようだがどこかがおかしい。そうか。文字列の入出力がEUCなんだ。(この3文字が何を意味しているかは気にしなくてもいいのです)というわけでこちょこちょとやるとちゃんと動いてくれる。

私はほっと一息つきながら検索語の周りにわらわら出てくる単語を眺める。こうして動き出すとあの苦労はなんだったのか、と思うがしかしこうして平穏無事に日本語がちょん切られるというのは実にありがたいことだと思えてくる。

さて、これで10.3にして生じた問題の方はなんとか片が付いた。問題ばかりでは面白くないからメリットの方も享受しようではないか、と画面上を動く文字を影付きにしてみた。これは10.3から使用可能になった機能である。実は未だにどのパラメーターが影のどの部分に対応しているかよくわかっていないので影というよりは、文字がかすかににじんだように見える。かっこいいのかどうかさっぱりわからないがとりあえず自己満足に浸ることにする。などとやっているうちに11月も1/3が終わろうとしている。残りは3週間。

前の章 | 次の章


注釈