FC2ブログ
2015/09/19

日本語入力cannaを現代に蘇らせる アホな評判もなんのその

20151020どうもuimでcannaを使うのに重大な問題がある。
数字と単語を一緒に変換にかけると漢字変換が使えなくなってしまいます。いったんXを再起動とか必要。
どうも、うちの環境が64bitだから、cannaが対応しきれていないのかも。これは参りました。
そんなときにはanthy-8700です。9100よりなぜか賢く、互換性もあります。

今まで、漢字変換についていろいろなことをやってきた、トロぽサイトです。
Linuxにおいては漢字変換は一つではありません。しかし大方mozcです。
G-HAL版のanthyを入れたり、
mozcをコンパイルして入れたり、
SJ3の強化辞書を合体させて復活させたり、(私のホームページで配布)
Solaris系でmozcがつかえなくともG-HAL版のanthyとmecab-skkservならつかえることを実証したり。
今回、昔は王道だったcannaを強化辞書を入れて復活させます。
果たして変換精度のできは?anthyと比べてどのぐらい賢いのか??

Cannaのコンパイル

何か抜けていたらコメントください。なおダウンロード元は検索してもらいます。
canna-3.7p3をダウンロード
Debianのパッチもダウンロード
$ tar xf canna_3.7p3.orig.tar.gz
$ cd Canna37p3/
$ tar xf ../D/canna_3.7p3-13.debian.tar.xz
$ cat debian/patches/01_mkrelease_autoconf213_debian.patch | patch -p1
$ cat debian/patches/04_platex.patch | patch -p1
$ cat debian/patches/06_fix_spelling_error.patch | patch -p1
$ cat debian/patches/07_fix_manpages_error.patch | patch -p1
$ cat debian/patches/08_fix_ftbfs_on_hurd-i386.patch | patch -p1
$ cat debian/patches/09_fix_format_security.patch | patch -p1
$ cat debian/patches/10_fix_manpages_error.patch | patch -p1
$ xmkmf
$ make canna
# make install
$ cd ..
cannaは/usr/local/cannaに入ります
anthyのデフォルト辞書で有名なalt-cannadicをダウンロード
$ tar xf alt-cannadic-110208.tar.bz2
$ cd alt-cannadic-110208/
$ PATH=$PATH:/usr/local/canna/bin make maindic
# cp gcanna.cbd gcanna.cld gcannaf.ctd /usr/local/canna/share/canna/dic/canna/
# vim /usr/local/canna/share/canna/dic/canna/dics.dir
gcanna.cbd(gcanna.mwd) -gcanna---
gcanna.cld(gcanna.mwd) -gcanna---
gcannaf.ctd(.swd) -gcannaf---
この行を追加
iroha.cbd(iroha.mwd) -iroha---
iroha.cld(iroha.mwd) -iroha---
こんな行があったはず こっちは削除
cannaがなんとArchlinuxのSystemd上で動いた!
これが/etc/systemd/system/canna.service
[Unit]
Description=Canna Japanese Conversion Engine

[Service]
User=root
Type=forking
ExecStart=/bin/env LD_LIBRARY_PATH=/usr/local/canna/lib /usr/local/canna/sbin/cannaserver
ExecStop=/bin/env LD_LIBRARY_PATH=/usr/local/canna/lib /usr/local/canna/sbin/cannakill

[Install]
WantedBy=multi-user.target

よくみると分かるが、root権限で動いているのと、/usr/local直下に入れていないためライブラリパスの設定がある
# systemctl start canna
# uim-module-manager --register canna
そう、現代ではcannaをサポートした活発なプロジェクトはuimしかない
この後、uim-pref-gtkでcannaを有効にして、使ってみる必要がある

そこまでやってcannaを入れた意味が有るの?

はい。この文章、cannaで入力しています。
すごいです。同じ辞書を使っているanthyの激しいくせが全く有りません。ちなみにあいつの誤変換から2ch用語が生まれている気がする。
変な名詞が出てこなければ、mozcにはちょっと劣るが、優秀な漢字変換をしてくれます。
信じられないと思うでしょうが、試してみてください。
alt-cannadicは21万語入っています。SJ3の時もそうですが、まともな漢字変換で8万語有ってやっとまともに使えます。
いまG-HAL版のanthyはコンパイル時にWarning多発と-fstack-protector-strongを指定していて、メモリリークとセグメンテーション違反で落ちる問題をかくしている気がします。
枯れたかんなに新しいalt-cannadic辞書ならそうは問題は起こらないでしょう。ネットワークソケット使っているのが気になるが?
ちなみにWnnはuimすら対応してなく、試すのは失敗です。なんと今年新しいリリースが有るのと、それは強化辞書が含まれているのがすごいです。

