Skip to main content

pyopenjtalk-plus

PyPI Python package License

pyopenjtalk-plus は、各フォークでの改善を一つのコードベースにまとめ、さらなる改善を加えることを目的とした、pyopenjtalk の派生ライブラリです。

Changes in this fork

  • パッケージ名を pyopenjtalk-plus に変更
    • ライブラリ名は pyopenjtalk から変更されておらず、pyopenjtalk 本家同様に import pyopenjtalk でインポートできる
    • pyopenjtalk 本家のドロップイン代替として利用できる
  • Python 3.10 以降をサポート(3.10 / 3.11 / 3.12 / 3.13 / 3.14)
    • v0.4.1-post9 以降、Python 3.9 のサポートを終了した
    • CI 対象の Python バージョンは 3.11 以降をメインとしている
  • Windows・macOS (x64 / arm64)・Linux すべての事前ビルド済み wheels を PyPI に公開
    • pyopenjtalk は hts_engine_API・OpenJTalk・Cython に依存しており、ビルド環境の構築難易度が比較的高い
      • 特に Windows においては MSVC のインストールが必要となる
    • 事前ビルド済みの wheels を PyPI に公開することで、ビルド環境のない PC でも簡単にインストール可能にすることを意図している
  • Python 側と Cython 側の両方に型ヒント (Type Hints) を追加
  • Cython を 3.0 系に更新 (v0.3.4-post6 以降)
    • https://github.com/cython/cython/issues/5982 の通り、Python 3.13 では一部の非推奨 C API が削除されている
    • Cython 0.x 系では Python 3.13 以降のビルドに失敗するため、Cython 3.0 系に更新した
  • numpy 2.x 系に対応 (v0.3.4-post6 以降)
    • numpy 2.x 系では互換性のない変更が多数行われているが、公式ドキュメント によると「numpy 2.x 系でビルドした wheel であれば numpy 1.x 系でも動作する」らしい
      • pyopenjtalk-plus では、numpy 2.x 系でビルドした wheel を公開することで対応した
    • marine-plus の最新版でも numpy 2.x 系へ対応済みのため、numpy 1.x 縛りから解放されている
  • pyopenjtalk.run_frontend() 関数に CLI インターフェイスを追加 (v0.3.4-post6 以降)
    • コマンドライン引数としてテキストを受け取り、そのテキストを処理した結果を標準出力に出力する
    • 実行例: python -m pyopenjtalk "あらゆる現実を、すべて自分の方へねじ曲げたのだ。"
  • OpenJTalk 向けシステム辞書を、pyopenjtalk では初回実行時に自動ダウンロードされる open_jtalk_dic_utf_8-1.11.tar.gz から、独自にカスタマイズした pyopenjtalk-plus 向け辞書 (wheel に同梱) に変更
    • この辞書は n5-suzuki/pyopenjtalk にかつて含まれていた mecab-naist-jdic のカスタム版をベースに、jpreprocess/naist-jdic での改良点を取り込み、さらに独自に改良したもの
    • jpreprocess/naist-jdic では mecab-naist-jdic に jpreprocess 向けの改良が施されており、辞書データのミスの修正など有用な変更が多かったことから、修正内容をほぼすべて適用した
    • 辞書 CSV を用途別に分割し、大規模なコスト監査・同形異音語整理・neologd 由来パッチ取り込みを継続している
      • naist-jdic.csv: naist-jdic (を魔改造した何か)
        • 数十万行あり管理が大変なため、v0.4.1-post8 以降の変更内容は scripts/modify_dictionary.py にコード化して管理している
      • unidic-csj.csv: UniDic-CSJ v2.2.0 のうち、naist-jdic に不足していた語彙を品詞体系の変換・コスト調整の上で追加したと思われる何か
      • fillers.csv / symbols.csv / rare_syllables.csv: メンテナンス性の観点から、フィラー・記号・稀な音節を上記から切り出したもの
      • heteronyms.csv: tsqyomi 向けの同形異音語候補辞書(手動編集)
    • pyopenjtalk 本家で実装されていた _lazy_init() 関数内での辞書ダウンロード処理は pyopenjtalk-plus での辞書同梱に伴い削除している
      • 辞書データがなければ pyopenjtalk は動作しないため (つまり辞書をダウンロードしない選択肢はなく必須) 、毎回追加でダウンロードするよりも wheel に直接含めた方が安定性の面でよりベターだと考えた
      • pyopenjtalk-plus の辞書データは 100MB 以上あるが (wheel 自体は圧縮が効いて 25MB 程度) 、せいぜい数十 MB のサイズ節約よりもアクセント・読み推定精度の向上を優先した
    • カスタム辞書は pyproject.toml のあるディレクトリで uv run task build-dictionary を実行するとビルドできる
      • 管理の簡便化のため、ビルド済みの辞書データ (*.bin / *.dic) はこの Git リポジトリに含めている
  • pyopenjtalk.run_frontend() や pyopenjtalk.g2p() でも run_marine=True を指定し marine によるアクセント推定を行えるようにした
    • 以前から pyopenjtalk.extract_fullcontext() では marine による AI アクセント推定が可能だったが、pyopenjtalk.run_frontend() や pyopenjtalk.g2p() にも実装した
      • 「デフォルトの学習済みモデルは JSUT コーパスのみから学習されており、論文に記載されている性能とは異なる」(≒ marine 開発元の LINE 社内では独自の音声コーパスを用いてより高性能な学習済みモデルを作成・運用している) 旨が marine の README に記載されている
      • このためデフォルトの学習済みモデルを使う限り、現状 OpenJTalk のアクセント推定の方が精度が高い傾向にある
    • pyopenjtalk-plus では PyTorch への依存が発生することからデフォルトの依存関係には含めていないが、別途 marine / marine-plus をインストールすれば利用可能
    • marine 本家は Windows や Python 3.12 以降に非対応な上、非推奨警告が多数出力される問題があるため、これらの問題に対処した marine-plus の利用を推奨します
      • pip install pyopenjtalk-plus[marine] で pyopenjtalk-plus と同時に marine-plus をインストールできる
  • litagin02/pyopenjtalk での変更を取り込み、pyopenjtalk.unset_user_dict() 関数を追加
    • VOICEVOX で利用されている VOICEVOX/pyopenjtalk には、VOICEVOX ENGINE で利用するためのユーザー辞書機能が独自に実装されている
    • その後、pyopenjtalk v0.3.4 で VOICEVOX/pyopenjtalk と同等のユーザー辞書機能が実装された
      • VOICEVOX/pyopenjtalk の set_user_dict() 関数が update_global_jtalk_with_user_dict() 関数になるなど、同等の機能ながら関数名は変更されている
      • …が、どういう訳か VOICEVOX/pyopenjtalk には存在した「設定したユーザー辞書をリセットする」関数が実装されていない
    • このため litagin02/pyopenjtalk では VOICEVOX/pyopenjtalk から pyopenjtalk.unset_user_dict() 関数が移植されており、pyopenjtalk-plus でもこの実装を継承した
    • v0.4.1-post9 以降、tsqyomi 利用時向けの読み保護指定機能を追加した
      • update_global_jtalk_with_user_dict() には .dic パス文字列のほか、UserDictionaryEntry (dic_path + is_reading_protected) のリストも渡せる
      • is_reading_protected=True にしたユーザー辞書エントリは、tsqyomi による MeCab feature 差し替えから保護される
    • このほか、クロスプラットフォームで wheel をビルドするための GitHub Actions ワークフローもこのフォークから取り込んだもの
  • VOICEVOX/pyopenjtalk での変更を取り込み、多数の改良点を反映
    • OpenJTalk の VOICEVOX 向けフォーク (VOICEVOX/open_jtalk) での変更内容を前提とした変更が多数含まれる
    • 取り込んだ変更点 (一部):
      • text2mecab() 関数を安全に改良し、エラー発生時に適切な RuntimeError を送出する
      • ARM 版 Windows でビルド可能にする
      • Windows で辞書の保存先パスに日本語を含むマルチバイト文字が含まれるとエラーが発生する問題を修正
      • 各環境でのビルドに関連する諸問題を修正
      • (OpenJTalk 側のみ) OpenJTalk 本体だけでユーザー辞書を読み込める Mecab_load_with_userdic() 関数を追加
      • (OpenJTalk 側のみ) 辞書のコンパイルに利用される mecab-dict-index モジュールにログ出力を抑制する --quiet オプションを追加
      • (OpenJTalk 側のみ) mecab-dict-index モジュールの main() 関数 (元は CLI コマンド用) をコメントアウト
        • OpenJTalk は MeCab のソースコードがベース、その MeCab 自体も非常にレガシーなソフトウェアで、お世辞にも綺麗なコードではない
        • このためか pyopenjtalk の辞書コンパイル機能は「CLI コマンド mecab-dict-index の argv と argc に相当する値を、ライブラリ側から OpenJTalk の mecab_dict_index() 関数 (mecab-dict-index コマンドのエントリーポイント) の引数として注入する」という非常にトリッキーかつ強引な手法で実装されている
        • どのみち pyopenjtalk 向け OpenJTalk では mecab-dict-index コマンドをビルドする必要がない
  • n5-suzuki/pyopenjtalk での変更を取り込み、多数の改良点を反映
    • 複数の読み方をする漢字の読みに対し SudachiPy で形態素解析を行い、得られた結果を使い OpenJTalk から返された list[NJDFeature] 内の値を補正する実装がユニーク
    • 「何」を「なん」と読むか「なに」と読むかを判定するための scikit-learn で実装された機械学習モデルによるロジック に関して、学習済みモデルを ONNX に変換し、scikit-learn 0.24.2 への依存なしに動かせるよう改良した
      • 当該モデルは scikit-learn 0.24.2 でしか動作しないが、3年以上前にリリースされた極めて古いバージョンにつき Python 3.11 以降では動作せず、依存関係の問題もありインストール自体が困難になってきている
      • 学習用コードは含まれていなかったため推測するしかないが、モデルのバイナリに含まれる文字列から、RandomForestClassifier を用いた比較的単純な機械学習モデルだと推測される
      • ONNX 変換ツール を自作した上で ONNX に変換し、推論コード も ONNX Runtime を用いて推論するよう変更した
        • ONNX 推論には pip install pyopenjtalk-plus[onnxruntime] が必要
          • ONNX Runtime には onnxruntime-gpu など複数の排他的なバリエーションがあり、依存関係側で導入パッケージを固定すると CPU 版しかインストールできなくなってしまうため、敢えて必須依存関係には設定していない
        • ONNX Runtime 1.26 以降で推論結果が壊れる問題があったため、v0.4.1-post9 以降ではモデルを明示的に二クラス確率で出力する形へ移行している
          • v0.4.1-post9 以降では、フェイルセーフとして「何を」「何が」など文脈から「ナニ」と確定できる場合は、モデルより先に決定論的ガードが適用される
  • korguchi/pyopenjtalk での変更を取り込み、多数の改良点を反映
    • このフォークで利用されている korguchi/open_jtalk では、「クァ」「グヮ」「デェ」「フュ」「シィ」などの比較的珍しい音素のサポートが追加されている
    • ほかにも「!」(感嘆符)を「記号/一般」として正しく推定するための改良など、概ね副作用なしに精度向上が見込めることから、有用性を鑑みほぼそのままマージした
    • この関係で、pyopenjtalk 本家とは一部音素での挙動が異なる
  • sabonerune/pyopenjtalk での変更を取り込み、スレッドセーフ化と一部 Cython コードの nogil 化を達成 (v0.3.4-post6 以降)
    • スレッドセーフ化により、複数スレッドから安全に pyopenjtalk を呼び出せるようになった
    • 一部 Cython コードの nogil 化により、若干のパフォーマンス向上も見込める
    • https://github.com/r9y9/pyopenjtalk/pull/87 と https://github.com/r9y9/pyopenjtalk/pull/88 の内容を一部改変の上で取り込んだ
    • グローバルインスタンスは内部ロックで直列化されるため、高並列用途ではスレッドごとに OpenJTalk() を生成し jtalk= 引数で渡すことを推奨する
    • v0.4.1-post9 以降、ユーザー辞書の差し替え (update_global_jtalk_with_user_dict() / unset_user_dict()) は、進行中の処理を待ってからグローバルインスタンスを交換するように改良した
  • stellanomia/haqumei での優れた実装・ロジック・テストを移植・バックポートし、複数の機能追加とパフォーマンスの大幅改善を達成 (v0.4.1-post8 以降)
    • Haqumei は pyopenjtalk-plus の Rust 再実装であり、その実装過程で発見・整備された設計・ロジック・テストを多数バックポートした
    • 形態素-音素マッピング API を移植・追加 (Haqumei の g2p_mapping_detailed() に相当):
      • run_frontend_detailed(): MeCab 解析 1 回で NJD features と MeCab 形態素 (MecabMorph) を同時に取得
      • make_phoneme_mapping(): 音素と形態素の対応マッピングを生成
      • g2p_mapping(): 上記をまとめて呼び出す便利ラッパー
      • types.py に MecabMorph / SurfacePhonemeMapping TypedDict を追加
      • SurfacePhonemeMapping を NJDFeature のスーパーセットに拡張し、HTS ラベルを解析せずにアクセント句境界・核位置・品詞・読みなどをまとめて取得可能にした
      • g2p_mapping() / make_phoneme_mapping() の返却値 char_span(入力テキスト上の半開区間)を追加 (v0.4.1-post9 以降)
    • 発音復元オプションを移植 (Haqumei の revert_pron_to_read() に相当)
      • use_read_as_pron: 全ての発音 (pron) を強制的に読み (read) で上書きする
      • revert_long_vowels: 辞書が自動的に長音化した発音のみ元の読みに戻す
      • revert_yotsugana: 四つ仮名 (ヅ・ヂ) の発音統合を復元する
    • g2p() 実行時、Haqumei と同様に Cython 側で JPCommonLabel から直接音素列を取得するよう変更し、パフォーマンスを改善
    • use_sudachi_kanji_yomi / predict_nani / normalize_mode フラグを追加し、速度と精度のトレードオフがある機能を個別にオンオフ可能にした
    • Mecab_analysis() 内の lattice->clear() を Mecab_refresh() に移動し、Cython 側からの MeCab Lattice ノード走査を実現
    • Haqumei の充実したテストスイートを移植・追加し、テストカバレッジを大幅に向上
  • フロントエンド API を段階実行可能に分割
    • MeCab 解析・NJD 処理・後処理を個別に呼び出し、カスタムパイプラインや候補読みの比較が可能になった
    • run_mecab() / run_njd_from_mecab(): v0.4.1-post4 以降
    • run_mecab_detailed() / run_mecab_nbest_features(): v0.4.1-post9 以降
  • tsqyomi (Text-to-Speech Quick Yomi Optimized Minimal Inferencer) による文脈を考慮した読み選択機能を統合 (v0.4.1-post9 以降)
    • 同形異音語の読みを、専用モデルを用いて文脈を考慮して選択できる
      • tsqyomi を併用する場合、事前に任意のタイミングで pyopenjtalk.tsqyomi.load_model() を呼び出したあと、use_tsqyomi=True を g2p() / run_frontend() / g2p_mapping() / extract_fullcontext() / tts() 等に指定して有効化する
    • 追加の依存関係を含むため、別途 pip install pyopenjtalk-plus[tsqyomi]
      • 初回利用時に Hugging Face から ONNX モデルがダウンロードされる
    • tsqyomi を有効にした場合は、Sudachi による読み補正と「何」推定用 AI モデルは自動的に無効化され、tsqyomi による選択結果が優先される
  • フロントエンド共通オプションを整理
    • 主要 API (g2p() / run_frontend() / g2p_mapping() 等) で共通利用できる主なフラグ:
      • run_marine: marine を用いたアクセント推定を行うか
      • use_vanilla: pyopenjtalk-plus 独自の後処理を省略し、OpenJTalk の素の NJDFeature をそのまま後段に流す
      • use_tsqyomi: ロード済みの tsqyomi で文脈に合う読み候補を選ぶ (v0.4.1-post9 以降)
      • use_sudachi_kanji_yomi: Sudachi による同形異音語の読み補正を行う (v0.4.1-post8 以降 / use_tsqyomi=True 時は無効)
      • predict_nani: ONNX モデルで単独形態素として出現した「何」の読みを推定する (v0.4.1-post8 以降 / use_tsqyomi=True 時は無効)
      • normalize_mode: 入力テキストに適用する Unicode 正規化方式 (v0.4.1-post8 以降 / "None" / "NFC" / "NFKC")
      • use_read_as_pron / revert_long_vowels / revert_yotsugana: 発音形の復元オプション (v0.4.1-post8 以降)
  • submodule の OpenJTalk を tsukumijima/open_jtalk に変更
  • submodule の hts_engine_API を syoyo/hts_engine_API に変更
  • ライブラリの開発環境構築・ビルド・コード整形・テストを taskipy によるタスクランナーでの管理に変更
  • 利用予定のない Travis CI 向けファイルを削除
  • 不要な依存関係の削除、依存バージョンの整理
  • その他精度の改善・コードのクリーンアップ、非推奨警告の解消など

