FC2ブログ
2013/04/06

anthy-utをハッシュ関数で高速化する!

[[G-HAL氏制作の新しいanthy-ghalなら、まわりくどいことは要らないみたいです。]]

Linuxには大層な漢字変換ソフトはないんです。オープンソースで辞書を拡張したり手入れするのは大変。
でも、mozcとanthy-utなら、軽く使う分には問題なし。

うちのCeleron 650MHz PC133 256MBの動態保存パソコン、
mozcはメモリ上を60MBぐらい使うから、こんなパソコンでは動かない。
古いパソコンで、anthy-utを使うと、変換速度が遅くなってしまう。目に見えて。
で、変換が数秒もかかる。

しかし、設定を変えて再コンパイルすれば、うまくいくかも。

anthy-ut、anthy-GHALではFreeBSD、OpenBSDの標準ライブラリについてくるハッシュアルゴリズムを使うようになっています。
BSD以外では使えませんが、
OpenSSLのlibcrypto.soならいろんなUNIXに入っているはずです。ここにはハッシュ関数も入っています。
で、ハッシュを使っているのはソースコードのsrc-diclib/のなので、
Linuxでもlibcrypto.soを使えば辞書を引くのが早くなるかも。

configure.acを直します。


- AC_CHECK_HEADERS([md2.h md4.h md5.h ripemd.h sha.h sha256.h]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_HEADERS([md2.h md4.h openssl/md5.h ripemd.h openssl/sha.h sha256.h]) dnl Hash library (FreeBSD Only)

AC_CHECK_LIB([m], [log10]) dnl math library
AC_CHECK_LIB([md], [MD2Init]) dnl Hash library (FreeBSD Only)
AC_CHECK_LIB([md], [MD4Init]) dnl Hash library (FreeBSD Only)
- AC_CHECK_LIB([md], [MD5Init]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_LIB([crypto], [MD5Init]) dnl Hash library (FreeBSD Only)
AC_CHECK_LIB([md], [RIPEMD160_Init]) dnl Hash library (FreeBSD Only)
AC_CHECK_LIB([md], [SHA_Init]) dnl Hash library (FreeBSD Only)
- AC_CHECK_LIB([md], [SHA1_Init]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_LIB([crypto], [SHA1_Init]) dnl Hash library (FreeBSD Only)
- AC_CHECK_LIB([md], [SHA256_Init]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_LIB([crypto], [SHA256_Init]) dnl Hash library (FreeBSD Only)



src-diclib/anthy-hash.hを直します。



# if !defined(HAVE_MD5INIT)
# error "You have no MD5Init()."
# endif
# if defined(HAVE_MD5_H)
- # include
+ # include
# endif

# elif (256 == ANTHY_HASH_TYPE)
# if !defined(HAVE_SHA256_INIT)
# error "You have no SHA256_Init()."
# endif
# if defined(HAVE_SHA256_H)
# include
# endif
# if defined(HAVE_SHA2_H)
- # include
+ # include




このパッチはかなりいい加減です。
本当はconfigure.acだけ直せば上手くいくかも知れないし、
今後の拡張を考えるとなんとかDataの関数はハッシュアルゴリズムの名前の関数にして
ファイルのハッシュを取る関数は使わないようにしないと。

...で、autoupdateしてautoreconf -fiして、configureすると
なんだかMD5の方は認識されずに、SHA系を使おうとします。で、1か256か512かは分からなかった。
ビルドしてインストールしてみると?

普通に漢字変換が一瞬でできるようになっている。
長文も0.5〜2秒でできるようだ。かなりスラスラうてるようになりました。
これがハッシュの威力です。ものすごい。

...readelfでみてもSHAの関数が見えない!一体本当に何を使っているの?
スポンサーサイト

コメント

非公開コメント

No title

はじめまして、fenix.ne.jp の G-HAL と申します。

拙作パッチでのハッシュですが、手作業で適切な箇所に #define ANTHY_HASH_TYPE しないと、CRC32 を使う様になっています。
拝見しましたが仰るパッチですと CRC32 を使っている筈で、速度に変化は出ないと思いますが、なんでしょうね……(?_?)

あと、anthy-ut は更新が止まっている為、古くてバグがあります……。