三歩進んで二歩下がる漢字変換の開発の歴史

canna、Wnn、sj3、ふるい漢字変換エンジンはそれぞれNEC、OMRON、SONYが作ったわりにしょうもない出来だった。しかし貧弱な辞書のせいだったことがのちに明かされる。
追記:なお、もはや存在しないと思われたSJ3のソースリポジトリはgithubへ https://github.com/opususa/sj3
FreeWnnに高価な岩波Wnn辞書を入れると快適だと分かっていた。辞書は商売の競争力だったのだ。
mozcがでるまで日本語をLinuxで使いたいならanthyを使えということになっていた。
しかし、実はanthyはIPAの助成で作られており、IPAに開発が振り回されたのかバージョン8000から迷走を始め、でたらめな9100が完成、
かくしてデフォルトで搭載される漢字変換がでたらめなanthy-9100になり、
その間にalt-cannadicやSJ3強化辞書、Wnnも強化辞書が現る。これでふるいエンジンでも快適。ただ何と上流に取り込まれなかったのでいちいち取り替える手間がかかった。
工藤拓という天才がPRIMEという漢字変換を作り上げた。品詞の種類ごとに別の種類とのつながりやすさを数字で指定し、anthyからこれに取り替えろと言われるようになった。しかし開発はなぞの終わりを迎え、ruby1.9に対応できず誰も使わなくなった。
工藤拓はmecabという形態素解析エンジンを作った。日本語の文をコンピューターが理解できるようになった。めかぶは彼の好物だ。
Windows搭載のMS-IMEはあんまりいい変換エンジンではなかった。しかもOfficeXPについている強化版ナチュラルインプットはさらにおかしかった。
ATOKだけが売れる漢字変換になっていた。方言まで自在だが汚い言葉が全部排除されていたので、主にビジネスマンだけが使うようになった。
突如としてGoogle日本語入力が現れるとできるパソコンユーザーはみんな驚いた。こんなにニッチな言葉が打てて、精度もいいのに無料だと?
外部データ送信も疑われたがなかった。
突如としてそれがmozcとして辞書は限定版だがオープンソースになり、Linux,BSDで使えるようになる。これに日本のハッカーはみんな驚いた。
辞書ファイルがないがmozc_serverの中だとか、コンパイル前の辞書がなんかmecab辞書のフォーマットに似ているとか、「ただしイケメンに限る」だけが予測入力ででないように指定された、沖縄方言サポート、いろいろな話が有った。
コンパイル方法が独特だが(make install相当もない)パッケージのないころから苦労していれて満足した。
mozcは何も考えずにスペースキーを押せば正しい漢字になる!(私は日本語を打つうえで何も考えずに済むのはバカになると思ったので、別の方法を探した。)
実はGoogle日本語入力/mozcはanthyの開発者と工藤拓がやったリベンジだったことが明かされたのだった。
またIIIMFからSCIMからIBus、それからfcitxとフロントエンドも開発のすったもんだによる切り替えが有る。 順調に進まない、漢字変換の発達の話でした。
#2017年:mozc-neologd-ut、辞書がまともに形態素解析できる宣言があったので最新版に変えたらあれれ、基本的な言葉の変換がおかしい。宣言があったのがLINEブログから・・・察し

変換モードのない漢字変換

日本語 漢字置換インプット メソッド for IBus
2017年新たに
ひらがなの部分はそのまま確定、漢字の部分だけ変換をかける、変換モードのない漢字変換が登場
曰く小学生でも打てる
エスリルという任天堂のスピンアウトの会社が開発
スポンサーサイト
2014/09/20

Openindianaの日本語入力を強化 G-HAL版のanthy

Anthy-GHALとも言われる、Anthyの大幅な強化バージョンがあります。
これは、mozcが日本のLinuxコミュニティーを席巻する前は、パッケージもできてよく使われていたものです。
G-HAL版は普通に日本語を打てるまでに強化されており、話題のない最近のmozcのほうがこけるかもしれません。
元がanthyなので、移植性も高いのです。mozcができる前は一番強力だったanthy-utの開発が終了し、
現在もアップデートされているanthyはG-HAL版のみです。
G-HALの由来はネットユーザーの名前です。

■ かな漢字変換 anthy で、個人用学習データを活用して変換結果の改善を目指すパッチ

