2004-04-12[n年前へ]
■ようこそ「辞書単語登録プログラミング」の世界へ
ATOKではじめるperlスクリプトです。キモは「入力予測システム」「プログラム・データベース」「クリップボードを用いたファイル不要のプログラミング」という辺りでしょうか。マニアックな「一行プログラミング」の世界は、これからはお気楽・極楽の「辞書単語登録プログラミング」の世界へと進化していくハズです(意味不明)。
ATOKユーザーであれば、「辞書単語登録プログラミング」なんていう言葉に興味を感じないとしても、一回は読んでみるのも面白いかもしれません。少しは役に立つかもしれませんしね。 ほら、例えばこんな感じで( Mon Apr 12 00:57:34 2004 )。
■ようこそ「辞書単語登録プログラミング」の世界へ
ATOKではじめるperlスクリプト
日本語を使う日本人として、PCを使っていて不便を感じることは多い。例えば、URLを入力するときには半角英文字入力モードに切り替えてキーをタイプしなければならないのに、その一方メールを書くときにはATOKの全角ひらがな入力モードに切り替えてキーをタイプし日本語を入力しなければならない。そして、そのメールを書いている途中にアルファベットのフレーズが出てくるようであれば、また文字入力のモードを切り替えなければならない。基本的にアルファベットだけを使うラテン語系の言語と違い、日本語のような多くの文字を入力するためにIMEなどのプログラムを使わなければならないとなると、どうにも不便を感じることが多い。そんな時、アルファベット文化圏に生まれなかったことを少し残念に思ったりする。
しかし、短所と長所は紙一重の表裏一体のものである。短所と長所が表裏一体というからには、どんな視点から眺めるかで、その表と裏は短所にもなれば長所にもなるハズである。IMEなどの日本語入力システムを使わなければならない不便さも、少し考え方を変えてみればきっと何かの便利さにも姿を変えるハズである。例えば、「グーグル」なんていう言葉を"
www.google.com"と辞書に単語登録してさえおけば、入力の手間を少し省くことができる。つまりは、日本語入力システムがブックマーク代わりになったりもする。つまり、日本語入力システムを単なる「よみ→漢字」という変換を行うデータベースにしておくのではなくて、「名前→URL」という変換を行うデータベース代わりに使うと便利であったりする。
そんな考えをさらに進めて、少し前にATOK数式処理プラグインなんていうものを作ってみた。JUSTSYSTEMの日本語入力システムATOKに数式処理機能を追加することで、数式計算を日本語入力と同じような感覚でできるようにしてしまうというツールを作ってみたのである。つまり、日本語入力システムを使えば「ひらがなの読みを入力すれば漢字が表示される」のと同じように、「数式を入力すればその計算結果が表示される」というものを作ってみたわけだ。日本語入力システムを使わなければならない不便さを、それを使えば、「どんなに算数が苦手な人であっても、誰もが天才算数少年になることができてしまう」という短所・長所変換システムを作ってみたのであった。
もう少し言い換えると、「有限の『よみ』を有限の『漢字』に対応させる」といったような「有限のデータベース」だけではなくて、「(色んな無限のパターンがある)数式→(色んな無限のパターンがある)計算結果」という無限のデータベースに日本語入力システムを変えてみたわけである。今回はそんな考えをさらにさらに押し進めて、ATOKの機能を必要以上にムダに機能拡張してみたい。
というわけで、今回は「数式」ではなく「perlスクリプト」プラグインを仕立ててみた(最新バージョンはperlだけでなく、ruby,awk,何でもござれバージョンになっています)。「数式」も「perlスクリプト」も結局は「プログラム言語」であって何ら違いはない(ATOK数式処理プラグインではクリップボードを変数として使うこともできる関数でもあった)わけだが、色々なことを実現しようとするならばperlの方が高機能であるに違いない。そこで、Windowsにインストールされたperlの機能をATOKから使うことができるプラグインを作ってみた。「そんなもの何の役に立つ?」「無意味にムダじゃないの?」と思う人が多いだろうし、その疑いは必ずしも外れてはいないのだが、とりあえず少し使い方の説明をしてみることにする。
例えば、まずは「perlスクリプト・プラグイン(最新バージョンはperlだけでなく、ruby,awk,何でもござれバージョンになっています)」を使って、これまでの「数式処理プラグイン」と同じようなことをしてみることにしよう。ソフトウェアをインストールした後でATOK上で半角英数で入力中に、まずは
print sin(3)/5 |
と入力して「AMET変換」すると、
0.0282240016119734 |
という風に計算を行った結果が出力される。もちろん、これまと同じように入力語句の末尾に"="を付けて
print sin(3)/5= |
と入力して「AMET変換」すると、
print sin(3)/5 = 0.0282240016119734 |
というように、入力スクリプトとその実行結果(計算結果)が共に出力される。なんと、これでATOKユーザーならばperlの数式処理機能を全て文字入力中に使うことができるわけである(perlがインストールされていれば)。
また、クリップボードにテキスト形式のデータが入っていれば、その内容が入力されたファイルがperlスクリプトに引数として渡される。だから、例えばクリップボードに
いろはにほへと ちりぬるをわか よたれそつねな らむうゐのおく やまけふこえて あさきゆめみし ゑひもせす |
なんていうデータが入っている時に、ATOKの文字入力で
$i=1;while(<>){print qq/$i: $_/;$i++}& |
と入力(末尾の&は出力結果が長くなるときのおまじない)して変換すると、クリップボードにコピーされていたデータを
1: いろはにほへと 2: ちりぬるをわか 3: よたれそつねな 4: らむうゐのおく 5: やまけふこえて 6: あさきゆめみし 7: ゑひもせす |
と行番号付きで出力することができる。
つまり、ATOKを使う限りにおいては、どんなアプリケーションであってもperlの機能を使うことができるわけだ。上の行番号を出力した例のように、メモ帳からでもあるいはノートパッドからでもperlの機能を使った機能拡張をすることができるわけだ。メモ帳ですら、perlの正規表現を駆使した整形処理をすることができるようになるのである。
えっ?こんな「perlスクリプト」を入力するのはメンドくさい?こんな"$i=1;while(<>){printqq/$i: $_/;$i++}&"なんていうプログラムを毎回毎回入力できるハズがない? うーん…何のためのATOK、何のための辞書変換、何のための日本語入力システムだろうか? …そう、こんな「perlスクリプト」はただ辞書に単語登録しておけば良い。「ぎょうばんごう」なんていう「読み」で"$i=1;while(<>){printqq/$i: $_/;$i++}&"という文字を登録しておけば済むのである。すると、最近のATOKであれば予測入力すらできてしまうから、二回目からは「ぎょう」という辺りまで入力したときにはすでに「perlスクリプト」が表示されているハズなのである。これがATOKではじめる「辞書単語登録プログラミング」なのである。これからの時代は「入力予測システム」「プログラム・データベース」「クリップボードを用いたファイル不要のプログラミング」という実にお気楽環境なのである。
そのお気楽プログラミングでどんな便利が手にはいるかというと、例えば「じこく」という「読み」に
($s,$m,$h,$d,$o,$y,$w,$i)=localtime;print qq/$h:$m:$s/; |
というような、文字を登録しておけば、「じこく」でAMET変換すると
0:18:16 |
という風に時刻を表示させることもできるし、例えば
ねん = "($s,$m,$h,$d,$o,$y,$w,$i)=localtime;$y+=1900;print qq/$y\//;" がっぴ = "$s,$m,$h,$d,$o,$y,$w,$i)=localtime;$o++;print qq/$o\/$d/;" じかん = "$now=localtime;print qq/ $now /;" |
なんていう風に登録しておけば「ねん+がっぴ」を変換すれば
2004/4/12 |
になるし、「じかん」であれば
Mon Apr 12 00:22:27 2004 |
というように自動入力することだってできるのである。
もちろん、system関数だって使えるわけだから、他のプログラムの機能を使うことだってできる。もちろん、他のプログラムの機能を使うまで行かなくても、他のプログラムを起動だけさせるなんてことだって簡単にできる。例えば、「でんたく」なんていう読みには"system(calc)"というような文字を辞書登録しておけば、「でんたく」と入力しperlスクリプトを表示させた後に変換を行うと、電卓が起動するようになる。
上に挙げたものは、とても簡単なサンプルに過ぎない。おそらく、perlを使いこなす人たちであれば、色んなperlスクリプトで色んな機能をATOKに追加していくことができるに違いない。
というわけで、今回はこんな「ATOKperlスクリプト・プラグイン」のご紹介をすることで、ATOKではじめる「辞書単語登録プログラミング」の世界へようこそと宣言をしてみたい、と思う。Windows上でATOKを使っていて、perl使い、という人がどれだけいるかは判らないが、一行プログラミングならぬ「辞書単語登録プログラミング」も面白いかも、と小さく呟いてみたいと思うのである(ちょっと弱気)。
2004-04-25[n年前へ]
■「辞書単語登録プログラミング」 面白一発芸 編
「文字」も「画像」も自由自在だぁー
Windows上で日本語を入力するためには、(Windowsに標準添付されているMS-IMEのような)IMEと呼ばれるソフトウェアを使わなければならない。前回、そんなIMEの一つであるジャストシステムのATOKから、さまざまなプログラムを呼び出すことのできるツール(AmetMulti)を作ってみた。ATOKから、(AMETと呼ばれる機能を使って)perlやawkといったコマンドライン上で動くプログラムを呼び出すことができるようにしてみたのである。
しかし、そんなツールの使用例として前回紹介したのは数式処理だったり、日時処理だったり、文章整形だったり、と少しばかり一般受けしない内容だったように思う。便利ではあるのだが、何だか内容が少しばかり地味であったように思う。だから、実際「ホラホラ、このツール便利でしょう?」と周囲の人に自慢してみても、デモをして見せた相手の人達の反応がどうにも良くなかったのである。
いや、面白がる人達もいるにはいるのだが、そんな人達は間違いなくATOKを使っていなかったり、そもそもWindowsを使っていないのである。マニアックなEmacs使いの変人であったりしたのである。
だから、Windowsを使っていて、Windows上でATOKを使っている人は数式処理や文章整形にはこれぽっちも興味を示さないし、そんな内容に興味を示す人はWindowsもATOKも使っていないし、というなんともイマイチの状態だったのである。そのため、私の「他人に自慢したいココロ」はちっとも満たされず、欲求不満の毎日だったわけである。
数式処理例 | 時間処理例 | 文章整形例 | |
入力 | print sin(3)/5 | ねんがっぴ じこく | ぎょうばんごう |
変換結果 | 0.028224001611 | 2004/4/12 0:18:16 | 0001: いろはにほへと 0002: ちりぬるをわか |
そこで、Windows上でATOKを使っているライト・ユーザー(偏見たっぷり)の興味を惹くために、そして私の「他人に自慢したいココロ」を満たすために、私はAmetMultiの機能を少しばかり(だけど見た目は大幅に)変えてみたのである。ATOK等の「IMEは文字入力をするためのもの」という先入観を捨てて、ATOKから画像を入出力することができるようにしたのである。つまり、文字を入力するとその文字に応じたプログラムが起動して、文字変換結果が画像となって出力されたりするようにしてみたのである。地味な数式処理や文章整形ではなくて、ド派手な画像でデモをすることにしたわけである。
例えば、それはこんな感じだ。ワードパッド上で、私の辞書設定で「仲間由紀恵」と入力(AMET)変換すると仲間由紀恵の画像が出力されるのである。理由は簡単、私の「(ATOKではなく、AmetMultiの)辞書」には「仲間由紀恵」という単語に対して、「仲間由紀恵」の画像を出力するプログラムが登録されているからである。「仲間由紀恵」という文字が示す内容が、(機能アップされた)ATOKによってそのまま画像となって出現するわけである。
そして、もちろんそれだけではなく、その後に「美人」なんて入力して(AMET)変換すると、アララビックリ美人化された仲間由紀恵の画像が出力されるのである。「仲間由紀恵」「美人化」という文字入力結果がこれまたそのまま、ワードパッドの文章上に「画像となって出現するのである。「辞書単語登録プログラミング」の思想の凄いところは、入力した文字を表すプログラムが呼ばれ、その結果単なる辞書変換では実現できない「単語を表す適切なもの」が出現するところにあるわけだ。今回の場合は、入力したユーザーの求めに応じて「美人化された仲間由紀恵」が何の苦労もなく出現するところなのである。
もちろん、今回のモデルは仲間由紀恵なので、「美人化」するまでもなく十分美人であるわけだが、もしも「美人化」をしてもまだまだ「改良の余地有り」のお顔であるような場合は、すかさずさらに「美人化」「美人化」と連打・変換すれば良いだけなのである。画像処理プログラムを意識して使うこともなく、普通のワープロ上でそんな作業がデキルのである。(また、使う用途はほとんど無いとは思うが、「不細工」と入力し変換すれば画像の「不細工化」もできる)
この右の例ではワードパッドを使ったが、もちろんATOKを使ってさえいれば良いのである。だから、それは別にMSWORDでもExcel上でも良いわけだ。単に画像を貼り付けることができるソフトウェアでありさえすれば、何でも良いのである。
しかも、だ。もしも、画像を貼り付けることができないソフトウェア上であれば、ただこう入力すれば良いのである。「漢字アート」と。すると、アラアラ不思議、すると画像が漢字のアスキーアートとなって変換されるのだ。もちろん、アルファベットで画像を出力したければ、「アスキーアート」と入力変換すれば良いだけである。そうすれば、純粋なアルファベットからなるアスキーアートとして仲間由紀恵が出力されるわけだ。そう、文字で入力した結果が「ある時は画像」で、「またある時は文字」で、文字と画像を自由自在・縦横無尽に変換しまくることができるのである。こんな機能があれば、例えばメールに自分の顔を文字で描いた署名を付けるなんていうのも簡単に行うことができたりするのである。もちろん、その際にはその顔文字を出力するルーチンを「署名」という単語としてでも登録しておけば楽になるだろう。
ところで、ここまではAmetMultiに標準添付されている機能(仲間由紀恵画像出力機能は標準添付ではないが)でできることを眺めてみた。しかし、便利に使うことができる色んなソフトを使えば、さらにAmetMultiの使い勝手はアップする。例えば、GnuPlotの機能を使えば、数式のグラフ出力がATOKを使って行うことができるようになったり、表をコピーしてその内容を自動でグラフに描画して変換出力することができたりする。
あるいは、WinGraphVizでも使えば、これまた面白いことができる。例えば、マンガ・アニメの「名探偵コナン」の登場人物達の関係を説明する
コナンは蘭を好きなんて文章を入力した上で、その内容をクリップ・ボードにコピーしてみよう。そして、例えば「関係」だなんて入力・変換すると、その三人(コナン・蘭・新一)の関係が図になって変換出力されるわけである。これは、マンガの登場人物の例だが、例えば入力する内容を職場の人間関係や恋の悩みに置き換えてみると、色んな面白いことができるわけである。曖昧模糊とした人間関係を豹変する言葉を入力・変換すると、その曖昧模糊とした関係が見事なまでに表現された図を手に入れたりすることができるわけである。
蘭は新一を好き
コナンは新一に戻れない
GnuPlotを使った例 | WinGraphVizを使った例 | |
入力語句 | 「sin(x)*sin(y/2)」のグラフ | コナンは蘭を好き 蘭は新一を好き コナンは新一に戻れない (上の文字を入力コピー後)関係 |
変換結果 |
AmetMutiやその他のツールによりパワーアップされたATOKを使えば、適当に入力した文字(数式)の内容が表現された様々な形の結果を得ることができる。「辞書単語プログラミング」により、文章の内容を「それを表現する適切な文字」のみならず「それを表現する適切な画像」に変換したりすることもできるようになったのである。「辞書単語登録プログラミング」の新たな世界を勝手に作ってみたわけなのである。
で、当然私は「他人に自慢したいココロ」を満たすために、周りの人に上のようなデモを色々としてみた。この面白一発芸風のデモを見せれば、必ずや「辞書単語登録プログラミングの面白さ」が伝わるに違いない、と信じてデモをしてみたわけである。前回の数式処理・時間処理・文章整形なんかのデモと違って、派手で面白さも伝わるに違いない、と考えて必死にデモをしてみたわけである。
しかし、結果は散々なものだった。「へぇ~、面白いね~、その漢字アートってぇ」 とか、「そー、そー、こんな人間関係とか、恋の悩みってあるよねー」「これって使えるかもー」という風に今度はそのサンプル・アプリケーションにばかり聴衆の興味は集中して、誰も「辞書単語登録プログラミング」に興味はこれっぽっちも持ってはくれなかったのである。誰も「辞書単語登録プログラミング」なんて言葉を口にすることもなく、私の「他人に自慢したいココロ」はやはり満たされぬままに終わってしまったのである。「辞書単語登録プログラミング」の新たな世界を開くハズが、単なる面白一発芸で終わってしまったのである。Windows上でATOKを使っているライト・ユーザー(偏見たっぷり)のココロを掴むのは実に難しいのである。
しかし、である。私はあきらめない。「辞書単語登録プログラミング」動画表示編(アスキーアートでパラパラ動画)や、「辞書単語登録プログラミング」エミュレータ編(ATOKからMS-IMEを使ってみよう編)など、できる限りの力を尽くし世間の役に立ちまくりのアプリケーションを作ることで、「辞書単語登録プログラミング」の可能性を広めていきたいと誓うのである(大ウソ)。一回作ったからには、放置プレイにしたりはしないと誓うのである(100%の確率で大ウソ)。