続・cannaをフォークしてみた
TRANSCRIPT
続・Cannaをフォークしてみた
はしもとまさ@東海道らぐIn KANSAI OPEN FORUM 2014
2014/11/8
自己紹介
● 東海道らぐ元名古屋案内人、ちびぎーこ保護者会所属● 某大学日本文学文化学科卒
– …という理由から、最近日本語入力の研究に目覚めました。
今回のお話。
● Cannaをフォークしてみました!
● Cannaとは・・・?
– 元はNECが作成していた日本語変換システム。
– その後、Canna Projectが開発を引き継いだ。
– …が、2004/5/20を最後にリリースされていない。
– サーバー&クライアント型。MITライセンス。
● OSC東京で前半をお話ししたので、今日はその続き。
CannaからIzumoへ
● 日本語変換システム「Izumo」– https://github.com/hashimom/Izumo– よく聞かれるのが、「なぜいずも?」
● とりあえず、Cannaを漢字にしてみよう!
余談)島根県では神無月ではなく神在月と呼ばれるらしい
● 主な変更点: 現状、特になし!(おいっ)– クライアントライブラリ、ツール群をざくっと削除してシンプルに– ビルド方法を変更(完了)– 辞書ファイルの見直し ←失敗中!
● uim-canna が利用できることを確認しています
Canna で使っている imake
● 「xmkmf」ってコマンドを叩くと、Imakefileの記述から、Makefileを作成します。
● X Window SystemのX11R6.9(2005年)まではimakeを利用してビルドされていました。– なので、imakeのことを調べるとそっち系のものばかり引っかかります。
● 例) Cannaのビルド方法:
$ xmkmf$ make canna
imakeの欠点
「解説書:非常に広く使用されているツールとしては、imakeはいまだに異常なほど文章化されていません。
(中略)
多くのプログラマがimakeのさまざまな部分と取り組んできましたが、X Windowシステムの配布のために用意している風変わりな機能から汎用的な部分を抜き出してツールとして分割することは誰もできませんでした。」
オライリー「make 改訂版」(2005年)より
いろいろダメぽい・・・^^;
Cannaのディレクトリ構造
server
(ROOT) lib
canna
cmd
dic
misc
include
※各ディレクトリにImakefileが存在します。
makeすると作成される!各ディレクトリ内にある
ヘッダファイルのシンボリックリンクがmake実行時に「include」内に貼られる。
(ROOT) にあるCanna.confの内容とImakefileの記述から
Cannaconf.hを作成して、include内に置かれる
共通ヘッダファイル置き場
Canna停止や辞書作成時に使用するコマンド群
注:コマンド毎にディレクトリは別
Cannaサーバー
クライアントやサーバーが使用するライブラリ群
辞書
設定ファイル等
Izumo では
これをまるっと Cmake に置き換えます!
Cmakeでのビルド方法:$ mkdir build && cd build$ cmake ..$ make$ sudo make install
現在のIzumoのディレクトリ構成
server
(ROOT) lib
include
dic
(ROOT) 一箇所にのみCMakeLists.txtを配置する。
Izumoサーバー
クライアントやサーバーが使用するライブラリ群
辞書と辞書を作成するツール群
いっそヘッダーファイルは全てここに置いてしまってもいい
シンボリックリンクも不要
廃止ディレクトリ:● cmd: コマンド廃止 & dicへ移動● canna: includeへ移動● misc: server へ(一部)移動めっちゃすっきり!
それでは・・・
Izumo の CmakeLists.txt の中を覗いてみましょう!
Izumo CMakelists.txt のヘッダー部
# Izumoが使用できる cmake のバージョンcmake_minimum_required(VERSION 2.8)
# Izumoのプロジェクト設定(C言語)PROJECT(izumo C)
# 1. 以下の設定を〜SET(IZUMO_ACCESS_FILE "${CMAKE_INSTALL_PREFIX}/share/izumo/hosts.izumo")SET(IZUMO_DICHOME "${CMAKE_INSTALL_PREFIX}/share/izumo/dic")SET(IZUMO_ERRDIR "/var/log")SET(IR_UNIX_DIR "/tmp/.iroha_unix")SET(IR_UNIX_SOCKNAME "IROHA")
# 2. ヘッダーファイル(include/config.h)に書いて出力しますCONFIGURE_FILE(${PROJECT_SOURCE_DIR}/include/config.h.in
${PROJECT_SOURCE_DIR}/include/config.h)
# インクルードファイルのディレクトリ設定INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include/RK)
Izumo のサーバーライブラリ
● 対象:– RK
– Rkindep
# RKindep のビルド# →静的(=STATIC)ライブラリのビルド(=ADD_LIBRARY)を実行ADD_LIBRARY(rkindep STATIC
lib/RKindep/basename.c〜中略〜
lib/Rkindep/strops.c)
# RK のビルド# →静的(=STATIC)ライブラリのビルド(=ADD_LIBRARY)を実行ADD_LIBRARY(rk STATIC
lib/RK/bits.c〜中略〜
lib/RK/util.c)
# 実行ファイル(izumooyashiro)とリンク# →リンク(=TARGET_LINK_LIBRARIES)を実行TARGET_LINK_LIBRARIES(izumooyashiro rkindep)TARGET_LINK_LIBRARIES(izumooyashiro rk)
どちらもインストールしない静的ライブラリ
Izumo サーバー本体
● 対象:– izumooyashiro
# izumooyashiro のビルド# →実行ファイルのビルド(=ADD_EXECUTABLE)を実行ADD_EXECUTABLE(izumooyashiro
server/comm.c〜中略〜
server/wconvert.c)
# インストール先の設定# →実行ファイルのインストール先(=bin)へインストール(=INSTALL)を実行INSTALL(TARGETS izumooyashiro DESTINATION bin)
# →設定ファイルのインストール先(=share/izumo)へファイル(=FILES)をインストールINSTALL(FILES ${PROJECT_SOURCE_DIR}/server/hosts.izumo
DESTINATION share/izumo)
Cmake って・・・
ほら、簡単でしょ?
だがしかし!
甘かった!!!
Cannaの辞書ファイルのビルド
まずは imake版(Imakefile)の場合をご確認ください。
CANNAROOT = ../../..CANNACMDDIR = $(CANNAROOT)/cmdMERGE = $(CANNACMDDIR)/mergewd/mergewordIINCLUDES = -I$(CANNAROOT)/include
TARGETS = iroha.tPUBDICS = a.p k.p s.p t.p n.p h.p m.p y.p r.p w.p x.p
iroha.t: $(PUBDICS) ProgramTargetName(pod)cat $(PUBDICS) | ./pod - -p -i -2 > iroha.spl$(MERGE) < iroha.spl > iroha.t$(RM) iroha.spl もはやコマンドの羅列(>_<)
これをCmakeで書こうとすると・・・
Izumoの辞書ファイルのビルド
Izumo の CMakeLists.txt はこうなった・・・orz
https://github.com/hashimom/Izumo をご覧ください。
ADD_CUSTOM_TARGET(irohaCOMMAND cat ${PROJECT_SOURCE_DIR}/dic/ideo/pubdic/pubdic.p |(〜後略)COMMAND ${PROJECT_BINARY_DIR}/mergewd <${PROJECT_BINARY_DIR}/ir(〜後略)COMMAND rm ${PROJECT_BINARY_DIR}/iroha.splCOMMAND ${PROJECT_BINARY_DIR}/crxdic -D (〜後略)COMMAND ${PROJECT_BINARY_DIR}/crfreq -div 512 -o iroha.cld iroha.cbd iroha.mwdCOMMAND cat ${PROJECT_BINARY_DIR}/bushu.cbd >> (〜後略))
ADD_DEPENDENCIES(izumooyashiro iroha)この中は改行できへん・・・
こんなのが2箇所ほどあったりします・・・
恐らく正解は・・・
辞書を作成するスクリプトを書いた方がよさそうですね(^^;
今後のIzumoの予定
● 11月: 〜関西オープンフォーラム
– cmake対応
– 辞書ファイルの拡張 ←遅れ。● 大きめの辞書を作成しようとしたら「too long line」と怒られてます(笑)
そういやぁ夏も似たような話(=FreeWnn)をしましたよね???
● 12月: 〜東海道らぐ名古屋オフ?– クライアントライブラリの作成– ibus-izumo fcitx-izumo の作成
● 来年以降:– サーバー・クライアント間の通信プロトコル追加(今はまだヒミツ!)– 形態素解析部の修正(←これいつたどり着ける???)
ご清聴、ありがとうございました!