y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

VBScriptとJScriptが混在したASP

簡易形態素解析(オリジナルはここ)のJavascriptを、サーバサイドで使いたかったという理由で、Javascriptをサーバサイドで実行して、同じくサーバサイドのVBScriptと値をやり取りする”邪道な”やり方を試している。
クライアント処理が非常に高速だったので、あれはあれで満足していたのだが、バッチ処理的に大量のテキストを処理する場合には、HTTPのPOSTでは辛すぎる。

できればサーバサイドスクリプトをどちらかに統一したいところだが、VBScriptで統一する場合は、配列をソートしたり、連想配列を扱う、正規表現オブジェクトの扱いなど大幅に書き換えで面倒くさいから。JScriptのサーバサイド実行が出来るなら、Javascriptのソースを触るだけでOKじゃないかと。
・・でサーバオブジェクトとのやり取りや、VBScriptからJScriptの呼び出しなんかを、しばらくトライしていたのだが。あっさりと出来ることがわかった。イカす!

■本日のお勉強結果
・JScipt、VBScriptで定義した変数は、そのままの名前でアクセスできる。
VBScriptからJScriptを呼ぶ場合、関数名()で呼ぶ
VBScriptみたいに()を省略してはいけない
JScript内で<%=変数%>という書き方をしてはいけない。

■今さらながらの気づき
Javascriptで作られた(特に文字列や配列を操作する)プログラムを、サーバサイドのJScriptで動作させるのにASPは便利。

■とりあえずアイディア
<区切り単位の指定>
textareaに貼り付けられたテキストを、区切り文字単位で行と見なし、これを形態素解析の処理単位とした。区切り文字として、改行(vbcrlf)、ダブル改行(vbcrlfを2つ)、カンマ、タブを選択可能とし、CSV形式のテキストをtextareaに貼り付けたとき、1行単位や列単位で処理をする。
xmlフォーマットの区切りを認識できるよう、任意の文字列を区切り単位とするのも良いかもしれない。
<VBS版>
既定フォルダ配下のテキストファイルを次々に読み込んでバッチ処理するための、VBS版を作ろうと思う。
DB接続やディレクトリ情報を設定ファイルとして、VBSをバイナリ化しちゃおう。
この形なら、スケジュールで差分だけを読み込んで、次々に単語登録できるぞー。
<HTTP版>
RSS形式や、任意のWebサイトをクロールして、単語登録するのも渋い。
巡回してHTMLやRSSをローカルファイル保存するのでもOK。

※単語ネットワーク作成の自動化に向けて弾みがついてきた。

■ここまではできた(2006/11/22)
VBScriptJScriptが混在したASPで、サーバーサイドの簡易形態素解析&DB保存処理(改行、カンマ、二重改行など任意のデリミタ文字指定)
デリミタを指定し、単語群の区切りを認識させられるようにした。
これは、CSV形式や、blog記事のダンプテキストなどのレコード単位で、単語間のつながりを持たせるため。従来は、一度にPOSTする文章を全部、シリアルな文字列として単語分割し、隣り合う単語同士を繋いでいたため、あまり正確なワードネットワークにならなかった。
また、長文のテキストを登録する際、すべての単語→すべての順ノード→すべての逆ノードとDB登録していたため、途中で登録がエラーになった場合に(どこまで登録が完了したのか分からず)えらいことになっていたが、1レコード分の単語レコード登録→1レコード分の順ノード→1レコード分の逆ノード・・・・以下ループというように、小刻みに登録を繰り返すことで、途中で止まった場合でもひどいことにならないように修正。


※一括登録に対応したということ。