2005年04月26日

[底]なんちゃってハック2号

 以前書いた漢字比率の話ですが、測定するスクリプトをJava Scriptで組んだので、前回同様こちらで公開します。
 .jsファイルになってますので、右クリックでダウンロードし、ファイル上の使用例を参考に、フォームを通してお使い下さい。見本は時間のあるときに作りますので、少々お待ち下さい。

 今回は文字列に対する処理なので、最初はPerlでやろうかと考えたんですが、文字コードを数値として計算する方法がいまいちよくわからなかったので、結局JavaScriptになりました。

 仕組みは非常に簡単ですが、これの仕組みを理解するためには文字コードというものについて説明する必要があるかと思います。パソコン内部では文字は1バイトもしくは2バイトの数値で表されています。しかし、日本語を表示するコード表は実は結構たくさんあり、それぞれ数値が違っています。例えば「あ」という文字はJISコードでは2422、Shift_JISでは82A0、今回のスクリプトで使っているUTF-16では3042という数字で表されます。
 これ以上細かい話はこちら辺りを読んでみて下さい。時間があればここでも文字コードについて与太話をぶちますが。
 ちなみに、ここで出した4桁の数字は全て10進法ではなく16進法です。なのでJISの2422は僕らが普段使っている10進法で表すと9250になります。

 さて、では本体を見てみましょう。実はこのスクリプトはこちらの「JavaScriptで数値文字参照を求める」というページに公開されているスクリプトをスタートにしています。
 まずはテキストボックスに書かれた文字列を取得し、1文字ずつcharCodeAt()という関数でUTF-16という文字コードの数値(10進数)に変換します。ここまでが上記のスクリプトです。
 で、本来はこれを&#と;で挟んで出力するんですが、僕の書いたスクリプトではここは使わず、「文字コードの数値が19967から64046までであるかどうか」を調べます。この範囲はUTF-16の0x4E01〜0xFA2Dに相当し、漢字は全てこの範囲内に収まっています。
 で、漢字の数を数える変数を作っておいて、もしこの範囲に相当するならそこに1を加えるようにします。そうすると、漢字の数がわかります。一応スクリプト内では非漢字の数もカウントしていますが、結果の表示には使ってません。
 で、最後に漢字の数を文字列全体の数で割って、漢字の比率を求めています。小数点以下があまりに多くなると見苦しいので、ついでに小数第2位を四捨五入しています。

 で、漢字比率の記事を試しにやってみたところ、漢字比率22.9%という結果が出ました。おー、読みやすいじゃん。と思ってはいけないんですね。実はこのスクリプト、まだ欠陥があります。
 本来改行や空白は1文字として数えるべきではないんですが、このスクリプトでは数えてしまっています。それも改行は何故か2文字としてカウントしているので、実際の比率よりずっと低く抑えられてしまっているんですね。ここを修正しないと。

 修正したらまた別記事で書きますので、今使ってみたい方はその辺をご承知の上、お使い下さい。
posted by alohz at 00:07| バンコク ☁| Comment(0) | TrackBack(0) | com/net | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。