Pythonでテキストを音素に変換する

多くの言語での単語やテキストの単純な電話化

UnsplashのDenisseLeonによる写真

この記事を読むことで、Pythonで入力テキスト文字列を対応する音素に変換する方法を学びます。音素は、言語の音の最小単位を表します。たとえば、単語

tab

/t/ /a/ /b/

  • 鬼ごっこ
  • 日焼け
  • タップ
  • /t/ /a/ | /b/
    --------|----
    /t/ /a/ | /g/
    /t/ /a/ | /n/
    /t/ /a/ | /p/
    

aɪ pʰiː eɪ

「多言語用のシンプルなテキストから電話へのコンバーター。」

次のセクションに進んで、必要なすべてのモジュールをインストールします。

設定

バージョン3.2.0以降、phonemizerパッケージは次のバックエンドをサポートします。

  • espeak-ng— IPA出力に基づくText-to-Speech(TTS)システム。100以上の言語をサポートしています。
  • espeak-ng-mbrola—IPAの代わりにSAMPA表音アルファベットを使用するespeakの代替バージョン。さらに、出力の単語境界は保持されません。
  • festival—アメリカ英語の代替TTSシステム。音節レベルでのトークン化をサポートしています。
  • segments —ユーザー定義のマッピングファイルに基づいて書記素を音素に変換するUnicodeトークナイザー。

Debian / Ubuntu

次のように簡単にインストールできます。

sudo apt-get install espeak-ng

CentOSまたはFedoraオペレーティングシステムでは、yum代わりに次のコマンドを使用してインストールが行われます。

sudo yum install espeak-ng

macOSユーザーの場合、次の方法でインストールできますbrew。

brew install espeak

Windowsオペレーティングシステムでは、インストーラーを介してインストールできます。リリースページに移動して、目的のmsiインストーラーをダウンロードするだけです。次に、それを実行してマシンにインストールします。

mbrolaはWindowsでは使用できないことに注意してください。

Pythonパッケージ

インストールを続行する前に、新しい仮想環境を作成することを強くお勧めします。

完了したら、仮想環境をアクティブ化し、次のコマンドを実行してインストールしphonemizerます。

pip install phonemizer

git clone https://github.com/bootphon/phonemizer
cd phonemizer
python setup.py install

phonemizerパッケージには、独自のDockerセットアップも付属しています。次のコマンドを使用してDockerイメージを構築できます。

git clone https://github.com/bootphon/phonemizer
cd phonemizer
sudo docker build -t phonemizer .

sudo docker run -it phonemizer /bin/bash

phonemize --version

phonemizer-3.2.0
available backends: espeak-ng-1.49.2, segments-2.2.0
uninstalled backends: espeak-mbrola, festival

と呼ばれる新しいPythonファイルを作成し、main.pyその中に次のコードを追加します。

関数をインポートしてphonemize、文字列または文字列のリストを渡すだけです。文字列を渡すと、文字列が返されます。上記の例では文字列のリストを使用しており、期待される出力は次のとおりです。

['həloʊ wɜːld ', 'wɛlkʌm tə miːdiəm ']

さらに、このphonemize関数は次の引数も受け入れます。

  • language(str)-サポートされているバックエンドに基づく言語識別子。バックエンドについては、次のリンクでサポートされているespeakすべての言語を見つけることができます。バックエンドの場合、言語は書記素から音素へのマッピングのファイルパスです。segments
  • backend(str)—電話化に必要なバックエンド。次のいずれかのオプションである必要があります:espeak、、、または。espeak-mbrolafestivalsegments
  • separator(セパレータオブジェクト)—音素、音節、および単語間の文字列セパレータ。さまざまなバックエンドがさまざまなタイプのセパレータをサポートします。
  • strip(bool)—デフォルトFalseは、トークンの最後の単語と電話の区切り文字を出力します。
  • preserve_empty_lines(bool)—最終出力に空の行を保持するかどうか。デフォルトはFalse、です。これにより、すべての空の行が削除されます。
  • preserve_punctuation(bool)—最終出力で句読点を保持するかどうか。デフォルトはFalse、です。これにより、すべての句読点が削除されます。
  • punctuation_marks(strまたはre.Pattern)—削除または保存中に考慮する句読点を表す文字列または正規表現。
  • with_stress(bool)—音素へのストレスを保持するかどうか。デフォルトはバックエンドFalseにのみ適用されます。espeak
  • njobs(int)—実行中の並列ジョブの数。

