hirax.net::Keywords::「スクリプト」のブログ



2004-04-12[n年前へ]

ようこそ「辞書単語登録プログラミング」の世界へ 

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-13[n年前へ]

ATOKでperlだけじゃなくて、rubyやawk(その他大勢)を使ってみよう! 

 ようこそ「辞書単語登録プログラミング」の世界へATOKでperlスクリプトを使うことのできるソフトウェアを作ってみたわけです。すると、お笑いパソコン日誌のchicさんに

だったら awk版も欲しいとかいいだしたり(いまのマシンは充分に速いので、awkでも勝負になる)Ruby がとか、sed がといった声も出たりして。がはは。
なんて書かれていたわけです。awk使いのATOKユーザーなんてこの世界に実在しているとはとても思えません。rubyユーザーでATOK使いだって、そんなにいそうにありません。いや、そもそもperl使いのATOK & Windowsユーザーだって、何人もいるとは思えないわけです。ですから、そんな「声」が出るとは思えません。

 が、chicさんの「ひとこと」で気が変わったので、作りました。「chicさんのためだけに」ATOKでrubyでもawkでもperlでもなんでもござれのバージョンを作ってみました。というわけで、ATOKでrubyでもawkでもperlでも何でも使い放題です。ハイ。

 さぁ、あなたがruby使いなら、ATOK上でprint Math.cos(0)とでもタイプしてみましょうか、いやそれどころかそれどころか…(次の項目に続く)。

れっつ! 日本語(ひらがな)プログラミング(ATOKで…) 

 というわけで、ATOKでrubyでもawkでもperlでもなんでも使うことができるソフトウェアを作ってみたわけです。しかも、今度のバージョンはCONFIG.TXTに自分で定義した関数や置換ルールを決めておくことができるわけです(結局どちらもただの「辞書登録と同じ」置換ルールに過ぎませんが)。これで、ATOKの辞書登録は64文字までよルールに縛られずに済むわけです。「にちじ(日時)」でも「じこく(時刻)」でも何でもやり放題です。

 で、このバージョンでは、そのCONFIG.TXTの定義次第で一見ヘンに見える色んなことができます。例えばCONFIG.TXTの作り方次第では

「0」のこさいんをしゅつりょく
なんて入力して変換すると
perl -e "$param=0;$param=cos($param);print $param;"
が実行されて、"1"という計算結果が表示されたり、
「でんたく」をきどう
を入力・変換すると電卓が起動したり、
「かいぎょう」のかずをしゅつりょく
をAMET変換すると、クリップボードに保存されている内容中に改行コードが何回出てくるかを出力したり、なんてことも簡単にできるわけです。もちろん、大阪弁や津軽弁のルールを決めておいて、お国言葉でプログラミングをしてみるのももちろんアリに違いありません。

 というわけで、「レッツ!日本語(ひらがな)プログラミング」です。ATOKユーザーで何かのスクリプト言語や一般的なプログラミング言語を使う方なら、このソフトをインストールして、ぜひぜひCONFIG.TXTをテキトーに仕立ててみましょう。懐かしの「ぴゅう太日本語ベーシック」顔負けの、あなただけの「ひらがなプログラミング言語」を作ってみるのも面白いかも。えっ?全然面白くない…ですか?

2004-04-16[n年前へ]

画像入出力にも対応の「ATOK Perlプラグイン(ruby,awk,その他大勢)」 

 ATOKからperlを始めruby, awkなど色んなスクリプトやコマンドを実行できる、Amet Perlを少し手直ししました。変更点は「インストール時の動きの手直し」と「文字だけでなく画像にも対応した」ことです。「文字だけでなく画像にも対応した」サンプルとして、参考までに「漢字アート(アスキーアート)化」と「美人フィルタ」のコマンド・プログラムとそれを呼ぶスクリプトを付けておきました。perlやスクリプトを使うつもりがない方も、このサンプルソフトだけでも結構遊べるのではないか、とも思います。

 使い方は、例えばクリップボードに画像がコピーされている状態で、エディターで「かんじあーと」なんて入力しAMET変換するとなんど(漢字の)アスキーアートが出力されます。ということは、メールに「漢字アート」の「誰かの顔」を貼り付けるなんて言うことも超簡単です。何かのプログラムを(意識して)操作したりする必要はありません。