今回はpatch13の旧安定版をビルドします。新しい安定版ではtokyocabinetというある種のデータベースが必要です。
特段の考慮はいりません。配布ファイルがtarのLZMA圧縮?大丈夫、普通に解凍できます。
./configure --with-pic ; gmake ; gmake install ぐらいでいいでしょう。
もし足りなかったら、iconv周りのiconv/utf8やiconv/unicode、iconv/ja-extraなどをリポジトリから付け足すといいでしょう。

問題は、日本の皆さんのマシンにすでにanthyが入っていることです。
これを避けるため、/usr/localにインストールします。
ライブラリのパス、Solarisではこの辺の設定はバイナリです。
crleコマンドで/usr/local/libを/usr/libより前に指定することによって、G-HAL版を優先して呼び出せます。
crleコマンドは-lでライブラリのディレクトリを指定します。うっかり-lのあとを空っぽにするととんでもないことになります。

このように、Anthy-GHALはOpenindianaでも難なく入ります。これでOpenSolarisのATOKを失ったのを取り返せますか?
しかも、長文もうまく変換できるのですが、逆に長文の方がいいです。長い方が情報がいっぱいあるので変換候補が正確になります。

追記:このanthy-GHALのrelease版はデータベースの読み込み?がながくアプリの起動もしくは漢字変換のONが毎回遅くなることがあるかも。stable版なら大丈夫。
追記:Anthy-GHALをアップデートしたら、~/.anthyを削除した方がいいかもしれません。もし変換がおかしければそうです。
2014/08/06

Openindianaにmozcに近い日本語入力を入れる

Opensolarisが提供されていた頃は、Sunは大盤振る舞いするものだから、ATOKが入っていたのですよ!
それがボランティアベースのOpenindianaにはもちろんありません。ORACLEのSolarisにはついてます。
Linuxでは、mozcという先進の日本語IMEがありますが、Linuxだけで使える様で。
Openindianaの方では何もできないのか??

mecab-skkservとは?



mecab-skkservは、mozcの開発者、工藤拓氏がgoogleへ入社する前に作ったSKKサーバーです。
このころ彼は、日本語の言葉の品詞や、つながりを解析できる、mecabという形態素解析プログラムを作っており、
なんとiOSの漢字変換でも使われているが、Appleからは何も感謝もフィードバックもないので、非難しています。
mecab-skkservは半ばお遊びでmecabをIMEにしてみたものです。
mozcとmecab、ネーミングにつながりがあります。mozcが使えない環境では、mecab-skkservが快適です。
ただ、日本が「にほん」で出てこないなど、詰めが甘いところがあります。でもSKKの辞書登録機能が何とかしてくれるのか?

mecab-skkservは、SKKという独特の操作方法がいるIMEの裏で動きます。しかし文節区切りまで手入力のSKKが普通に連文節変換できるので、
文を打つ時最初に文字キーとともにShiftを押せば、それなりに普通に使えます。
しかし打ち間違いでへんなモードにはいるなど、SKKのマニアックな機能はそのまま使えるので、覚えるだけ入力が速くなります。

ではビルドしてみる


ネタバレ注意、苦労してビルドに成功したい人は読まないで

ibus-skkがOpenindianaに最適なSKKでしょう。
bashのhistoryが残っていないので、手短に説明します。
[NOTICE] すべての./configureに--with-picをつける。

ibus-skk-0.0.10をダウンロード ./configure --prefix=/usr --with-picでビルド インストール
SKK-JISYO.Lをダウンロード /usr/share/skkに入れる これをしないとibus-skkの設定画面が出ない
mecab-0.996をダウンロード ./configure --prefix=/usr --with-picでビルド インストール
(mecabの辞書、例えばnaist-jdicはmecab-skkservに辞書がついてるのでいらないと思うが、それが動かなければ、必要かも)
mecab-skkserv-0.03をダウンロード
cost-factor = 700
をdicrcの末尾に追加
mecab-skkserv.cppのgetopt.hへの参照をすべて削除
./configure --prefix=/usr --with-pic でビルド、インストール
mecab-skkservはwebサーバーのようなふるまいをするので、inetdから起動するのです。
skkserv         1178/tcp                        # SKK Kana Kanji Server

を/etc/inet/servicesに追記
skkserv stream tcp nowait nobody /usr/bin/mecab-skkserv %A

このような中身のファイルをinetconv -iで読んで、サービスに登録、起動
ibus-setupでSKKを使うようにする、language-panelを有効に、そこからibus-skkの設定画面をひらき、SKKサーバーをつかうように設定
再起動(もしくは再ログインでもいい?)
こんな感じです。

