webalizerの検索語の日本語対応の話

Webalizerはapacheのログを解析して、見やすいレポートを作ってくれるツールである。

RedhatLinuxのパッケージの一つにもなっており、 インストールするだけで、一日一回レポートを更新してくれる(※)。

このWebalizerは結構良くできているソフトウェアなのだが、 一ヶ所だけ私にとって困ったことがある。 それは、どの様な語句で検索して、そのサイトにやって来たのかを表示する欄が 日本語に対応しておらず、文字化けして読めなくなってしまうことである。 このままだと、どんなことに興味を持って人がこのサイトを訪れたのか、 分からなくなってしまう。

このサイトの場合日本語ばっかりなので、 訪れる人も当然日本語で検索してくる。 ロシア語や中国語ではない。 にもかかわらず文字化けする原因は、日本語コードの錯綜にある。 ある人はEUC-JPで、ある人はUTF8で、またある人はShift_JISと、 別々の漢字コードで検索するが、Webalizerはそれらを区別無く、 バイト列として並べてしまうのである。 すると、ブラウザの自動判別でもなんだか分からない文字が並んでしまうこととなる。

そこで、とりあえず日本語の検索文字列にだけ対応していれば良いと考え、 EUC-JPに統一するようにすることにした。 (ページの項目名等が英語なのは、読めない方が悪いということにしておく)。 apacheのエスケープする"\x16進数"もデコードし、 漢字コード(utf-8, sjis, euc-jpのどれかのみ)を推定して EUC-JPに変換するパッチを作り、 これを含めたパッケージ (こっちはソース) を作成した。

古いやつはこっち。

Vine用(srpm, i386)も作ってみた。 Vine用はもともと検索語以外の部分が日本語化されているので、 より日本語部分が増える。 自分でbuildするときは、あらかじめgd-devel, libpng-devel, freetype-develを入れておくこと。 apache2を使うときには、webalizer.conf内の 出力ディレクトリ(OutputDir)の変更を忘れずに。

調べているのなら分かると思うが、既にいろいろな人が別なアプローチで同じようなことをやっている。 多分良くできているのは、 ログ中のコードを統一するプリプロセスをするプログラムを走らせてから、 Webalizerに掛けるタイプだと思う。 しかし、このプログラムの方はパッケージを入れ替えるだけでOKで、 オリジナルのパッケージと設定ファイルを変えていないため、 元にも戻しやすいという点でメリットがある。

これから

全角半角変換をしないと結構カウントが分散してしまう。 C言語に閉じようとすると、 えっちらおっちらテーブル作るしかないのだろうか?

今はEUC-JPにしてあるが、UTF-8に統一するようにして、 もう少しましな多言語対応をした方が良いのだろうと思う。


※ただし、

webazolver

と一回実行しておかないと、ログにエラーが出てうっとうしい。
また、/etc/webalizer.confで、

SearchEngine    google.co.jp    q=
SearchEngine    yahoo.co.jp     p=
SearchEngine    search.biglobe.ne.jp    q=
SearchEngine    infoseek.co.jp  qt=
SearchEngine    search.nifty.com        Text=
SearchEngine    goo.ne.jp       MT=
SearchEngine    excite.co.jp    search=

を入れておかないとかなりの数の検索を見逃すことになる。

追記

Googleのイメージ検索の語がURLエンコード されたままであることに気が付いた(2006/1)

しかしそうではない。もともと(webalizerの素の処理の中では)取り出すべくもない 2重にエンコードされた検索語が、 webalizerのバグと言っても良い処理によって、 たまたま(1重だけデコードされて)取り出されてしまったというものなのである。

アドホックな解決法(プログラム修正)ならいくつか思いつくが、 副作用が出る可能性が高いのと、 何より時間が足りないのでしばらく放っておくことにする。

ログの行としては以下の形。「prev=」以降に問題の部分が存在する。

http://images.google.co.jp/imgres?imgurl=http://tyche.pu-toyama.ac.jp/activity/2003/sotsugyo/p-ko01o.jpg&imgrefurl=http://tyche.pu-toyama.ac.jp/activity/2003/sotsugyo/&h=1200&w=1600&sz=1144&tbnid=HBn9IzTJ_6AJ:&tbnh=112&tbnw=150&hl=ja&start=10&prev=/images%3Fq%3D%25E5%258D%2592%25E6%25A5%25AD%25E5%25BC%258F%26imgsz%3Dxxlarge%26svnum%3D10%26hl%3Dja%26lr%3D

webalizer-2.20-01用(2008/11)

長らく更新の滞っていたwebalizerが更新されていた。 それにパッチを合うようにして少し直してみたものをここに置いておく。 (少し文句は言われるが2.21-02でもパッチはあたるはず)

webalizer-2.20-1用パッチ

現在検索語はほとんどUTF-8なのであんまり判定は要らないのだが、 それでもたまにEUC-JPとかあるので、判定しないとやっぱり混ざる。 それと、区切りに全角スペースを使う人が結構居るので、 それを半角スペースに変換しておきたいところだが、放置する。 2重エンコードもやっぱり放置。