Installation

下記コマンドを実行して、ライブラリをインストールできます。

pip install pyopenjtalk-plus[onnxruntime]

# 「ONNX モデルで単独形態素として出現した「何」の読みを推定する」機能を使わない場合
pip install pyopenjtalk-plus

# marine によるアクセント推定を使う場合
pip install pyopenjtalk-plus[marine]

# tsqyomi による同形異音語の文脈読み選択を使う場合
pip install pyopenjtalk-plus[tsqyomi]

# 複数の extras を同時にインストール
pip install "pyopenjtalk-plus[onnxruntime,marine,tsqyomi]"

Development

開発環境は macOS / Linux 、Python バージョンは 3.10 以上が前提です (Python 3.11 以降を推奨) 。

# submodule ごとリポジトリを clone
git clone --recursive https://github.com/tsukumijima/pyopenjtalk-plus.git
cd pyopenjtalk-plus

# uv をインストールし、.venv/ 以下の仮想環境を作成
pip install uv
uv venv

# ライブラリ自身とその依存関係を .venv/ 以下の仮想環境にインストールし、開発環境を構築
uv sync --group dev

# コード整形
uv run task lint
uv run task format

# テストの実行
uv run task test

# Pyright による型チェック
uv run task typecheck

# pyopenjtalk/dictionary/ 以下にある MeCab / OpenJTalk 辞書をビルド
## ビルド成果物は同ディレクトリに *.bin / *.dic として出力される
## ビルド後の辞書データは数百 MB あるバイナリファイルだが、取り回しやすいよう敢えて Git 管理下に含めている
uv run task build-dictionary

