続・cannaをフォークしてみた

20

Click here to load reader

Upload: masahiko-hashimoto

Post on 12-Jul-2015

158 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 続・Cannaをフォークしてみた

続・Cannaをフォークしてみた

はしもとまさ@東海道らぐIn KANSAI OPEN FORUM 2014

2014/11/8

Page 2: 続・Cannaをフォークしてみた

自己紹介

● 東海道らぐ元名古屋案内人、ちびぎーこ保護者会所属● 某大学日本文学文化学科卒

– …という理由から、最近日本語入力の研究に目覚めました。

Page 3: 続・Cannaをフォークしてみた

今回のお話。

● Cannaをフォークしてみました!

● Cannaとは・・・?

– 元はNECが作成していた日本語変換システム。

– その後、Canna Projectが開発を引き継いだ。

– …が、2004/5/20を最後にリリースされていない。

– サーバー&クライアント型。MITライセンス。

● OSC東京で前半をお話ししたので、今日はその続き。

Page 4: 続・Cannaをフォークしてみた

CannaからIzumoへ

● 日本語変換システム「Izumo」– https://github.com/hashimom/Izumo– よく聞かれるのが、「なぜいずも?」

● とりあえず、Cannaを漢字にしてみよう!

余談)島根県では神無月ではなく神在月と呼ばれるらしい

● 主な変更点: 現状、特になし!(おいっ)– クライアントライブラリ、ツール群をざくっと削除してシンプルに– ビルド方法を変更(完了)– 辞書ファイルの見直し ←失敗中!

● uim-canna が利用できることを確認しています

Page 5: 続・Cannaをフォークしてみた

Canna で使っている imake

● 「xmkmf」ってコマンドを叩くと、Imakefileの記述から、Makefileを作成します。

● X Window SystemのX11R6.9(2005年)まではimakeを利用してビルドされていました。– なので、imakeのことを調べるとそっち系のものばかり引っかかります。

● 例) Cannaのビルド方法:

$ xmkmf$ make canna

Page 6: 続・Cannaをフォークしてみた

imakeの欠点

「解説書:非常に広く使用されているツールとしては、imakeはいまだに異常なほど文章化されていません。

 (中略)

多くのプログラマがimakeのさまざまな部分と取り組んできましたが、X Windowシステムの配布のために用意している風変わりな機能から汎用的な部分を抜き出してツールとして分割することは誰もできませんでした。」

オライリー「make 改訂版」(2005年)より

いろいろダメぽい・・・^^;

Page 7: 続・Cannaをフォークしてみた

Cannaのディレクトリ構造

server

(ROOT) lib

canna

cmd

dic

misc

include

※各ディレクトリにImakefileが存在します。

makeすると作成される!各ディレクトリ内にある

ヘッダファイルのシンボリックリンクがmake実行時に「include」内に貼られる。

(ROOT) にあるCanna.confの内容とImakefileの記述から

Cannaconf.hを作成して、include内に置かれる

共通ヘッダファイル置き場

Canna停止や辞書作成時に使用するコマンド群

注:コマンド毎にディレクトリは別

Cannaサーバー

クライアントやサーバーが使用するライブラリ群

辞書

設定ファイル等

Page 8: 続・Cannaをフォークしてみた

Izumo では

これをまるっと Cmake に置き換えます!

Cmakeでのビルド方法:$ mkdir build && cd build$ cmake ..$ make$ sudo make install

Page 9: 続・Cannaをフォークしてみた

現在のIzumoのディレクトリ構成

server

(ROOT) lib

include

dic

(ROOT) 一箇所にのみCMakeLists.txtを配置する。

Izumoサーバー

クライアントやサーバーが使用するライブラリ群

辞書と辞書を作成するツール群

いっそヘッダーファイルは全てここに置いてしまってもいい

シンボリックリンクも不要

廃止ディレクトリ:● cmd: コマンド廃止 & dicへ移動● canna: includeへ移動● misc: server へ(一部)移動めっちゃすっきり!

Page 10: 続・Cannaをフォークしてみた

それでは・・・

Izumo の CmakeLists.txt の中を覗いてみましょう!

Page 11: 続・Cannaをフォークしてみた

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)

Page 12: 続・Cannaをフォークしてみた

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)

どちらもインストールしない静的ライブラリ

Page 13: 続・Cannaをフォークしてみた

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)

Page 14: 続・Cannaをフォークしてみた

Cmake って・・・

ほら、簡単でしょ?

Page 15: 続・Cannaをフォークしてみた

だがしかし!

甘かった!!!

Page 16: 続・Cannaをフォークしてみた

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で書こうとすると・・・

Page 17: 続・Cannaをフォークしてみた

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箇所ほどあったりします・・・

Page 18: 続・Cannaをフォークしてみた

恐らく正解は・・・

辞書を作成するスクリプトを書いた方がよさそうですね(^^;

Page 19: 続・Cannaをフォークしてみた

今後のIzumoの予定

● 11月: 〜関西オープンフォーラム

– cmake対応

– 辞書ファイルの拡張 ←遅れ。● 大きめの辞書を作成しようとしたら「too long line」と怒られてます(笑)

そういやぁ夏も似たような話(=FreeWnn)をしましたよね???

● 12月: 〜東海道らぐ名古屋オフ?– クライアントライブラリの作成– ibus-izumo fcitx-izumo の作成

● 来年以降:– サーバー・クライアント間の通信プロトコル追加(今はまだヒミツ!)– 形態素解析部の修正(←これいつたどり着ける???)

Page 20: 続・Cannaをフォークしてみた

ご清聴、ありがとうございました!