Mozcdict-Ext更新: exclude機能
開発::application
序
develでテストしているbyHand辞書は一旦置いておいて、実用上気になっている「不適切な変換候補」への対応として、exclude機能を追加した。
exclude機能を使うと、読み、もしくは表層形/原形が指定したパターンにマッチする場合、辞書への追加をスキップする。
すでに予測変換の候補として出したことがあるものについては、Mozcのキャッシュをクリアしてから再起動する必要がある。
~/.mozc
または~/.config/mozc
を消せば確実だが、この場合すべての設定が消える。
設定ツールからクリアする方法があるかもしれない。
用例
exclude機能は~/.config/mozcdict-ext/exclude.txt
を編集することで使用する。
形式は読みパターン,
原形パターンを1個以上の連続するホワイトスペースで区切ったものである。
このパターンは、RubyのFile.fnmatch
を用いてチェックされる、シェルグロブに似たものである。
詳しくはるりまや、fnmatch(3)
のmanpageを読むと良い。
例えば、NEologdは、英語の人名をなぜか「ゃ
」に詰め込むようになっている。
これを回避するためには次のようにする。
ゃ *
これで、読みが「ゃ」である場合のすべての原形がスキップされる。 一部は「ゃゃ」や「ゃななじゅうご」にもなっている。 これも回避するには
ゃ *
ゃゃ *
ゃななじゅうご *
のようにする。 あるいは、そもそも「ゃ」からはじまるものを変換されるのが嫌ならば
ゃ* *
としても良い。
備考
exclude.txt
はビルド時に参照するものなので、変更したらビルドし直す必要がある。
言い換えれば、この設定を変更することで同じバージョンのfcitx5-mozcを再ビルドするだけで機能する。
ただし、同じソースを使う場合はすでに辞書は組み込まれているので、一旦dictionary*.txt
をもとに戻さないといけない。
また、前述の通り反映のためにはキャッシュの削除が必要。
AURパッケージについて
AURパッケージのfcitx5-mozc-ext-neologd
はまだ更新されていない。
理由は、OSDNのファイルサーバーであるosdn.dl.osdn.net
の証明書が切れていて、ビルドできなくなっているため。
手元ではソースをもとにhttp
にしてテストはしているが、そのようなPKGBUILD
を配布するのは好ましくないので、pendingにしている。
exclude込でビルドできるPKGBUILDは以下の通り
# Maintainer: Masaki Haruka <yek@reasonset.net>
# Contributor: Jiachen Yang <farseerfc@archlinux.org>
# Contributor: Felix Yan <felixonmars@archlinux.org>
# Contributor: ponsfoot <cabezon dot hashimoto at gmail dot com>
# Contributor: UTUMI Hirosi <utuhiro78 at yahoo dot co dot jp>
## Mozc compile option
_bldtype=Release
_mozc_commit=a0fc18b
## follow the submodule commits in https://github.com/fcitx/mozc/tree/fcitx/src/third_party
_abseil_cpp_commit=1feab4f
_breakpad_commit=8988364
_gtest_commit=65cfeca
_gyp_commit=c6d8b9f
_japanese_usage_dictionary_commit=a4a6677
_jsoncpp_commit=3d9bf8e
_protobuf_commit=3560e23
_dictext_commit=01490262
## the latest release from https://osdn.net/projects/ponsfoot-aur/storage/mozc/
_zipcode_rel=202110
_pkgbase=mozc
pkgname=fcitx5-mozc-ext-neologd
pkgdesc="Fcitx5 Module of Mozc (Google Japanese Input OSS) with external generated dictionaries (NEologd and Sudachi.)"
pkgver=2.29.5111.102.ga0fc18b
pkgrel=2
arch=('x86_64')
url="https://github.com/google/mozc"
license=('custom')
depends=('qt5-base' 'fcitx5')
makedepends=('pkg-config' 'python' 'curl' 'gtk2' 'mesa' 'subversion' 'bazel' 'git' 'clang' 'python-six' 'zsh' 'ruby' 'xz')
conflicts=('mozc' 'mozc-server' 'mozc-utils-gui' 'mozc-fcitx' 'fcitx-mozc' 'fcitx5-mozc-ut' 'fcitx-mozc-neologd-ut' 'fcitx-mozc-ut-unified' 'fcitx-mozc-ut-unified-full' 'fcitx5-mozc')
source=(git+https://github.com/fcitx/mozc.git#commit=${_mozc_commit}
${_zipcode_rel}.zip
http://osdn.net/projects/ponsfoot-aur/storage/mozc/jigyosyo-${_zipcode_rel}.zip
http://osdn.net/projects/ponsfoot-aur/storage/mozc/x-ken-all-${_breakpad_commit}
git+https://chromium.googlesource.com/breakpad/breakpad#commit=${_gtest_commit}
git+https://github.com/google/googletest.git#commit=${_gyp_commit}
git+https://chromium.googlesource.com/external/gyp#commit=${_japanese_usage_dictionary_commit}
git+https://github.com/hiroyuki-komatsu/japanese-usage-dictionary.git#commit=${_jsoncpp_commit}
git+https://github.com/open-source-parsers/jsoncpp.git#commit=${_protobuf_commit}
git+https://github.com/google/protobuf.git#commit=${_abseil_cpp_commit}
git+https://github.com/abseil/abseil-cpp.git#commit=${_dictext_commit}
git+https://github.com/reasonset/mozcdict-ext.git#commit=)
sha512sums=('SKIP'
'606f45d48a9dad0e80a566cab0001910de3c6b2f634ec52c6ef6f44745b55ae8e181b3e3cdf90525a08be1f180eb35900672c90c6ab4f43679a178e863378bbc'
'dec6479b42ddc1355cd882d17824cd874d8f103ad7767bac3f490f04551059d65b2806fa9e3f39a50ced2ecfdd37b75c9ed4536d9ad3bcef9e8c5ae1ec10e302'
'SKIP'
'SKIP'
'SKIP'
'SKIP'
'SKIP'
'SKIP'
'SKIP'
'SKIP')
validpgpkeys=('2CC8A0609AD2A479C65B6D5C8E8B898CBF2412F9') # Weng Xuetian
pkgver(){
cd mozc
# change pkgver is OK because we fixed commit
# parse major.minor.buildid from version template, revision is fixed to 102 for Linux
_bzr_ver=$(sed 's/ //g;$ a echo $MAJOR.$MINOR.$BUILD_OSS.102' src/data/version/mozc_version_template.bzl | source /dev/stdin)
printf "%s.g%s" "${_bzr_ver}" "${_mozc_commit}"
}
prepare() {
cd "$srcdir/mozc"
git submodule init
git config submodule.src/third_party/breakpad.url "$srcdir/breakpad"
git config submodule.src/third_party/gtest.url "$srcdir/googletest"
git config submodule.src/third_party/gyp.url "$srcdir/gyp"
git config submodule.src/third_party/japanese_usage_dictionary.url "$srcdir/japanese-usage-dictionary"
git config submodule.src/third_party/jsoncpp.url "$srcdir/jsoncpp"
git config submodule.src/third_party/protobuf.url "$srcdir/protobuf"
git config submodule.src/third_party/abseil-cpp.url "$srcdir/abseil-cpp"
git -c protocol.file.allow=always submodule update
cd src
# Generate zip code seed
echo "Generating zip code seed..."
PYTHONPATH="$PWD:$PYTHONPATH" python dictionary/gen_zip_code_seed.py --zip_code="${srcdir}/x-ken-all.csv" --jigyosyo="${srcdir}/JIGYOSYO.CSV" >> data/dictionary_oss/dictionary09.txt
echo "Done."
# Include NEologd
cd "$srcdir/mozcdict-ext"
echo "Generating extra dictionaries..."
(
cd neologd
MOZC_ID_FILE="$srcdir/mozc/src/data/dictionary_oss/id.def" zsh mkdict.zsh
cd ../sudachi
MOZC_ID_FILE="$srcdir/mozc/src/data/dictionary_oss/id.def" zsh mkdict.zsh
) | ruby .dev.utils/uniqword.rb 2> /dev/null >> "$srcdir/mozc/src/data/dictionary_oss/dictionary09.txt"
cd "$srcdir/mozc"
cd src
# disable fcitx4 target
rm unix/fcitx/fcitx.gyp
# disable android-ndk requirement, even if we don't need it bazel will complain
sed "/android_ndk_repository/d" -i WORKSPACE.bazel
# adjust QT_BASE_PATH
sed 's|path = QT_BASE_PATH|path = "/usr/include/qt"|' -i WORKSPACE.bazel
# Fix @bazel_tools//platforms to @platforms//os
sed 's$@bazel_tools//platforms:(linux|osx|windows|android|freebsd|ios|os)$@platforms//os:\1$' -E -i third_party/gtest/BUILD.bazel
}
build() {
# Fix compatibility with google-glog 0.3.3 (symbol conflict)
CFLAGS="${CFLAGS} -fvisibility=hidden"
CXXFLAGS="${CXXFLAGS} -fvisibility=hidden"
cd mozc/src
QT_BASE_PATH=/usr/include/qt ../scripts/build_fcitx5_bazel
# Extract license part of mozc
head -n 29 server/mozc_server.cc > LICENSE
}
package() {
cd mozc/src
export PREFIX="${pkgdir}/usr"
export _bldtype
../scripts/install_server_bazel
install -d "${pkgdir}/usr/share/licenses/$pkgname/"
install -m 644 LICENSE data/installer/*.html "${pkgdir}/usr/share/licenses/${pkgname}/"
install -d "${PREFIX}/share/fcitx5/addon"
install -d "${PREFIX}/share/fcitx5/inputmethod"
install -d "${PREFIX}/lib/fcitx5"
../scripts/install_fcitx5_bazel
}