# ライブラリの wheel と sdist をビルドし、dist/ に出力
uv run task build

# ビルド成果物をクリーンアップ
uv run task clean

下記ならびに docs/ 以下のドキュメントは、pyopenjtalk 本家のドキュメントを改変なしでそのまま引き継いでいます。
これらのドキュメントの内容が pyopenjtalk-plus にも通用するかは保証されません。


pyopenjtalk

PyPI Python package Build Status License DOI

A python wrapper for OpenJTalk.

The package consists of two core components:

  • Text processing frontend based on OpenJTalk
  • Speech synthesis backend using HTSEngine

Notice

  • The package is built with the modified version of OpenJTalk. The modified version provides the same functionality with some improvements (e.g., cmake support) but is technically different from the one from HTS working group.
  • The package also uses the modified version of hts_engine_API. The same applies as above.

Before using the pyopenjtalk package, please have a look at the LICENSE for the two software.

Build requirements

The python package relies on cython to make python bindings for open_jtalk and hts_engine_API. You must need the following tools to build and install pyopenjtalk:

  • C/C++ compilers (to build C/C++ extentions)
  • cmake
  • cython

Supported platforms

  • Linux
  • Mac OSX
  • Windows (MSVC) (see this PR)

Installation

pip install pyopenjtalk