さまざまな入力引数に基づく次の出力例を見てください。

['həloʊ wɜːld ', 'wɛlkʌm tə miːdiəm ']
# strip=True
['həloʊ wɜːld', 'wɛlkʌm tə miːdiəm']
# preserve_punctuation=True
['həloʊ, wɜːld! ', 'wɛlkʌm tə miːdiəm! ']
# with_stress=True
['həlˈoʊ wˈɜːld ', 'wˈɛlkʌm tə mˈiːdiəm ']

電話化バックエンドの初期化はコストのかかるプロセスであることに注意してください。関数を呼び出す前に、大きなリストを作成する必要がありphonemizeます。リスト内包内で関数を呼び出さないでください。エラーを以下に示します。

# Bad code
phonemized = [phonemize(x, language='en-us', backend='espeak') for x in text]
# Good code
phonemized = phonemize(text, language='en-us', backend='espeak')

そうすることで、同じインスタンスを再利用backend.phonemizeし、後続の入力で関数を呼び出すことができます。

結論

今日学んだことを要約しましょう。

この記事は、音素と国際音声記号(IPA)の簡単な説明から始まりました。

次に、マシンへのインストール方法espeakとインストール方法について説明しました。phonemizer

phonemizer その後、パッケージの背後にある基本的な概念に移りました。また、最も一般的に使用される議論のいくつかを強調しました。前のセクションでは、使用時に実行を最適化するためのヒントとコツをいくつか紹介しました。phonemizer.

この記事を読んでいただきありがとうございます。先に素晴らしい一日を過ごします!

参考文献

  1. GitHub —フォンマイザー
  2. ドキュメント—フォンマイザー

提案された投稿

脅威ハンティングのための OSINT の収集

脅威ハンティングのための OSINT の収集

サイバー愛好家の皆さん、こんにちは!OSINT for Threat Hunting シリーズへようこそ。最初の記事では、OSINT の概要と脅威ハンティングにおけるその重要性について説明しました。

ドメイン名に関する情報の検索

Brian P. Hogan 著『Small, Sharp Software Tools』からの抜粋

ドメイン名に関する情報の検索

facebook.com にリクエストを送信すると、コンピュータはドメイン名を検索してそのドメイン名を IP アドレスに変換し、コンピュータが接続できるようにします。

関連記事

その脅威アーカイブ: Vol 7 ブラックバスタ

その脅威アーカイブ: Vol 7 ブラックバスタ

今日の相互接続された世界では、サイバー攻撃の脅威がかつてないほど蔓延しています。サイバー犯罪者や国家主体は常に脆弱性を悪用して貴重なデータを盗もうとしており、あらゆる規模の組織に重大なリスクをもたらしています。

デザインに 2 年 - 良い点、悪い点、そして醜い点…

デザインに 2 年 - 良い点、悪い点、そして醜い点…

「Hey Siri、オリビア・ディーンの『ミー・ダイブ』をかけて」私がナイジェリアのアクレにあるフューチャー アカデミー アフリカでインターンシップを始めたのは、2021 年 5 月のことでした。

一部のフリーランサーが自分の人生を偽っている理由

一部のフリーランサーが自分の人生を偽っている理由

私は最近、世界最大のプロフェッショナルなソーシャル ネットワークである Linkedin を利用していて、フォローしているフリーランス デザイナーの注目を集めた投稿を見つけました。彼らはすべて、飛行機からの写真、ラップトップを持ってビーチで撮影した写真、スイミング プールやオフィスから素晴らしい景色を眺めた写真を投稿していました。

代名詞は超怖い

頻繁に起こることだが、突然、私は衝撃を受ける 再びミッドウェイだ <いいえ、太平洋にあるものではなく、カーニバルにあるものです> どの見出しも大音量で…..