💭

Windows版mozcのビルド(mozc-ut適用)

2024/10/21に公開

モチベーション

  • 最近のMS-IMEの変換精度は低下の一途とを辿っている。ミスタイプが多くなってしまうし、ミスタイプを学習してしまい更にミスタイプを誘発しており悪循環である。
  • Atokの買い切り型がなくなり完全サブスクのみになった。社のPCにインストールできない。

そこで、Google日本語入力のOSS実装であるmozcをビルドする。mozc-ut辞書をWSLでビルドし組み込むことでmozc-ut付きのmozcをビルドする。

mozc-ut辞書を適用すると、堀江由衣の天使のたまごや小倉唯のyui*room(終了番組)や鷲崎健といった人物名であったり、とある科学の超電磁砲やリコリス・リコイルといった有名番組名を推測変換することが可能になる。もちろん、アニメ以外の辞書に関しても大幅強化される。

参考サイト

注意

  • ビルド環境は英語版環境である必要がある。日本語インプットメソッドであるが日本語環境だとCP932関連のエラーが出る。解決するよりは英語環境でビルドしたほうが早いので注意。

環境

  • Windows11開発環境
  • Visual Studio 2022
    • Windows11開発環境をダウンロードした人は導入されているが、C++デスクトップ開発環境とATLライブラリの導入が必要。依存しているバージョンが不明であったため、x86版をすべて入れた。
  • Python3
    • 導入の上、パスを通しておく。最新版でOK。

ビルド

ネット上の他の方の知見では色々と手順が必要であるように見えたが、Githubの案内が改定されたようで?基本的にreadmeに従えば良い。コマンドはPowershellから実行する。

github上の下記のコマンドを実行すれば素直にビルド可能になる。

python -m pip install six requests

git clone https://github.com/google/mozc.git
cd mozc\src

python build_tools/update_deps.py
python build_tools/build_qt.py --release --confirm_license
python build_mozc.py gyp
python build_mozc.py build -c Release package

# Install Mozc
out_win\Release\Mozc64.msi

ut辞書のビルド

Windows Sybsystem On Linux(WSL)上のUbuntuで下記手順を実行した。事前に/etc/apt/source.listのdeb-srcを有効化(コメントアウト)しておく必要がある。

生成された辞書(dictionary00.txt)をWindows版mozcのソースにマージする。もし、ut辞書を適用しないバージョンを先にビルドしていたら、python build_mozc.py clean を実行してcleanして、再度手順を実行する。

生成物のテストを行う。例えば、 堀江由衣の天使のたまご などが推測変換できたら、ut辞書を適用できている。

ビルド時間

下記は、Core-i7 6700kを搭載したマシン上のVMware Workstation上の仮想マシン(8仮想コア)でut辞書を適用しない状態で コンパイルした際の所要時間である。

python build_tools/build_qt.py --release --confirm_license

Days              : 0
Hours             : 0
Minutes           : 11
Seconds           : 59
Milliseconds      : 908
Ticks             : 7199089836
TotalDays         : 0.00833227990277778
TotalHours        : 0.199974717666667
TotalMinutes      : 11.99848306
TotalSeconds      : 719.9089836
TotalMilliseconds : 719908.9836

Measure-Command { python build_mozc.py gyp }
Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 5
Milliseconds      : 743
Ticks             : 657432923
TotalDays         : 0.000760917734953704
TotalHours        : 0.0182620256388889
TotalMinutes      : 1.09572153833333
TotalSeconds      : 65.7432923
TotalMilliseconds : 65743.2923

Measure-Command { python build_mozc.py build -c Release package
 }
Days              : 0
Hours             : 0
Minutes           : 27
Seconds           : 44
Milliseconds      : 941
Ticks             : 16649411118
TotalDays         : 0.0192701517569444
TotalHours        : 0.462483642166667
TotalMinutes      : 27.74901853
TotalSeconds      : 1664.9411118
TotalMilliseconds : 1664941.1118

同条件のマシンで、ut辞書を適用した場合は下記のとおりである。2064.2140023 seconds = 約34分かかる。なぜかut辞書適用なしの場合より早い。2回目のコンパイルだからかも。

# cleanする
python build_mozc.py clean

# 下記のワンライナーで一気にコンパイルして時間計測する
$times = (Measure-Command { python build_tools/build_qt.py --release --confirm_license }).TotalSeconds + (Measure-Command { python build_mozc.py gyp }).TotalSeconds + (Measure-Command { python build_mozc.py build -c Release package }).TotalSeconds; Write-Output "Total Time: $times seconds"

# 34分後に出来上がり
Total Time: 2064.2140023 seconds

output

\mozc\src\out_win\Release\Mozc64.msi にコンパイル済みの生成物が出力される模様。恐らく64bitバイナリ。

所管

  • 過去にも挑戦したことがあるが推測変換のUIが機能せず挫折していた。今回は成功した。
  • コンパイル環境の準備方法を忘れており、日本語環境でやろうとしたことからかなり手間取った。
  • OSSの日本語変換ソフトに辞書を組み合わせ、市販ソフトに負けずとも劣らない変換精度を実現できた。
  • 単語数もまずまずで誤変換が少なく、文章入力が楽になった。
  • 所属会社用に、社内用語を取り込んだmozcをビルドすると面白いのではないか。ただし汎用性を重視するとなるとユーザー辞書のほうがいいかもしれない。
  • コンパイルに時間がかかるため、本気でやりたい人はとにかくコア数が多いCPUを積んだマシンやサーバで実行するのがよい。
  • 生成されたバイナリのライセンスに注意。再配布や公開はやめておいたほうが良さそう。

Discussion