コーパス加工用プログラム
Last-modified: 2015-02-10 (火) 05:32:06
Top / コーパス加工用プログラム
コーパス加工 †
- コーパス加工
- 日本語話し言葉コーパス(CSJ)
- ディレクトリをサーチして必要なファイル(WAVとSEG)のパスを取得する
- ディレクトリをサーチしてXMLファイルのパスを取得する
- WAVファイルをコピーして、ひとつのディレクトリに集める
- 音素別WAVファイルを作成
- WAVファイルと音素別WAVファイルを作成(新しい形式)
- アクセント核とブレイクインデックスをまとめて音節単位で一つのファイルに書きだす
- イントネーション境界以外の母音のリストを取得する
- アクセント核を持たない名詞・形容詞のリストを作成する
- IPUの開始・終了時間およびノイズマスク区間の有無を取得する
- 音素の開始・終了時間を取得する
- 話者情報を取得する
- CSJ付属のTextGridファイルを解析する
- 現代日本語書き言葉均衡コーパス(BCCWJ)
- TIMIT Acoustic-Phonetic Continuous Speech Corpus
- The OGI Multilanguage Telephone Speech Corpus 1.2(CSLU)
- MULTEXT 多言語韻律データベース
- 総合
- 日本語話し言葉コーパス(CSJ)
日本語話し言葉コーパス(CSJ)*1 †
ディレクトリをサーチして必要なファイル(WAVとSEG)のパスを取得する †
- SearchWavPassCSJ.java
- /raid0/share/CSJ 以下の女性音声(F系)のリストを取得して、searchWavFilePassCSJ.txt として出力するには
$ java SearchWavPassCSJ /raid0/share/CSJ F searchWavFilePassCSJ.txt
- 第一引数は /home/CSJ/disc3 などとしてもいいです。指定したディレクトリの下第二階層まで検索します。
- 第二引数には「M(男性)」か「F(女性)」を指定してください(性別の指定をしないときは、「""」でOK)。
- 対話音声(D00~ではじまるデータ)は取得しません。
- ローパスフィルタをかけて出力するには
- LowPassFilter.m をおいて、
$ java SearchWavPassCSJ /raid0/share/CSJ F searchWavFilePassCSJ.txt 2010 14.1
- 第四引数は、ローパスフィルタの周波数
- 第五引数は、アンプの大きさ
- LowPassFilter.m をおいて、
ディレクトリをサーチしてXMLファイルのパスを取得する †
- SearchXMLPassCSJ.java
- /home/CSJ 以下の女性音声(F系)のリストを取得して、xmlfilelist.txt として出力するには
$ java SearchXMLPassCSJ /home/CSJ F xmlfilelist.txt
- 第一引数は /home/CSJ/disc3 などとしてもいいです。指定したディレクトリの下第二階層まで検索します。
- 第二引数には「M(男性)」か「F(女性)」を指定してください(性別の指定をしないときは、「""」でOK)。
- 対話音声(D00~ではじまるデータ)は取得しません。
WAVファイルをコピーして、ひとつのディレクトリに集める †
- CopyWav.java
$ java CopyWav searchWavFilePassCSJ.txt speechwav copyWavCSJ.sh all $ copyWavCSJ.sh
- speechwav ディレクトリにまとめてコピーされます。
- CopyWav の第4引数は、「最初から何秒をコピーするか」です。
音素別WAVファイルを作成 †
- ディレクトリをサーチして必要なファイル(WAVとSEG)のパスを取得する にしたがって、必要なファイル(WAVとSEG)のパスを取得しておきます。
- 母音ごとに分割する
- 分割対象となる母音のリストを作成します。
$ emacs vowellist.txt
- vowellist.txt
a i u
- seg ファイルで a, i, u に一致する音素のみを切り出す設定にしました。
- SearchSegmentCSJ.java 【2015/02/09 注 CSJver3 では→を使ってください】SearchSegmentCSJ2.java
- 長さ 0.07秒以上の母音を全て、1母音あたり120個を上限として、segmentwav ディレクトリに出力するには、
$ java SearchSegmentCSJ 0.07 120 searchWavFilePassCSJ.txt vowellist.txt segmentscript segmentwav searchSegmentCSJ.sh all $ sh searchSegmentCSJ.sh
- シェルスクリプトファイルは segmentscript ディレクトリに、切り出し後の音声ファイルは segmentwav ディレクトリに出力されます。
- SearchSegmentCSJ の第8引数は、「何秒目以降を解析対象にするか」です。
- 分割対象となる母音のリストを作成します。
WAVファイルと音素別WAVファイルを作成(新しい形式) †
- 2008.12.05 新しい分析方法(WAVデータと音素別WAVデータの形式を一本化)
- ディレクトリをサーチして必要なファイル(WAVとSEG)のパスを取得する にしたがって、必要なファイル(WAVとSEG)のパスを取得しておきます。
- WAVファイルを数値データに変換(フォルマント)
java MakeWavFormant2 searchWavFilePassCSJF.txt segmenttxtFormantCSJF F -s seglist_CSJF.txt
アクセント核とブレイクインデックスをまとめて音節単位で一つのファイルに書きだす*2 †
- フィラーなどカッコで囲まれた短単位は取り出しません。
- はじめに、IPUの開始・終了時間およびノイズマスク区間の有無を取得する を実行して resultNoizeCsj.txt で出力しておきます。
- 続いて以下を実行します。
- BindWordBrakeCSJ.java*3
- ソース中に直に書かれているパスを書き換えて下さい。
- BreakIndexに1,2,3を含んでいない単語を、前の単語と結合して出力することもできます(変数 biMerge を true に書き換え)。
- 以下が出力例です。
- BindWordBrakeCSJ.java*3
- 応用例 → CSJのアクセント核のある音節+後続音節 などを取り出す
イントネーション境界以外の母音のリストを取得する †
- コーパスのXML解析 を参照。
アクセント核を持たない名詞・形容詞のリストを作成する †
- コーパスのXML解析 を参照。
IPUの開始・終了時間およびノイズマスク区間の有無を取得する †
- コーパスのXML解析 を参照。
音素の開始・終了時間を取得する †
- コーパスのXML解析 を参照。
話者情報を取得する †
- コーパスのXML解析 を参照。
CSJ付属のTextGridファイルを解析する †
- Praat/Praatスクリプトの書き方 にいろいろな実例を載せました。
現代日本語書き言葉均衡コーパス(BCCWJ) †
短単位ごとに情報を出力する †
- コーパスのXML解析 を参照。
TIMIT Acoustic-Phonetic Continuous Speech Corpus *4 †
DR3ディレクトリをサーチして必要なファイル(WAVとPHN)のパスを取得する †
- SearchWavPassTIMIT.java
java SearchWavPassTIMIT /share/timit/TIMIT/TRAIN/DR3 searchWavFilePassTIMIT.txt
WAVファイルをコピーして、ひとつのディレクトリに集める †
- CopyWavTIMIT.java
$ java CopyWavTIMIT searchWavFilePassTIMIT.txt speechwav copyWavTIMIT.sh all $ copyWavTIMIT.sh
- speechwav ディレクトリにまとめてコピーされます。
- TIMITのWAVはヘッダ情報がないため、SOXでヘッダ情報を指定しています(all条件以外では、うまくいかない可能性があります)。
音素別WAVファイルを作成 †
- 参考
- DR3の音素ラベルをCSJ_SEG形式に変換
- SearchWavPassTIMIT.java
- ConvertTimitSeg.java
java SearchWavPassTIMIT /share/timit/TIMIT/TRAIN/DR3 searchWavFilePassTIMIT.txt java ConvertTimitSeg searchWavFilePassTIMIT.txt
- 各フォルダに自動的にSEGファイルを追加します。
- 音声を母音ごとに分割する
- 英語母音のリスト vowellist_eng.txt
- SearchSegmentTIMIT.java
- 長さ 0.07秒以上の母音を、1母音あたり100個を上限として、segmentwav ディレクトリに出力します。
java SearchSegmentTIMIT 0.07 100 searchWavFilePassTIMIT.txt vowellist_eng.txt segmentscript segmentwav searchSegmentTIMIT.sh all sh searchSegmentTIMIT.sh
- SearchSegmentTIMIT.java の SearchSegmentCSJ.java との違い:ファイルパスファイル内のSEGファイルに拡張子が無くても対応、soxでヘッダ情報を指定
The OGI Multilanguage Telephone Speech Corpus 1.2(CSLU)*5 †
特定言語のディレクトリをサーチして必要なファイル(WAV)のパスを取得する †
- SearchWavPassCSLU.java
java SearchWavPassCSLU /share/CSLU searchWavFilePassCSLU.txt 1 spanish
- 第二引数「1」:セグメントファイルのパスは出力しない(セグメントファイルの存在しないWAVも、全てパスを出力します)
- ローパスフィルタをかけて出力するには
- LowPassFilter.m をおいて、
$ java SearchWavPassCSLU /share/CSLU searchWavFilePassCSLU.txt 0 spanish 2010 14.1
- LowPassFilter.m をおいて、
WAVファイルをコピーして、ひとつのディレクトリに集める †
- CopyWav.java
$ java CopyWav searchWavFilePassCSLU.txt speechwav copyWavCSLU.sh all $ copyWavCSLU.sh
- speechwav ディレクトリにまとめてコピーされます。
音素別WAVファイルを作成 †
- CSLUのspanishをサーチして必要なファイル(WAVとPTLOLA)のパスを取得する
- SearchWavPassCSLU.java
java SearchWavPassCSLU /share/CSLU searchWavFilePassCSLU.txt 0 spanish
- 第二引数「0」:セグメントファイルの存在するファイルのみパスを出力する
- SearchWavPassCSLU.java
- 音素ラベルをCSJ_SEG形式に変換
- ConvertCSLUSeg.java
java ConvertCSLUSeg searchWavFilePassCSLU.txt
- 各フォルダに自動的にSEGファイルを追加します。
- ConvertCSLUSeg.java
- 音声を母音ごとに分割する
- スペイン語母音のリスト vowellist_spn.txt
- SearchSegmentCSLU.java
- 長さ 0.07秒以上の母音を、1母音あたり100個を上限として、segmentwav ディレクトリに出力します。
java SearchSegmentCSLU 0.07 100 searchWavFilePassCSLU.txt vowellist_spn.txt segmentscript segmentwav searchSegmentCSLU.sh all sh searchSegmentCSLU.sh
- CSLUのファイル名には拡張子以外の「.」がありますが、このままではsoxのエラーが出るので、「_」に置き換えています。
- 母音「&」もシェルスクリプトのエラーが出ますが、少数の母音なので、まだ対処していません。
MULTEXT 多言語韻律データベース*6 †
特定言語のディレクトリをサーチして必要なファイル(WAV)のパスを取得する †
- SearchDatabase.java を実行
- メインメソッド中に、各言語のデータベースの位置を直書きします。
- run_SearchDatabase.sh 言語名.hcopy.script 言語名.hcopy.sh 言語名.sox.sh ができます。
元音声のMFCC解析+元音声の単語別分割 †
元音声のMFCC解析結果をMATLABで使える形に変換 †
- MakeMfcTxtFusionMulText.java を実行。
- データは mfctxtdata_matlab ディレクトリに格納されます。
総合 †
- 上記のコーパス別処理が完了しているとします。
WAVファイルを数値データに変換(MFCC) †
- 対象となるWAVファイル群が特定のディレクトリに入っているとして、処理を続けます。
- HTKにパスが通っていなければ、通します。
PATH=$PATH:/home/m-kouki/HTK-CSJ/bin.linux/ export PATH
- MFCC解析の設定ファイルを作ります。
emacs config.hcopy
- HTKにパスが通っていなければ、通します。
- MFCC解析を行なって、テキスト形式で出力します。
- MakeWavMfcc.java
- speechwav ディレクトリ内の、ファイル名に「.wav」を含むファイルに対して解析する
$ java MakeWavMfcc speechwav speechtxt makeWavMfcc.sh makeWavMfcc.hcopy.script .wav $ sh makeWavMfcc.sh
- speechtxt ディレクトリ内に、テキスト形式のMFCCファイルが出力されます。 → 例
- 評価データを作る場合は、ファイル名に「_a.wav」を含むファイル、などと対象を限定します。
- MATLABで読み込める形に整形します。
- ConvertMfcc.java
java ConvertMfcc speechtxt speechtxt_matlab
- speechtxt_matlabに、変換後のファイル(名前は同じ)が出力されます。
- ConvertMfcc.java
WAVファイルを数値データに変換(フォルマント) †
- 対象となるWAVファイル群が特定のディレクトリに入っているとして、処理を続けます。
- フォルマント解析を行なって、テキスト形式で出力します。
- MakeWavFormant.java
- speechAnalysis.m
- speechSignal.m
- speechwav ディレクトリ内の、ファイル名に「.wav」を含むファイルに対して解析する
$ java MakeWavFormant speechwav speechtxtFormant .wav
- speechtxtFormant ディレクトリ内に、テキスト形式のフォルマント解析結果のファイルが出力されます(MATLAB読み込み可)。
- 評価データを作る場合は、ファイル名に「_a.wav」を含むファイル、などと対象を限定します。
音素別WAVファイルを数値データに変換(MFCC) †
- MFCC解析を行なって、テキスト形式で出力します。
- MakeWavMfcc.java
- segmentwav ディレクトリ内の、ファイル名に「_母音名_」を含むファイルに対して解析する
$ java MakeWavMfcc segmentwav segmenttxt_a makeWavMfcc.sh makeWavMfcc.hcopy.script _a_ $ sh makeWavMfcc.sh $ java MakeWavMfcc segmentwav segmenttxt_i makeWavMfcc.sh makeWavMfcc.hcopy.script _i_ $ sh makeWavMfcc.sh $ java MakeWavMfcc segmentwav segmenttxt_u makeWavMfcc.sh makeWavMfcc.hcopy.script _u_ $ sh makeWavMfcc.sh $ java MakeWavMfcc segmentwav segmenttxt_e makeWavMfcc.sh makeWavMfcc.hcopy.script _e_ $ sh makeWavMfcc.sh $ java MakeWavMfcc segmentwav segmenttxt_o makeWavMfcc.sh makeWavMfcc.hcopy.script _o_ $ sh makeWavMfcc.sh
- segmenttxt ディレクトリ内に、テキスト形式のMFCCファイルが出力されます。 → 例
- MATLABで読み込める形に整形します。
- BindingMfcc.java
- タイプ1:各ファイルの全ての行を出力して統合
java BindingMfcc speechtxt bindingMfcc.txt before all 100
- 各ファイルの全ての行を取り出して、最初から100行分を連結して bindingMfcc.txt に出力する
- ファイルごとに長さ(行数)が異なることに注意してください。
- タイプ2:1つのファイルにつき、ある行数分だけ出力して統合
$ java BindingMfcc segmenttxt_a bindingMfcc_a.txt middle 5 100 $ java BindingMfcc segmenttxt_i bindingMfcc_i.txt middle 5 100 $ java BindingMfcc segmenttxt_u bindingMfcc_u.txt middle 5 100 $ java BindingMfcc segmenttxt_e bindingMfcc_e.txt middle 5 100 $ java BindingMfcc segmenttxt_o bindingMfcc_o.txt middle 5 100
- 各ファイルの中央5行分だけ取り出して、最初から100行分を連結して bindingMfcc.txt に出力する
- 音素別に切り出したファイルなどの場合、これで定常部を取り出すことが期待できます
- タイプ3:第六引数にキーワードを指定して、キーワードを含むファイル名のファイルのみ結合することもできます。
- SearchBindingSegment.java を使って、
java SearchBindingSegment segmenttxtMfccM vowellist.txt mfctxtdata_matlab_vowel searchBindingSegment.sh middle all 100 sh searchBindingSegment.sh
- SearchBindingSegment.java を使って、
*1 Maekawa K. (2003). Corpus of Spontaneous Japanese : Its Desugn and Evaluation . Proceedings of ISCA and IEEE Workshop on Spontaneous Speech Processing and Recognition (SSPR2003), 7–12. 詳細
*2 こちらで取り組んだ仕事です。
*3 ※CSJのwordファイルに記載されている時間は、その単語の終了時間です
*4 shower の /share/timit/ にあります。詳細
*5 Yeshwant K. M., Ronald A. C., & Beatrice T. O. (1992). multi-language telephone speech corpus. Proceedings of the International Conference on Spoken Language Proceedings, 895–898. shower の /share/CSLU/ にあります。詳細
*6 shower の /share/Multext/ にあります