うまく行けば、変換精度がanthyよりも数段うえのIMEが手に入るはずです。
これで皆さんATOKを失ったのを少し取り返せますかね。
ただし単漢字が弱いのと、使い勝手に癖があるので、SKKの勉強がいります。例えば小さい「ぃ」はxiです。"li"では半角英語入力モードになります。そうなってしまったらCtrl+jです。
2013/04/06

anthy-utをハッシュ関数で高速化する!

[[G-HAL氏制作の新しいanthy-ghalなら、まわりくどいことは要らないみたいです。]]

Linuxには大層な漢字変換ソフトはないんです。オープンソースで辞書を拡張したり手入れするのは大変。
でも、mozcとanthy-utなら、軽く使う分には問題なし。

うちのCeleron 650MHz PC133 256MBの動態保存パソコン、
mozcはメモリ上を60MBぐらい使うから、こんなパソコンでは動かない。
古いパソコンで、anthy-utを使うと、変換速度が遅くなってしまう。目に見えて。
で、変換が数秒もかかる。

しかし、設定を変えて再コンパイルすれば、うまくいくかも。

anthy-ut、anthy-GHALではFreeBSD、OpenBSDの標準ライブラリについてくるハッシュアルゴリズムを使うようになっています。
BSD以外では使えませんが、
OpenSSLのlibcrypto.soならいろんなUNIXに入っているはずです。ここにはハッシュ関数も入っています。
で、ハッシュを使っているのはソースコードのsrc-diclib/のなので、
Linuxでもlibcrypto.soを使えば辞書を引くのが早くなるかも。

configure.acを直します。


