Chienomi

libkkc UTと日本語入力の話

Live With Linux::software

この記事は本当は新年一発目に出そうかと思っていたのだけど、うまくいかなかった、という結果になったことからお蔵入りになりかけたものだ。

また、 この記事の前半部分ではMozcの状況について少し古い記述になっているが、後半につながる部分であること、この記事のもともとの部分は少し古いことを鑑みてご容赦いただけると幸いである

Linuxと日本語変換

多くの人は意識していないかもしれないが、実はLinuxの日本語入力環境というのはかなり危うい。

多くの人はMozcを使っているだろうが、Mozcはかなり昔にその更新が止まってしまっている。 既にビルドも危うくなってきているくらいで、mozc-utでは割と苦労している。

Anthyはもうはるか昔のものと言っていいくらいで(ただし、熱心な人たちによってメンテナンスされているから意外と使える)、いつ使えなくなってもおかしくない(むしろ今でも使えていることがおかしい)。

それに対して鳴り物入りで登場したlibkkcだが、こちらはあまり変換精度がよくなく、開発も活発とは言い難い。

つまり、現行で効率的な日本語入力ができる状態にない。

なお、私としてはAndroidの入力環境もかなり不満だ。 ATOKを使っているが、ATOKは恐ろしくバカである。 そして、GBoardが快適だとは思わないし、入力の快適性のレベルはかなり落ちている。

libkkcとAnthyの話

Mozcとの変換効率の差があまりにも大きいので使っている人は少ないだろうと思うが、基本的にlibkkcとAnthyの変換効率は辞書の問題を別にするならば似たようなものである。

変換にコツが必要という点でも似ているが、今のArchLinuxに載っているanthyは結構快適になっていて、そんなに変換効率がよくなかった時代の標準的なかな漢字変換エンジンくらいには使えるようになっている。

ArchLinuxの9100h-6はなんと2020-05-16更新。がんばっている。

一方、libkkcはSKK-JISYOの充実化による向上はあるものの、基本的には変わっていない。

結局のところ、ここらへんは「最低限変換できるか」という話に止まり、効率的かどうか、快適かどうかはあまり考えないほうがよいくらいの話だ。

実際、この記事はkkcとAnthyを使って書いているのだが、ものすごくストレスである。

Google日本語入力とMS-IMEの話

それがLinuxの問題だけではないのだ。

Google日本語入力もそれがGoogleの本体に取り込まれてからほぼほぼ更新がなく止まっていて、そろそろ捨てられそうだ、という状態にある。 これは、Mozcの停滞とそのまま連動している。結局、もう7年ほど放置されているのだ。

一方のMS-IMEも相当に厳しい状態だ。 MS-IMEはWindows 10になったばかりの頃、目覚ましい躍進を遂げた。 当時のMozc-UTよりもMS-IMEのほうが効率的なので、Windowsで現行を書いたこともある。

だが、その後どんどん劣化していき、今では普通の語彙の変換も困難になってきた。 なぜ変換能力が「落ちて」しまうのか。

また、MS-IMEもGoogle日本語入力も利用中に(設定によらず)通信が発生する。 安全性・信頼性という意味でも使いづらくなっている。

「PCで日本語の文章を書く」という当たり前のことに対してあれやこれやと苦痛を味わうのは相当つらい。

ATOKの話

私は月間で数十万文字もの文章を書くし、お金を払って快適な入力環境が買えるなら普通に買うだろう。 入力にサブスクリプション制が導入されるのはものすごく嫌だが(インターネットにつながないと入力できないのだろうか?)、それでもだ。

だが、残念ながら今のATOKは「お金を出せば手に入る快適な入力環境」ではない。 Android版は最初からずっと貧弱すぎる語彙で使い物にならないままであるし、Windows版も使い勝手はだいぶ悪くなっているようだ。

それに、ATOKはLinuxから完全に手をひいてしまったので、Linuxerとしては選択肢に入らない。というか、入れられない。

fcitx/kkc UT 作ってはみたが…

kkcも語彙が豊富であれば使えるのではないか。 Anthy-UTはそれなりに使い心地がよかったし、lickkc-UTを作ってみればkkcでいけたりしないだろうか。

そう考えてこんなスクリプトを書いてみた。

#!/usr/bin/ruby

dicts = []

ARGF.each do |line|
  entry = line.chomp.split("\t", 5)
  dicts.push({
    entry[0],
    entry[3].to_i,
    entry[4]
  })
end

dicts.sort_by! {|i| i[] }

File.open("ut-dictionary/segment", "w") do |f|

  f.puts <<'EOF'
  ;; okuri-ari entries.
  ;; okuri-nasi entries.
  EOF

  dicts.each do |e|
    f.printf("%s /%s/\n", e[:yomi], e[:expr])
  end

end

これを使ってmozc-ut用の辞書をfcitx/kkc用に変換するという作戦に出たのだ。

だが、結果としては失敗であった

最大の問題は「フリーズする」ということだ。 libkkcが巨大な辞書を扱えるようになっておらず、かなりの頻度で止まる。

そしてもうひとつの問題がまともに変換できなくなるということだ。 UT辞書の順位を下げておいても自然な変換をしなくなるので、むしろないほうが良い。