Development

To build the package locally, you will need to make sure to clone open_jtalk and hts_engine_API.

git submodule update --recursive --init

and then run

pip install -e .

Quick demo

Please check the notebook version here (nbviewer).

TTS

In [1]: import pyopenjtalk

In [2]: from scipy.io import wavfile

In [3]: x, sr = pyopenjtalk.tts("おめでとうございます")

In [4]: wavfile.write("test.wav", sr, x.astype(np.int16))

Run text processing frontend only

In [1]: import pyopenjtalk

In [2]: pyopenjtalk.extract_fullcontext("こんにちは")
Out[2]:
['xx^xx-sil+k=o/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:5_5%0_xx_xx/H:xx_xx/I:xx-xx@xx+xx&xx-xx|xx+xx/J:1_5/K:1+1-5',
'xx^sil-k+o=N/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'sil^k-o+N=n/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'k^o-N+n=i/A:-3+2+4/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'o^N-n+i=ch/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'N^n-i+ch=i/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'n^i-ch+i=w/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'i^ch-i+w=a/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'ch^i-w+a=sil/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'i^w-a+sil=xx/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'w^a-sil+xx=xx/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:5_5!0_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:xx_xx%xx_xx_xx/H:1_5/I:xx-xx@xx+xx&xx-xx|xx+xx/J:xx_xx/K:1+1-5']

Please check lab_format.pdf in HTS-demo_NIT-ATR503-M001.tar.bz2 for more details about full-context labels.

Grapheme-to-phoeneme (G2P)

In [1]: import pyopenjtalk

In [2]: pyopenjtalk.g2p("こんにちは")
Out[2]: 'k o N n i ch i w a'

In [3]: pyopenjtalk.g2p("こんにちは", kana=True)
Out[3]: 'コンニチワ'

Create/Apply user dictionary

  1. Create a CSV file (e.g. user.csv) and write custom words like below:
GNU,,,1,名詞,一般,*,*,*,*,GNU,グヌー,グヌー,2/3,*
  1. Call mecab_dict_index to compile the CSV file.
In [1]: import pyopenjtalk

In [2]: pyopenjtalk.mecab_dict_index("user.csv", "user.dic")
reading user.csv ... 1
emitting double-array: 100% |###########################################|

done!
  1. Call update_global_jtalk_with_user_dict to apply the user dictionary.
In [3]: pyopenjtalk.g2p("GNU")
Out[3]: 'j i i e n u y u u'

In [4]: pyopenjtalk.update_global_jtalk_with_user_dict("user.dic")

In [5]: pyopenjtalk.g2p("GNU")
Out[5]: 'g u n u u'

About run_marine option

After v0.3.0, the run_marine option has been available for estimating the Japanese accent with the DNN-based method (see marine). If you want to use the feature, please install pyopenjtalk as below;

pip install pyopenjtalk[marine]

And then, you can use the option as the following examples;

In [1]: import pyopenjtalk

In [2]: x, sr = pyopenjtalk.tts("おめでとうございます", run_marine=True) # for TTS

In [3]: label = pyopenjtalk.extract_fullcontext("こんにちは", run_marine=True) # for text processing frontend only

LICENSE

Acknowledgements

HTS Working Group for their dedicated efforts to develop and maintain Open JTalk.

Metadata

Release files for pyopenjtalk-plus 0.4.1.post9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyopenjtalk-plus 0.4.1.post9
File Size Uploaded
pyopenjtalk_plus-0.4.1.post9.tar.gz 25.0 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for pyopenjtalk-plus 0.4.1.post9
File
pyopenjtalk_plus-0.4.1.post9-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details
pyopenjtalk_plus-0.4.1.post9-cp314-cp314-macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64) Details
pyopenjtalk_plus-0.4.1.post9-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.24+ ARM64 Details
pyopenjtalk_plus-0.4.1.post9-cp313-cp313-macosx_10_13_universal2.whl CPython 3.13 CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) Details
pyopenjtalk_plus-0.4.1.post9-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.24+ ARM64 Details
pyopenjtalk_plus-0.4.1.post9-cp312-cp312-macosx_10_13_universal2.whl CPython 3.12 CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) Details
pyopenjtalk_plus-0.4.1.post9-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details
pyopenjtalk_plus-0.4.1.post9-cp311-cp311-macosx_10_9_universal2.whl CPython 3.11 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) Details
pyopenjtalk_plus-0.4.1.post9-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 Details
pyopenjtalk_plus-0.4.1.post9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.24+ ARM64, Linux glibc 2.28+ ARM64 Details
pyopenjtalk_plus-0.4.1.post9-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 592.3 MB