ワードパッドで作業中 あるいは、クリップボードに誰かの顔画像がコピーされている状態で、ノートパッドなどで「びじん」と入力してAMET変換してみましょう。ハイ、そうです、その人の顔がもう少し美人になった結果が画像でちゃんと貼り付けられます。それでも足りなければ、もう一回「びじん」と入力してAMET変換してみましょう。ハイ、そうです、もう一段「美人化」されて画像で貼り付けられます。必要な分だけ何段階でも、「美人化」させてみましょうか。えっ?失礼ですか…。

 そう、もう画像処理だってATOKからできるわけです。どんなソフトを使っていても(画像貼り付けができさえすれば)できるわけです。もし、画像貼り付けができないソフトであれば、さらに「漢字アート化」してしまえば良いのです。いや、そこまで行くと、「できるかな?」的だとは思うのですがちょっとヘンかもしれないですね。

 ここに貼り付けた画像はワードパッドで作業中の様子です。データ加工のためにソフトを切り替えたりはしていません。ただただATOKからの普通の入力だけで、画像を取得したり、その画像に画像処理をして結果を貼り付けたり、それを「漢字アート」にしたり、それをさらに文字整形して出力したり…、なんていうことが簡単にできるわけです。 …えっ?「仲間由紀恵」の画像をどうやって貼り付けたかって言うんですか?それは、私のAmetPerlには「なかまゆきえ」というコマンドが登録されていて、ちゃんと仲間由紀恵の画像を返してくれるんですよ。ね、便利でしょう?えっ、どうでもいいでしょうか、そんなことは?

 という具合に、これからは、GnuPlotやGraphVizの出力だって、ATOKからソフトに簡単に貼り付けることがWindowsのほとんどのソフト上でできます。ATOK(とAmetPerl)を使ってさえいれば、どんなソフトウェア上でも、どんなテキストや画像でも自由に取り扱うことができます。と、書いても使い方が少しイメージしづらいかもしれませんから、使い方などは少しづつ書いていくことにしましょうか。もちろん、奇特にも使ってみたくて、「こんな風に使いたい」なんていう面白い希望があればもちろん「言ってみるが吉」です。

2004-05-07[n年前へ]

祝!初のライトユーザー応募 編 

 Ametumultiのライトユーザー募集をしてみても…。ATOKユーザー自体が少ないのか、Windows上でATOKを使っていてEmacsなんて使わないライト・ユーザだけどスクリプト言語を使いたい人なんてそもそも存在しない(可能性高し)のか、と悩む今日この頃です。

 しかし、初のライトユーザー応募がありました。私の中の「オレ定義」ではWindows上でATOKを使っているライト・ユーザがRubyを使ったりはしないような気がするのですが、何はともあれありがたいことです。いや、そもそも不親切の作りっぱなし放置プレイばかりの私ですが、よろしくお願いいたします。

> Windows上でATOKを使っているライト・ユーザです。> 「ATOKを使ってて、ATOKから便利ソフトを使ってみたい> 初心者(ライトユーザ)さん」を募集、> の成り行きを興味深く見ていたのですが、誰も名乗りを上げないようなので、> 私で良ければ、ぜひとも手も足もリードして頂きたく思います。私の中の「オレ定義」ではWindows上でATOKを使っているライト・ユーザがRubyを使ったりはしないような気がする(それをいったら一体どんな人が使うというのか…)のですが、ぜひよろしくお願いいたします。むしろ逆にリードして頂きたいです。> AmetMultiへの希望です。> 1. UseCtrlCが欲しい。> 2. 変数に値を渡す方法が改良されて欲しい。> 3. 「こんな風に使いたい」> 1. UseCtrlCが欲しい。> コピー機能があると便利だと思います。> http://opal.s8.xrea.com/tmp/linenum.swf.html> を見て頂けるでしょうか。以下の流れになっています。> 1. 加工したい箇所を選択> 2. Ctrl-Cで選択範囲をクリップボードにコピー> 3. "linenum"入力> 4. Ctrl-9で、設定したAmetMultiを呼び出す> 5. 選択範囲が、AmetMultiの出力に置き換わる> この2の操作を、4に入れられたら楽だ、> 次のように書きたい、ということなのです。> linenum> UseCtrlC;while gets;printf %Q(%2d:%s),$.,$_;end;UseCtrlV> #IME入力前の動作はAmetの範囲外ですかね? うぅ、それは普通に考えるとATOKの範囲外でしょうが、上手い抜け道はないものでしょうかねぇ…。> 2. 変数に値を渡す方法が改良されて欲しい。> +> $param=%Q(> > );while gets;print %Q(#{$param}#{$_});end;UseCtrlV -< $param=%Q(> >> );while gets;print $_.sub(/^#{$param}/,'');end;UseCtrlV> と、ruby用CONFIG.TXTにコメントイン・アウトを書きました。> 今は+と-<>でイン・アウトを設定していますが、> +と-で書ければすっきりします。どうも、> -> $param=%Q(> > );while gets;print $_.sub(/^#{$param}/,'');end;UseCtrlV> と書くと、+のが先にひっかかってしまうようですね。確かに今は単なる置換ルールでやってますから、現状ではそういう動作になってしまいますね。AtokMulti自身の「辞書ファイル(CONFIG.TXT)」をどう変えようかは結構(いえホントはたまに)思案しているところです。CONFIG.TXTによる単純置換でなくて、1. ATOKから受け取った内容をRubyなりPerlなりで処理する2. さらにその内容をスクリプトとして処理するなんていう風にしてみましょうか。これなら、私には手抜きで楽そうですから。とはいえ、これまた魔の巣窟になるでしょうし…。> 3. 「こんな風に使いたい」> googleイメージ検索と連携しましょう。> 一枚だけでなく、何枚も取得できればなお楽しです。これはぜひやってみたいですよねぇ。複数画像の貼り付け方をちょっと考えてみます。実は「一発芸編」の時にデモ用のアプリとして、一枚だけ画像をGoogleから入手するアプリはGuruguru Imagehttp://hirax.net/dekirukana5/googleimage/index.htmlをテキトーに変えて作っておいたのです。ただ、話が散漫になりそうだったので、話の中では触れませんでした。とりあえずそれを添付させておきましょうか。



■Powered by yagm.net