そして、UT辞書の語彙豊富さというのは、スラングや固有名詞などに寄っていることから「変換できる」という確信を持てるかどうかが重要な面があり、例えTab変換しないとしても、予測変換機能がないとあまり使いこなせないということも感じた。

現状はMozc-UTだが

現行の変換エンジンの中で最も良いのはMozc-UTであることは間違いないだろう。

そもそもkkcは現行UT辞書を扱えないし、Anthyはそもそも分かち書き用のUT辞書を扱うのは結構難しい(そしておそらく、Anthyの辞書の20倍ものサイズを持つUT辞書は厳しい)。

Mozc-UTはいくらか変換に問題を抱えているのは事実だ。 例えば「隙」が変換できない。

だが、これらの問題はユーザー辞書登録によって改善可能なレベルである。 基本的に現状では「ユーザー辞書登録によって改善可能であるならば、ユーザー辞書登録そのものが容易なら許せる」という状況である。

Mozcはそもそも必要な登録量が少なく、ある程度学習で補えるものであるし、様々な辞書フォーマットからインポートできるため生成もしやすい。

また、Android版ATOKに関しても「語彙力が絶望的という点さえなんとかなるならまあまあ使いやすい」というものなので、辞書登録がある程度1問題を解決してくれる。 そして、テキストファイルからの一括インポートが可能で、割と問題を解決する余地がある。

実際、私はmozc-utのAURパッケージをメンテナンスしているし(fcitx-mozc-ut-unifiedというのが現行の名前である)、ATOK for Androidで辞書登録して使っている。

(ATOK for Android用の私が使っている辞書はGitHubで公開している。)

それでそこまで不満を感じているわけではないし、今はそれで良い。 できればもっとスムーズに変換できる環境はほしいが、困ってはいない。

だが、それは「今の」話だ。 前述の通り、Mozcは既に未来がないプロジェクトになってきている。

Mozcに立ちはだかっている問題は主に2系統ある。

まず、プログラム的問題だ。 Mozcが使っているツール群は既にバージョンが古く、現行システムでは動かない。 そのためいくらか修正が必要なのだが、パッケージング側で修正を当ててビルドしている状態で、本体には手が入っていない。

もうひとつは辞書的な問題だ。 言葉は生き物なので、辞書が古くなると相当使い勝手は悪くなる。 だから、辞書はup-to-dateである必要があるのだが(だからクラウド辞書にも多少の正義はあるのだが)、それはそのようにメンテナンスする人が必要であり、放置されているGoogle日本語入力はもちろん、MS-IMEもATOKもそうはなっていない。多少は反映されているにしても、追いついてはいない。

Mozc-UTの場合、mecab-ipadic-neologdやwikipediaなど、今もちゃんと更新されているソースから言葉を得ている。クラウド変換ではなく、「webを言語資源として収集された辞書データベースを使う」というのは、今の日本語を扱う上で良い方法だろう。(そのためにMozc-UTはカナ振りが間違っていることがかなりある、というのは難点なのだけど…)

もっとも、Mozc-UTに関しても古参とはいえ、utuhiroさん個人に頼っていて、唯一のプロジェクトなのだ。utuhiroさんがやめてしまったらどうなる?

そして、Mozcはいずれ本体に手を入れるか、そのレベルのパッチを入れなければビルドできなくなる日がやってくる。 その日は決して遠い未来ではない。

結局、「現状でも不満なく使う方法が細い荒れた道になっているが、この道さえもやがて閉ざされる」というのがコンピュータにおける日本語入力の今日だ。

未来を拓くには

もう40年以上やってきて快適になっていないということから分かるように、分かち書きというのはとても難しい。 そもそも、「分かち書きをするには何が必要か」ということに対して色々なアプローチがあるのだが、正解に近づいた者がまた遠ざかる、という状況にあるわけだ。

その意味では、Google日本語入力は「求める次元に到達しつつある状態で止まった」ものである。

分かち書きというのは原理的なものであり、その原理が完璧であるならば時とともにロジックを修正する必要は基本的にない(日本語の構造そのものが変われば別だが)。必要なのはあくまで正しい辞書の更新、ということになる。

Mozcが常に使える前提であれば、手を出すべきものは適切な辞書を作る方法への到達だ、ということになる。

だが、現実にはMozcはプログラムであり、プログラムは放置すれば動作しなくなる。

Mozcのコアロジックにおよそ不満がない、ということを踏まえるならば、おそらく新規に分かち書きのロジックを組み立てようとするよりは、Mozcを改修するのが正解に近いだろう。 だから、Mozcをforkするしかあるまい、ということになるのだが、その重さを考えると手を挙げる人が果たして出るだろうか。

だが、もしかしたら悲観するような話ではないのかもしれない。

2018-02-26を最後に更新が止まっていたMozcだが、2020-08-22に久しぶりのコミットがあり、更新頻度は加速している。 Komatsu Hiroyuki氏に環境の変化でもあったのだろうか。 MozcとUT辞書(と、それの中核たるmecab-ipadic-neologd)がアクティブであれば思い悩むことはあまりない。

もっと快適な日本語入力環境が欲しいと常々思っているが、一番期待されるのはATOKが圧倒的な性能のものへと進化し、Linuxを含むUnix版もリリースすること、第二にはより優れた分かち書き技術を生み出し、日本語入力に還元する者が現われることだろうか。