Release files / pyopenjtalk_plus-0.4.1.post9.tar.gz

Download URL pyopenjtalk_plus-0.4.1.post9.tar.gz
Size 25.0 MB
Tags Source
SHA-256 checksum
How to use checksums
cdcb0746659857554c6dad23956cad77e21f76c9f3dfa000ea2f8d4f0ba11d99
BLAKE2b-256 checksum
How to use checksums
1ae703cc1d971260ae90cc35370965d6d8e612cc8b8588d2f81db7cd2accf9ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp314-cp314-win_amd64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp314-cp314-win_amd64.whl
Size 25.7 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
273a7829ebbc4ddfa94c11bdf47d0aac89b418a144afb6b9d80c745416e47578
BLAKE2b-256 checksum
How to use checksums
0f0da8542f269f7e912fb2920fa7d1eaf8e88c36bd1ea915c63c350fc5378f45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 31.3 MB
Tags CPython 3.14 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
71d06f9318d6fcdf63ba61549ea22765d674a8cfb8a29984b73915cd7cf40486
BLAKE2b-256 checksum
How to use checksums
ecde2cb80918d0a7b7f0260a97203f383ed79cc222b28e5b1cd95eed10b17f84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 31.3 MB
Tags CPython 3.14 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
d669b461203e453698da8f3a1772d15802e64cc4f0d0278d65223d30339d0302
BLAKE2b-256 checksum
How to use checksums
81e58d555862f0f7f929aab041fb51d1afc6240552bbcbd2d6cf4af0a1e3ed9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp314-cp314-macosx_10_15_universal2.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp314-cp314-macosx_10_15_universal2.whl
Size 25.7 MB
Tags CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
75d1a93e97fe627ee88a5cc9c03af48cef440a957e66aab801e4be0bc1972384
BLAKE2b-256 checksum
How to use checksums
ded104c4a08db318048ca632994bcae2b46a5401dd25b1ea53effd19aacf642d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp313-cp313-win_amd64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp313-cp313-win_amd64.whl
Size 25.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
f3699de7491d958685ffd2656cb0f3ac1d5c1ca469f3da7caf2e5aa4617ef3b1
BLAKE2b-256 checksum
How to use checksums
a5eaf5f4c9d1dd9f1788e9bf22a05ed28e6aa15698decda247bf1563610a5538
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 31.4 MB
Tags CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f7c1048013e8ce100f4f9d489d2acfc603756fb1a62ca0a2310475bc7e4fa365
BLAKE2b-256 checksum
How to use checksums
22d919994eae3451aafdff7d24ef73d06c259d310c8fe5b091725d42b291e234
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 31.3 MB
Tags CPython 3.13 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
10d3b80ac91f193861909f08b945b11e037965f6eadb767529b975465382282c
BLAKE2b-256 checksum
How to use checksums
1327ebf087640df43f6f319cde946a69dba082b1ecb82f56b8106e62e09c4c05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp313-cp313-macosx_10_13_universal2.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp313-cp313-macosx_10_13_universal2.whl
Size 25.7 MB
Tags CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
7122013811e02ac7c2676c4bd7e5c2d37eb6f02b11944ff1fdf3fa4667d4cd5c
BLAKE2b-256 checksum
How to use checksums
282b3b77d3b18808f719106988df846956762026150447f6bc4e37372a195294
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp312-cp312-win_amd64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp312-cp312-win_amd64.whl
Size 25.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
7c13d8370d82e625c3ac0712d813da498c8f145f6ff246aec482753db952a5a9
BLAKE2b-256 checksum
How to use checksums
9cf3bf7c62d0c0e8543a6b93d18df4527a0f060b5a21dd7e64408fa16e98ebad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 31.4 MB
Tags CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
856b1ee7be326015490c23fc55046688492e2d99554852e476a24a10c8e77ba0
BLAKE2b-256 checksum
How to use checksums
8137aa7b83620b5aadd7f47c42d0f04a2cad535e7fece52cc0c2387b97db3e85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 31.3 MB
Tags CPython 3.12 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f98993e1e943d4313e4113992b137714c0ac8f6a383d1fd89747a592222bdddf
BLAKE2b-256 checksum
How to use checksums
e1ced1d01cbdc4b2ba9b01919f6f017856997d8fe4fac035e8e0fd08923384b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp312-cp312-macosx_10_13_universal2.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp312-cp312-macosx_10_13_universal2.whl
Size 25.7 MB
Tags CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
3a0c9e3d7a61e72be10c6e2dc37449037e72b2b6c7a97633eb03e393836936a2
BLAKE2b-256 checksum
How to use checksums
4946f509711876c6997842586bd7a55f8803dc0d37d8aa2ab65485d36b844507
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp311-cp311-win_amd64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp311-cp311-win_amd64.whl
Size 25.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
58cda3998e1c8f4d820e07757803e8cd9ad324c359af59f398c30ba38fb88865
BLAKE2b-256 checksum
How to use checksums
18df50e8185a5a5d441e404af7c0407491bc92ca76d44ceaf8cd086066365184
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 31.4 MB
Tags CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
b3a991396d641cf5983bf3c49e932d6f878c8a12215cad64871c82354d22cd78
BLAKE2b-256 checksum
How to use checksums
fa71e6937ce16f4d1c35a161e463e0176220a3147ee214f9f56ebc0b1632cc60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 31.3 MB
Tags CPython 3.11 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f35a6b1f977347c8b6b233728bc971fa6561cbcb1a23f6c94a79a8c763d64401
BLAKE2b-256 checksum
How to use checksums
a129e55ccaeffb6746aa5c5d9f5365472c8899e21e788f33a7e4d8156045aa73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp311-cp311-macosx_10_9_universal2.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp311-cp311-macosx_10_9_universal2.whl
Size 25.7 MB
Tags CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
5e91f4d43740e550bc8a1fb8923fd5a490f06f5fbcac0fba9280e3b7d7b954e9
BLAKE2b-256 checksum
How to use checksums
022c8dacb54db5148d65802d2932fae702227e7ebbc4e8578ba417da872cc61d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp310-cp310-win_amd64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp310-cp310-win_amd64.whl
Size 25.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
c2624815bef0528628bbdc52dec298b0eb577df261f19088b7bb5018c5ca0b51
BLAKE2b-256 checksum
How to use checksums
4002939abaa07066337ce1a9e405159f186b2b383fd4ab89754c68af6af29026
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Size 31.3 MB
Tags CPython 3.10 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5acf59e7a0750a5a35e1a76a724f257e995a71f8c06ff945f8436b8f9b62b5b9
BLAKE2b-256 checksum
How to use checksums
0b4da95e20214716b07ba89260c24bab157ff3f3b91a0a41c5e04ff103a2d844
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Size 31.2 MB
Tags CPython 3.10 Linux glibc 2.24+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5b0e6ddebf2cf60ef480e1a9861ff2f08e6b04e70fe3ca62f349f601af6adb5b
BLAKE2b-256 checksum
How to use checksums
e732ebfe5a5153ec7fb468142ed674418ba1381afcb2f50d5fb3f6f2e64e569e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pyopenjtalk_plus-0.4.1.post9-cp310-cp310-macosx_10_9_universal2.whl

Download URL pyopenjtalk_plus-0.4.1.post9-cp310-cp310-macosx_10_9_universal2.whl
Size 25.7 MB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
1f0de887a624b86109464d9ec819e705d7412ebeda87a6abc0f828fc48091932
BLAKE2b-256 checksum
How to use checksums
fcb6faca99e7015b81706f819fb7239e1e1d73d941ba6c9b420e63d6a245a911
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page