Chienomi

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}
        http://osdn.net/projects/ponsfoot-aur/storage/mozc/jigyosyo-${_zipcode_rel}.zip
        http://osdn.net/projects/ponsfoot-aur/storage/mozc/x-ken-all-${_zipcode_rel}.zip
        git+https://chromium.googlesource.com/breakpad/breakpad#commit=${_breakpad_commit}
        git+https://github.com/google/googletest.git#commit=${_gtest_commit}
        git+https://chromium.googlesource.com/external/gyp#commit=${_gyp_commit}
        git+https://github.com/hiroyuki-komatsu/japanese-usage-dictionary.git#commit=${_japanese_usage_dictionary_commit}
        git+https://github.com/open-source-parsers/jsoncpp.git#commit=${_jsoncpp_commit}
        git+https://github.com/google/protobuf.git#commit=${_protobuf_commit}
        git+https://github.com/abseil/abseil-cpp.git#commit=${_abseil_cpp_commit}
        git+https://github.com/reasonset/mozcdict-ext.git#commit=${_dictext_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
}