[PR]100~I:I
各種 SKK サーバの紹介
とりあえず試した事のある物
- dbskkd-cdb (1.01)
-
- tcpserver から起動。
- cdb-0.55 を使用。
- ログは syslog に。
高速なサーバです。
辞書の再読み込みパッチが Momonga Linux の
SVN リポジトリ
から入手できます。
- dbskkd-cdb (1.71dev)
-
- tcpserver から起動。
- cdb-0.75 を使用。
- ログは標準エラー出力に。
たぶん最速なサーバです。ただ、いくらかとっつきにくいかな。
- multiskkserv
-
- スタンドアロンで起動。
- cdb-0.75 を使用。
- 複数の辞書を検索できる。
- ログは標準エラー出力に。
導入はとても簡単です。
自動で detach しないので、起動時は & を指定しましょう。
- skksearch
-
- tcpserver から起動。
- 辞書の形式は Berkeley DB 2.x, CDB(0.55), plain(無加工)。
- 複数の辞書を検索できる。
- ログは syslog 又は指定したファイルに。
公式配布元が消えてますが、debian のパッケージあたりから取り出してください。
plain の形式で使用する際は、木原さんによる patch を適用しましょう。
- rskkserv
-
- スタンドアロンで起動。
- Ruby で書かれている。
- 辞書の形式は CDB と plain(無加工)。
- 複数の辞書を検索できる。
- EPWING 辞書(広辞苑 etc.)を利用できる。(RubyEB が必要)
- 他の SKK サーバをバックエンドに出来る。
- ログは所定のファイルに。
EPWING 辞書を複数指定するとずいぶん速度が落ちますが、
通常利用なら全然問題ないレベルです。
skk-lookup が使えない環境に。
EB の機能ですが、「とらのい*」→「虎の威を借る狐」のような変換ができます。(skk-lookup でもか?)
他のサーバを利用できるのは大きな強みです。
Ruby の初歩(?)が分かれば独自に検索機能を拡張するのも簡単です。
- oskkd
-
- スタンドアロンで起動。
- cdb-0.75 を使用。
- 辞書の再読み込みが出来る。
- ログは標準エラー出力に。
dbskkd-cdb と比べても遜色無い速度です。
クライアントとの接続を維持したまま辞書の更新が出来るので、辞書を最新に保ちたい人に。
- scskkd
-
- スタンドアロンで起動。(tcpserver からの起動も選べる)
- IPv4, IPv6, UNIX domain socket に対応。
- Gauche で書かれている。
- 辞書の形式としては GDBM, NDBM, DBM, CDB 等。
- 複数の辞書を検索できる。
- 辞書の再読み込みが出来る。
- ログは標準エラー出力に。
CDB のライブラリには djb のもの(0.75)か TinyCDB が利用できるようです。
どちらにせよ、mmap を使っています。
クライアントとの接続を維持したまま辞書の更新が出来るので、辞書を最新に保ちたい人に。
- fskkserv
-
- tcpserver から起動。
- Objective Caml で書かれている。
- 素の SKK 辞書の他に索引ファイルを用いる。
- ログは吐かないみたい。
SKK 辞書の特徴に注目して作成された、かなり実験的なサーバです。
使用メモリが多め、且つ 1クライアント毎に 1プロセス立ち上がるので、実用には苦しいかも?
折角なので、附属ドキュメントやソースも是非読んでみてください。
- skkserv2
-
- スタンドアロンで起動。
- 素の SKK 辞書を用いる。
- 複数の辞書を検索できる。
- 辞書が更新されたら自動で再読み込みする。
- 見出しを接頭辞、接尾辞に分解して検索する機能あり。
- ログは標準エラー出力に。
変換対象の見出しが辞書になかった時は見出しを二分して検索し、その結果をマージしたものを返すようです。
ML の [skk 5301] のスレッドも参考にしてください。
合成したエントリに対してはアノテーションを付加できます。「ノイズ」の可能性がある候補の区別に役立てると良いでしょう。
20040304版の時点では、まだまだ実験的な印象。
コンパイルには gcc 3.x が必要みたい。
- gtskkserv
-
- スタンドアロンで起動。(tcpserver からの起動も選べる)
- gettext を利用。
- 辞書はメッセージオブジェクト (.mo) 形式。
- ログは syslog に。
gettext を用いてるのがなんともぁゃιぃですが、かなり高速です。
辞書を更新したら再起動必須のようです。(環境によるかも)
- yaskkserv
-
- スタンドアロンで起動。
- 独自形式辞書を用いる。
- 「ひらがなエンコード」によって見出しを変換する。(大抵の辞書では元々よりサイズが小さくなる)
- 複数のエントリをブロックという単位で管理し、これらをアラインメントできる。
- インデックスデータをメモリに保持しておけば、検索でのディスクアクセスは一度のみ。
- 複数の辞書を検索できる。
- 辞書の(自動)再読み込みが出来る。
- server completion に対応。
- ログは標準エラー出力(と指定ファイル?)に。
Unix 系で server completion に対応した数少ないサーバです。
辞書作成時のオプションにもよりますが、まずまず高速です。
- regex-skkserv
-
- スタンドアロンで起動。
- Ruby で書かれている。
- ruby-cdb が必要。
- 複数の辞書を検索できる。
- 辞書の再読み込みが出来る。
- server completion に対応。
- 独自拡張で正規表現検索が可能。
- 送り位置の指定が正しくない送り有り変換が可能。(.skk-jisyo がゴミだらけにならないよう気を付けて下さい)
- 大文字小文字の区別や記号の有無に loose な abbrev 変換が可能。
- ログは吐かない。
作者が好き勝手に作成してる、かなりぁゃιぃサーバです。
ruby-cdb は cdb-0.75 を利用。
素の ruby-cdb 利用時、ckskkserv 等で大量の見出しを流し込むと見事に太ります。(mmap の使用を止める事で解消可能)
正規表現検索する為には、いろいろ準備が必要です。SKK 初心者には困難。
(ほとんど)試してない物からピックアップ
- wceSKKSERV
-
- Windows 9x/2000/NT/XP/CE 用。
- 複数の辞書を検索できる。
- server completion に対応。
- wskkserv
-
- Windows 用。
- server completion に対応。
- prime
-
- Ruby で書かれており、いろいろライブラリも必要。
- -skk オプションを指定して起動する事により、SKK プロトコルに対応。
- 「送り有り変換」には未対応。
Ver 0.8.1 の時点で試した印象です。
prime だけあって、「〜する」のような変換も扱えます。
「送り有り変換」には、要望さえあれば対応するらしい。
# skk-lookup-search などを参考にクライアント側で補完すればいいけど。
辞書は独自の物を使いますが、SKK の辞書もベースになっているようです。
- mecab-skkserv
-
- tcpserver から起動。
- MeCab を利用しており、「単語単位」ではなく「文単位」での変換が可能。
- 「送り有り変換」には非対応。
辞書には ipadic を変換したものを利用。
2005/03時点では約 70Mbyte らしい。将来的にはコンパクトになるそうだ。
全ての変換結果を個人辞書に取り込んでしまう事のないよう、.skk などで工夫したほうがいいでしょう。
rskkserv 経由で使うのがベターでしょうか。
SKK との相性については少し疑問ですが、新しい何かへのキッカケになるやもしれず。
メモ
- 2005/03時点で L 辞書の最長エントリである「こう」は 2286バイトありますが、
バッファサイズが足りていないサーバが結構あります。適宜大きくしてビルドし直しましょう。
# 大抵の場合、1024か 2048という値になっています。
cdb 形式への変換に multiskkserv 附属の skkdic-p2cdb を利用していて、異様に長いエントリを含む辞書を扱いたければ、
multiskkserv.h の SKKSERV_RESULT_SIZE (デフォルトは 4096) を変更する必要があります。
- server completion とは比較的最近提案された機能です。
- 「tcpserver から起動」と表記されてるものは、必ずしも tcpserver である必要はなく、inetd 等で大丈夫な物も多いです。
因みに tcpserver は PROTO, TCPLOCALHOST, TCPLOCALIP, TCPLOCALPORT, TCPREMOTEHOST, TCPREMOTEIP, TCPREMOTEPORT あたりの環境変数を設定します。
- tcpserver から起動するものは、1クライアント毎に サーバが 1プロセス立ち上がります。
細かな接続制御は出来ますが、メモリを喰うサーバの場合デメリットもある事に注意。
スタンドアロンなサーバにも、rskkserv や gtskkserv のように TCP Wrapper を利用できるものがあります。
- 辞書再読み込み機能は、最近 CVS で活発にアップデートされてる辞書の成果を反映したいなら重要でしょう。
特に DDSKK 以外のクライアントも利用してる場合には。
- 複数辞書検索機能の有難味は、辞書を予めマージする必要があるかないか程度の違いしかないかも。
因みに regex-skkserv はクライアントから検索対象辞書を変更できます。(変態的です)
- CDB のバージョンについて。(詳しくないので個人的な経験則より)
- 0.55
- 特にプロセスが太る事はない。
- 0.75
- デフォルトでは mmap を使い、辞書に対応するキーが有ろうと無かろうと、新規キーを検索する毎に太る? 0.55 より少し速い。
mmap を使わなければ 0.55 と同等か?
- 速度について。
基本的にどのサーバも遅いと感じる事はないでしょう。(regex-skkserv の正規表現検索機能を除く)
C で書かれた物をいくつか比較するならば、検索所要時間の比はだいたい
dbskkd-cdb(1.01, 1.71dev), oskkd : gtskkserv : skksearch(with cdb) : multiskkserv = 3 : 4 : 6 : 12
これぐらいです。
Ruby や Gauche で書かれたものだと幾分遅いですが、
CPU 1.1GHz な環境で rskkserv で L, JIS2, edict, geo, 広辞苑(EPWING), mypedia(EPWING), wdic(EPWING)を対象としても
毎秒 140回ぐらい検索できます。
DDSKK では、変数 skk-look-recursive-search を non-nil にしていると、
「abstr*」のような曖昧な変換時に大量の検索をします。やはり最低限の速度は必要か。
同種のページへのリンク
戻る