Closed tikisi closed 5 months ago
convert_yomi.sh
中でのiconvによる文字コード変換の順番を変更することで、Julius.shで読み込み可能なdicファイルを生成できることを確認。
iconv -f utf-8 -t eucjp dic_tmp | yomi2voca.pl
cat dic_tmp | yomi2voca.pl | iconv -f utf-8 -t eucjp
yomi2voca.pl
はyomiからdicへの変換を行うperlスクリプト、dic_tmp
はyomiファイルをコピーしたファイルである。
以前はiconvでyomiファイルをeucjpに変換してからperlへ渡していたが、現在はperlへ渡した後にeucjpに変換することで期待する動作となっている。(変更後のスクリプトで生成されたdicファイルは06/kudamono.dic
と一致することを確認済み。)
この原因は調査中だが、おそらくperlの扱う文字コードがラズパイ3と異なっている?のではないかと思う。
関連するスクリプト
おそらくOSにインストールされているperlのバージョンが上がったことが原因。
perl5.26からUTF-8ロケールのデフォルト照合順序を使用するようになった。
そのため、kudamono.yomi
中の文字列をutf-8で解釈していると考えられる。
https://perldoc.jp/docs/perl/5.26.0/perl5260delta.pod#Perl32can32now32do32default32collation32in32UTF-832locales32on32platforms32that32support32it
2022年度以前に利用していたraspbianは2018-04-18-raspbian-stretch
であり、stretchでデフォルトでインストールされているperlのバージョンは5.24。
https://www.debian.org/releases/stretch/i386/release-notes/ch-whats-new.ja.html
対して、現在採用しているraspbianでのperlのバージョンは5.32.1である。
ラズパイのlocaleはおそらくUTF-8なので、 perlにEUCを処理させる従来の方法がまずいですね。 新しい方法で良いと思います。 JuliusもUTF対応してくれれば、変換不要ですね。
JuliusはUTF-8に統一と書いていますが、辞書もUTF-8で受け付けられませんか?
https://github.com/julius-speech/julius/blob/v4.6/00readme-ja.txt
バージョン4.5以前はテキストエンコーディングとして SJISや EUC が混在していましたが、 バージョン4.5から全て UTF-8 に変換されました.
バージョン4.5の時点でのテキストエンコード変換前のコードを "master-4.5-legacy" ブランチで保存してあります.4.5 リリース以前の コードから 4.5 までの差分を見る場合はそちらのブランチを checkout して ください.
UTF-8の辞書ファイルを利用すると、以下のエラーが発生するため避けていました。
InternalError: codeconv: invalid multibyte sequence in the input
しかし、これはjuliusの設定ファイルでEUC-JPからUTF-8に変換するオプション(-charconv)がついていたことが原因のようです。 https://github.com/OmeSatoFoundation/ome2023/blob/8a3f521708d5641660904980de5e64de3460b5a5/contrib/JuliusMisc/julius_conf/default.jconf#L15 このオプションを削除することで、UTF-8の辞書を問題なく処理できることを確認したので以下の対応を行います。
以上で処理全体がUTF-8で行われるようになります。
また、今回の不具合が原因について再度調べてみました。
昨年度まで利用していたyomi2voca.pl
はEUC-JPで記述されていました。
対して、今年度利用しているyomi2voca.pl
はJuliusのバージョン4.5のため、UTF-8で記述されていました。
perlの内部文字列を利用するための記述(use Encode など)も見当たらなかったため、yomi2voca.pl
自体を記述する文字コードでしか日本語の入力を上手く処理できなかったようです。
"第6回 教科書 6.11 自分の単語辞書を作成する"で利用するconvert_yomi.shによって生成されるdicファイルが利用できない。
以下実行時のログ convert_yomi.shの実行ログ (06/kudamono.yomiをそのまま利用)
julius.shでdicファイルを読み込んだときのログ
生成されたdicファイル