- AC_CHECK_HEADERS([md2.h md4.h md5.h ripemd.h sha.h sha256.h]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_HEADERS([md2.h md4.h openssl/md5.h ripemd.h openssl/sha.h sha256.h]) dnl Hash library (FreeBSD Only)

AC_CHECK_LIB([m], [log10]) dnl math library
AC_CHECK_LIB([md], [MD2Init]) dnl Hash library (FreeBSD Only)
AC_CHECK_LIB([md], [MD4Init]) dnl Hash library (FreeBSD Only)
- AC_CHECK_LIB([md], [MD5Init]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_LIB([crypto], [MD5Init]) dnl Hash library (FreeBSD Only)
AC_CHECK_LIB([md], [RIPEMD160_Init]) dnl Hash library (FreeBSD Only)
AC_CHECK_LIB([md], [SHA_Init]) dnl Hash library (FreeBSD Only)
- AC_CHECK_LIB([md], [SHA1_Init]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_LIB([crypto], [SHA1_Init]) dnl Hash library (FreeBSD Only)
- AC_CHECK_LIB([md], [SHA256_Init]) dnl Hash library (FreeBSD Only)
+ AC_CHECK_LIB([crypto], [SHA256_Init]) dnl Hash library (FreeBSD Only)



src-diclib/anthy-hash.hを直します。



# if !defined(HAVE_MD5INIT)
# error "You have no MD5Init()."
# endif
# if defined(HAVE_MD5_H)
- # include
+ # include
# endif

# elif (256 == ANTHY_HASH_TYPE)
# if !defined(HAVE_SHA256_INIT)
# error "You have no SHA256_Init()."
# endif
# if defined(HAVE_SHA256_H)
# include
# endif
# if defined(HAVE_SHA2_H)
- # include
+ # include




このパッチはかなりいい加減です。
本当はconfigure.acだけ直せば上手くいくかも知れないし、
今後の拡張を考えるとなんとかDataの関数はハッシュアルゴリズムの名前の関数にして
ファイルのハッシュを取る関数は使わないようにしないと。

...で、autoupdateしてautoreconf -fiして、configureすると
なんだかMD5の方は認識されずに、SHA系を使おうとします。で、1か256か512かは分からなかった。
ビルドしてインストールしてみると?

普通に漢字変換が一瞬でできるようになっている。
長文も0.5〜2秒でできるようだ。かなりスラスラうてるようになりました。
これがハッシュの威力です。ものすごい。

...readelfでみてもSHAの関数が見えない!一体本当に何を使っているの?
2011/05/29

MozcをSlackwareにいれた with SCIM

Openindianaを使っていて
無線LANはたまに切れるし、
ちょっと違和感あるし
なにより公式サイトではillumos(もじり?)とかdev_il(悪魔?)とか
なんか妙な用語が飛び出してきて不安です。
結局、精神を壊してSlackwareに戻ります。

高性能な漢字変換MozcはLinuxで使えます。
今度はSlackwareにもともと入っているSCIMをつかいます。
mozc-1.1.717.102を入れます。(なお、新しいmozcにはSCIMのモジュールが入っていません。ぜひこのバージョンをお使いください)
SCIM使うとGTKのプログラムの起動が遅いことがあった以前あったけど
chmod +x /etc/profile.d/scim.sh
した今回は遅くなりません。

えーインストールするには、
そう、slackwareお決まりのダウンロードしたソースコードからコンパイルと。

まずは依存ライブラリを入れますが
最初にgtest(google test framework)と。
cmakeを使うとmake installできないのですね。
configureを使うとうまくいくかもですがREADMEに古いやり方と書いてあります。

protobufとzinniaはすんなり入ります。
zinniaの手書き辞書(zinnia-tomoe)は普通にインストールするとmozcから使えないですね。
/usr/share/tegaki/models/zinnia/handwriting-ja.model
と置かないとダメか。

では本体のビルド。
フリーズしているように見えて進んでいたりする所があります。version.oとか。

追記:vim使ってるんでmozc-emacs mozc-emacs-helper入れてないんだった


tar xf ../mozc-1.1.717.102.tar.bz2
cd mozc-1.1.717.102/
ls
python build_mozc.py gyp
python build_mozc.py build_tools -c Release
python build_mozc.py build -c Release unix/scim/scim.gyp:scim_mozc unix/scim/scim.gyp scim_mozc_setup server/server.gyp:mozc_server gui/gui.gyp:mozc_tool
python build_mozc.py build -c Release unix/scim/scim.gyp:scim_mozc unix/scim/scim.gyp:scim_mozc_setup server/server.gyp:mozc_server gui/gui.gyp:mozc_tool
mkdir -p debian/scim-mozc`pkg-config --variable=moduledir scim`/IMEngine/`
mkdir -p debian/scim-mozc`pkg-config --variable=moduledir scim`/IMEngine/
cp -p out_linux/Release/lib.target/libscim_mozc.so debian/scim-mozc/usr/lib64/scim-1.0/1.4.0/IMEngine/mozc.so
mkdir -p debian/scim-mozc`pkg-config --variable=moduledir scim`/SetupUI/
cp -p out_linux/Release/lib.target/libscim_mozc_setup.so debian/scim-mozc/usr/lib64/scim-1.0/1.4.0/SetupUI/mozc-setup.so
mkdir -p debian/scim-mozc`pkg-config --variable=icondir scim`/
cp -p data/images/unix/ime_product_icon_opensource-32.png debian/scim-mozc/usr/share/scim/icons/scim-mozc.png
cp -p data/images/unix/ui-tool.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-tool.png
cp -p data/images/unix/ui-properties.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-properties.png
cp -p data/images/unix/ui-dictionary.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-dictionary.png
cp -p data/images/unix/ui-direct.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-direct.png
cp -p data/images/unix/ui-hiragana.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-hiragana.png
cp -p data/images/unix/ui-katakana_half.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-katakana_half.png
cp -p data/images/unix/ui-katakana_full.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-katakana_full.png
cp -p data/images/unix/ui-alpha_half.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-alpha_half.png
cp -p data/images/unix/ui-alpha_full.png debian/scim-mozc/usr/share/scim/icons/scim-mozc-alpha_full.png
mkdir -p debian/mozc-server/usr/lib/mozc
cp -p out_linux/Release/mozc_server debian/mozc-server/usr/lib/mozc/
mkdir -p debian/mozc-utils-gui/usr/lib/mozc
cp -p out_linux/Release/mozc_tool debian/mozc-utils-gui/usr/lib/mozc/


debianディレクトリの中にそれぞれパッケージにできる3つのディレクトリが入っているので
makepkgできます。
64ビット環境でmozc_serverが64ビットバイナリなのに/usr/libに入ってるんですが
以前の失敗のあれなのでおまじないですが
調べると/usr/libexecにもおけるようですね。

今回はSCIMに入れたのでmozc_toolの各種機能が使えます。
mozc_toolの引数が色々あって
--mode=config_dialog
--mode=word_register_dialog
--mode=dictionary_tool
--mode=character_palette
--mode=hand_writing
最後のオプションはそう、手書き文字認識!
手で文字を書くとダイアログがこの文字?
と活字を出してきますのでクリックでクリップボードにコピーできます。
書き順どおりに書くと正しく認識するといううわさ。
mozc_toolには隠しオプションもあるという噂。