狠狠撸

狠狠撸Share a Scribd company logo
続?颁补苍苍补をフォークしてみた 
はしもとまさ@東海道らぐ 
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のディレクトリ構造 
※各ディレクトリにImakefileが存在します。 
(ROOT) lib 
server 
cmd 
canna 
include 
dic 
misc 
クライアントやサーバーが使用する 
ライブラリ群 
Cannaサーバー 
Canna停止や辞書作成時に 
使用するコマンド群 
注:コマンド毎にディレクトリは別 
makeすると作成される! 
各ディレクトリ内にある 
ヘッダファイルのシンボリックリンクが 
make実行時に「include」内に貼られる。 
(ROOT) にあるCanna.confの内容と 
Imakefileの記述から 
Cannaconf.hを作成して、 
include内に置かれる 
共通ヘッダファイル置き場 
辞書 
設定ファイル等
Izumo では 
これをまるっと Cmake に置き換えます! 
Cmakeでのビルド方法: 
$ mkdir build && cd build 
$ cmake .. 
$ make 
$ sudo make install
現在のIzumoのディレクトリ構成 
(ROOT) lib 
server 
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)/cmd 
MERGE = $(CANNACMDDIR)/mergewd/mergeword 
IINCLUDES = -I$(CANNAROOT)/include 
TARGETS = iroha.t 
PUBDICS = 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(iroha 
COMMAND cat ${PROJECT_SOURCE_DIR}/dic/ideo/pubdic/pubdic.p |(?後略) 
COMMAND ${PROJECT_BINARY_DIR}/mergewd <${PROJECT_BINARY_DIR}/ir(?後略) 
COMMAND rm ${PROJECT_BINARY_DIR}/iroha.spl 
COMMAND ${PROJECT_BINARY_DIR}/crxdic -D (?後略) 
COMMAND ${PROJECT_BINARY_DIR}/crfreq -div 512 -o iroha.cld iroha.cbd iroha.mwd 
COMMAND cat ${PROJECT_BINARY_DIR}/bushu.cbd >> (?後略) 
) 
ADD_DEPENDENCIES(izumooyashiro iroha) この中は改行できへん??? 
こんなのが2箇所ほどあったりします???
恐らく正解は??? 
辞書を作成するスクリプトを 
書いた方がよさそうですね(^^;
今後のIzumoの予定 
● 11月: ?関西オープンフォーラム 
– cmake対応 
– 辞書ファイルの拡張 ←遅れ。 
● 大きめの辞書を作成しようとしたら「too long line」と怒られてます(笑) 
そういやぁ夏も似たような話(=FreeWnn)をしましたよね??? 
● 12月: ?東海道らぐ名古屋オフ? 
– クライアントライブラリの作成 
– ibus-izumo fcitx-izumo の作成 
● 来年以降: 
– サーバー?クライアント間の通信プロトコル追加(今はまだヒミツ!) 
– 形態素解析部の修正(←これいつたどり着ける???)
ご清聴、ありがとうございました!

More Related Content

続?颁补苍苍补をフォークしてみた

  • 2. 自己紹介 ● 東海道らぐ元名古屋案内人、ちびぎーこ保護者会所属 ● 某大学日本文学文化学科卒 – …という理由から、最近日本語入力の研究に目覚めました。
  • 3. 今回のお話。 ● Cannaをフォークしてみました! ● Cannaとは???? – 元はNECが作成していた日本語変換システム。 – その後、Canna Projectが開発を引き継いだ。 – …が、2004/5/20を最後にリリースされていない。 – サーバー&クライアント型。MITライセンス。 ● OSC東京で前半をお話ししたので、今日はその続き。
  • 4. CannaからIzumoへ ● 日本語変換システム「Izumo」 – https://github.com/hashimom/Izumo – よく聞かれるのが、「なぜいずも?」 ● とりあえず、Cannaを漢字にしてみよう! 余談)島根県では神無月ではなく神在月と呼ばれるらしい ● 主な変更点: 現状、特になし!(おいっ) – クライアントライブラリ、ツール群をざくっと削除してシンプルに – ビルド方法を変更(完了) – 辞書ファイルの見直し ←失敗中! ● uim-canna が利用できることを確認しています
  • 5. Canna で使っている imake ● 「xmkmf」ってコマンドを叩くと、 Imakefileの記述から、Makefileを作成します。 ● X Window SystemのX11R6.9(2005年)までは imakeを利用してビルドされていました。 – なので、imakeのことを調べるとそっち系のものばかり引っかかります。 ● 例) Cannaのビルド方法: $ xmkmf $ make canna
  • 6. imakeの欠点 「解説書: 非常に広く使用されているツールとしては、 imakeはいまだに異常なほど文章化されていません。  (中略) 多くのプログラマがimakeのさまざまな部分と 取り組んできましたが、X Windowシステムの配布のために 用意している風変わりな機能から汎用的な部分を抜き出して ツールとして分割することは誰もできませんでした。」 オライリー「make 改訂版」(2005年)より いろいろダメぽい???^^;
  • 7. Cannaのディレクトリ構造 ※各ディレクトリにImakefileが存在します。 (ROOT) lib server cmd canna include dic misc クライアントやサーバーが使用する ライブラリ群 Cannaサーバー Canna停止や辞書作成時に 使用するコマンド群 注:コマンド毎にディレクトリは別 makeすると作成される! 各ディレクトリ内にある ヘッダファイルのシンボリックリンクが make実行時に「include」内に貼られる。 (ROOT) にあるCanna.confの内容と Imakefileの記述から Cannaconf.hを作成して、 include内に置かれる 共通ヘッダファイル置き場 辞書 設定ファイル等
  • 8. Izumo では これをまるっと Cmake に置き換えます! Cmakeでのビルド方法: $ mkdir build && cd build $ cmake .. $ make $ sudo make install
  • 9. 現在のIzumoのディレクトリ構成 (ROOT) lib server include dic (ROOT) 一箇所にのみ CMakeLists.txtを配置する。 クライアントやサーバーが使用する ライブラリ群 Izumoサーバー 辞書と 辞書を作成するツール群 いっそヘッダーファイルは 全てここに置いてしまってもいい シンボリックリンクも不要 廃止ディレクトリ: ● cmd: コマンド廃止 & dicへ移動 ● canna: includeへ移動 めっちゃすっきり! ● misc: server へ(一部)移動
  • 10. それでは??? Izumo の CmakeLists.txt の中を 覗いてみましょう!
  • 11. 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)
  • 12. 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) どちらもインストールしない 静的ライブラリ
  • 13. 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)
  • 16. Cannaの辞書ファイルのビルド まずは imake版(Imakefile)の場合を ご確認ください。 CANNAROOT = ../../.. CANNACMDDIR = $(CANNAROOT)/cmd MERGE = $(CANNACMDDIR)/mergewd/mergeword IINCLUDES = -I$(CANNAROOT)/include TARGETS = iroha.t PUBDICS = 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で書こうとすると???
  • 17. Izumoの辞書ファイルのビルド Izumo の CMakeLists.txt はこうなった???orz https://github.com/hashimom/Izumo をご覧ください。 ADD_CUSTOM_TARGET(iroha COMMAND cat ${PROJECT_SOURCE_DIR}/dic/ideo/pubdic/pubdic.p |(?後略) COMMAND ${PROJECT_BINARY_DIR}/mergewd <${PROJECT_BINARY_DIR}/ir(?後略) COMMAND rm ${PROJECT_BINARY_DIR}/iroha.spl COMMAND ${PROJECT_BINARY_DIR}/crxdic -D (?後略) COMMAND ${PROJECT_BINARY_DIR}/crfreq -div 512 -o iroha.cld iroha.cbd iroha.mwd COMMAND cat ${PROJECT_BINARY_DIR}/bushu.cbd >> (?後略) ) ADD_DEPENDENCIES(izumooyashiro iroha) この中は改行できへん??? こんなのが2箇所ほどあったりします???
  • 19. 今後のIzumoの予定 ● 11月: ?関西オープンフォーラム – cmake対応 – 辞書ファイルの拡張 ←遅れ。 ● 大きめの辞書を作成しようとしたら「too long line」と怒られてます(笑) そういやぁ夏も似たような話(=FreeWnn)をしましたよね??? ● 12月: ?東海道らぐ名古屋オフ? – クライアントライブラリの作成 – ibus-izumo fcitx-izumo の作成 ● 来年以降: – サーバー?クライアント間の通信プロトコル追加(今はまだヒミツ!) – 形態素解析部の修正(←これいつたどり着ける???)