# mecab-skkserv

## mecab-skkserv とは

mecab-skkserv は, 形態素解析器 MeCab を用いたシンプルな仮名漢字変換サーバです. SKK は通常,「単語単位」の変換のみをサポートしますが, mecab-skkserv では, 「文単位」の変換が可能となります.

## 目次

- 特長
- 変更点
- ダウンロード
- インストール
- 使い方
- 辞書への単語登録
- 注意事項
- TODO
- リンク

## 特長

- SKK は通常,「単語単位」の変換のみをサポートしますが, mecab-skkserv では, 「文単位」の変換が可能となります.
- 連文節を含む比較的長い入力でもそれなりに賢く変換してくれます.
- 単語連接コストや単語生起コストは, HMM に基づく確率的な推定に基づいて 与えられています.
- MeCab が出力する N-best 解 を変換候補として用いており,
  通常の SKK よりは 多くの変換候補をそれなりのランキングで提示します.
- xinetd もしくは tcpserver から起動します.

## 変更点

- version 0.03
  - mecab 0.91 対応
  - 辞書から品詞をとりのぞくこよにより, 辞書サイズを小さくした
- version 0.02
  - configure化
  - -s, -c オプションを追加
- version 0.01: initial release

## ダウンロード

- mecab-skkserv は GNU General Public License で配布されるフリーソフトウェアです.
  ただし, 同封の辞書は ipadic のライセンスです.
- mecab-skkserv-0.03.tar.gz

## インストール

- 必要なもの
  - MeCab 0.91 以上
  - xinetd もしくは tcpserver (デーモン化する際に使います)
    最近のディストリビューションでは, xinted は標準インストールされています.
- インストール

    % ./configure
    % make
    % su
    # make install

通常, 実行形式は /usr/local/bin/mecab-skkserv, 辞書は /usr/local/lib/mecab-skkserv/dic/ipadic にインストールされます.

変更したい時は configure オプションで --prefix を付けてください.

    % ./configure --prefix=/home/foo/bar

- 動作確認

    % echo "1たろうははなこがすきだ" | ./mecab-skkserv .
    1/太郎は花子が好きだ/田老は花子が好きだ/...
    %

- サーバー設定 (xinetd の場合)

  /etc/xinet.d/skkserv を以下のように設定して, xinetd を再起動してください

      service skkserv
      {
              port    = 1178
              socket_type     = stream
              wait    = no
              only_from = 127.0.0.1
              user    = nobody
              server  = /usr/local/bin/mecab-skkserv
              log_on_failure  += USERID
              disable = no
      }

      % /etc/init.d/xinetd restart

  ディストリビューションによっては, /etc/xinetd.d/dbskkd-cdb などが既にインストールされている場合があります. この時は 該当部分を書きかえてみてください.

- サーバー設定 (tcpserverの場合)

  以下のコマンドを実行します.

      % tcpserver localhost /usr/local/bin/mecab-skkserv 1178

- その他のオプション

  mecab-skkserv には以下のオプションがあります。

      mecab-skkserv [-d dictdir] [-c candidate_size] [-s search_size]

  dicdir: 辞書のあるディレクトリ (*.me dicrc があるディレクトリ)
  candidate_size: 変換候補のサイズの最大値(デフォルト 20)
  search_size: 会候補探索サイズの最大値(デフォルト 100)

  search_size を上限に解を探索し, cand_size に達したら探索をやめ, 解候補 を出力します. search_size 回探索しても cand_size に達しなかったり, それ以上 の解が見つからなかっ時は, 見つかった解のみを出力します.

  xinted だと, 上記の引数は以下のように与えます

      ..
      server = /usr/local/bin/mecab-skkserv
      server_args = -d /foo/bar/dic -s 100 -c 5
      ..

## 使い方

- mecab-skkserv に接続するように SKK クライアントの設定をします.
- SKK は通常,「単語単位」の変換のみをサポートしますが, mecab-skkserv では, 「文単位」の変換が可能となります.
- 比較的長い文をいれて SPACE を叩いてみてください. それなりの変換結果を提示してくれると思います.
- 通常の SKK と違い, 送り仮名の指定に shift を使う必要はありません.
  「楽しい」の変換は, 「tanoSii」 ではなく 「tanosii」でできます.
- 通常の SKK と同じく, SPACE で次候補に移ります.
- もはや SKK ではないような気がします. ;)

## 辞書への単語登録

dic.csv というファイルに1行1エントリとして追加します.

名詞などの活用しない語の場合は以下のようなフォーマットで登録します.

    めかぶ,670,1250,4000,和布蕪

左から

    読み,左文脈ID,右文脈ID,コスト,単語

「読み」が「単語」に変換されます. コストは, 4000点ぐらいに設定しておいて 変換候補のトップに出てこない場合は徐々に小さくしてみてください.

左文脈ID, 右文脈ID は left-id.def, right-id.def のふたつのファイルから 最も適切なものを選択します.

左文脈ID

    left-id.def
    670 名詞,一般,*,*,*,*,*

右文脈ID

    right-id.def
    1250 名詞,一般,*,*,*,*,*

精度をあまり気にしないのであればサ変名詞の ID を選択してもかまいませ ん

    % grep 名詞,サ変接続 *.def
    left-id.def:668 名詞,サ変接続
    right-id.def:1248 名詞,サ変接続

    めかぶ,668,1248,4000,名詞,和布蕪

「名詞,サ変接続」は, オールマイティーな品詞です.

単語の追加後, 辞書を再コンパイルします.

    % /usr/local/libexec/mecab-dict-index -c euc-jp

*.me ファイルを辞書のディレクトリ (/usr/local/lib/mecab-skkserv/dic/ipadic) にコピーします.

## 注意事項

- SKK クライアントは, 変換候補の順位を記録しています. あまりにも長い入力を変換し続けると, 候補保持用のメモリや辞書 (~/.skk-jisyo) が爆発するかもしれません.

## TODO

- 他のプロトコルを喋る (Canna?)

## リンク

- Ajax を使った日本語 IME 基本的に同じエンジンを使っています.
- 各種skkservの比較
- SKK Openlab