AppleScriptにword ofという書き方がある。これは主に……
set a to “This is a pen.”
set b to words of a
--> {"This", "is", "a", "pen"}
といった、のどかで牧歌的な用途に使うものだ。単語単位で分解を行って、何ワード目の単語を取り出すとか、そういう使い方をする。
ところが、これを日本語の文章に対して行おうとすると、なかなか頭が痛い。日本語の文章をワードに分解しようとすると、ただ単にスペースで区切ればよいとかいった話ではなく、文法とか語彙(とくに固有名詞)を考慮して行わなければならない。この手の処理には、研究者の手によって形態素解析器といった種類のソフトウェアが作られてきた。形態素解析器には、KAKASHI、Chasen、Juman、MeCabなど枚挙にいとまがない。
Mac OS/Mac OS Xにも形態素解析系の機能はついているのだが、あくまで漢字変換のために用意されているものであり、いまひとつプログラムから利用しづらい、という批判もよく聞く。
Mac OS X 10.5では、このApple純正の形態素解析機能だけではなく、別の形態素解析器が搭載されるようになった。
Mac OS X 10.5, Leopardにはオープンソースの形態素解析器「MeCab」が標準で入っており、Spotlightの検索辞書を作成するのに使われている……これは一部で有名な話だ。
ただし、このMeCabは日本語インプットメソッド「ことえり」のユーザー学習辞書と連携していないばかりか、「ことえり」よりも語彙数の少ない辞書を参照しているようで、「ことえり」よりもバカっぽい挙動をする。MeCabが標準で参照しているIPA辞書は「地名に強い」という定評があるが、どちらかといえば「地名以外はダメ」という印象である。
実際に、MeCabを呼び出すプログラムにAppleScript StudioでGUIをかぶせて、形態素解析でオラオラ遊んでみると……悩ましい結果が出てくる。「私の名前は長野谷です。」といった文章を形態素解析させると、「長野谷」という固有名詞(人名)が辞書に登録されていないためか、「長」「野谷」と分解されて出てくる。ちなみに、ことえりでは「長野谷」はきちんと変換できる(学習させたからだが)。
冒頭で述べたように、AppleScriptのword ofは日本語の文章に対しては正しく機能しない。漢字やカタカナ、ひらがなといった文字種類の区切りでブチ切るといった、うそっぱちの動作を行う。
set a to "富士山は日本で一番高い山です。"
set b to words of a
--> {"富士山", "は", "日本", "で", "一番高", "い", "山", "です"}
これは、すでにAppleScript登場時の1993年ごろからよく知られていた挙動であり、「ああ、Appleの開発者はバカなんだな」あるいは「日本語向けのローカライズは見た目だけで、やる気はないんだな」ということがよく分る仕組みになっている。
それは置いておくとしても、そもそも、日本語で「何ワード目」とかいう処理を行うものであろうか? 大学でレポートを書く宿題があったとして、「では、500ワード以上書いてください」とかいう出題なんて……あるわけがない。日本語では「○文字」という数え方を採用しており、「400字詰め原稿用紙10枚」といった表現が一般的だ(最近は、手書きじゃないから表現が違う?)。
だから、「何ワード」とかいう数え方を実現すること自体には、ほっとんど意味がない。もし仮にAppleのエンジニアが本気になって、
「よーーし、日本語のワードブレーキング(単語分割)を完璧にやっちゃうぞ〜!」
と単語分割に取り組んだとしても…………そりゃできるだろうけれど、「だからどうした?」という結末が待っているだけである。
なんか、無闇に賢い処理ができたりしそうだが、AppleScript的には「そんなところに頑張ってどうする?」という話になる。それは、頑張る箇所を完全に間違えている。そんな高い山に挑戦する前に、もっと低い山(日常的なバグ)をやっつけるべきである。あとは、GUI Scriptingで、Adobeの「GUIをプログラムから描画するからコントロールできない」「本当にマウスカーソルがGUI部品内に入って来ないと処理しない」というプログラムに対しても強制コントロールできるようにすべく、対策を講じるべきである。
日本語でワードカウントだけができても(あんまり)うれしくない。結果が英語と同様に返ってくるぐらいではうれしくない。日本語でワードブレーキングができても、結果をどのように返すのかという点も問題である(品詞情報も取れないと、使い勝手がぜんぜんよろしくない)。
あと、文法的にどこまで細かく評価するのか……という点も問題である。語幹と語尾を分割されるとけっこう困る場合もあるし、場合によっては助かる場合もある。そのあたりの、ワードブレーキングをどのようなレベルまで行うかという指定ができないと困る。0か1か、みたいに語幹と語尾をブレークされても困る。語幹と語尾を分割しつつセットになっていることが分るといったような、階層的なワードブレーキングが望ましいのではないか?
だいたい、この話は……世間的にはAppleScriptのword ofなんて使い物にならない機能は、本来の役割以外で使われていることが多く、shell scriptでEhternetのMACアドレスを取得してコロン(「:」)をもとにワードブレーキングしてデータを取り出していたのだが、これがLeopardになって正常に働かなくなったので、MLに投稿しつつバグレポートを書いたことで……予想外の議論に展開したことに起因する。
「AppleScriptのワードブレーキング機能でshellからの返り値をパターン分解するんじゃねえ、自然言語のテキストを分解する用途に使え」
といった話になったので、「ふざけるな、日本語のテキストなんかまともに分解できんぞ。どんだけバグレポートを書かせるつもりだ?」と、やりあったわけであるが…………。
しかし、なんでAppleの担当に日本語のことを仔細にわたって分りやすく、かつ無料で教えてやらなければならんのか、納得できねー。すげー納得できねー。