コーパスのXML解析 の変更点
Top / コーパスのXML解析
- 追加された行はこの色です。
- 削除された行はこの色です。
- コーパスのXML解析 へ行く。
#freeze
#access
#analog
*コーパス付属のXMLファイルをXSLTで解析する [#bdc2ce09]
#contents
**日本語話し言葉コーパス(CSJ) [#e58710fd]
***XMLファイルのパスを取得する [#sba6de10]
-[[コーパス加工用プログラム/ディレクトリをサーチしてXMLファイルのパスを取得する:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/index.php?%E3%82%B3%E3%83%BC%E3%83%91%E3%82%B9%E5%8A%A0%E5%B7%A5%E7%94%A8%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0#m7152994]] を参照
***お題:イントネーション境界以外の母音のリストを取得する [#u7413c74]
-参考
--[[『日本語話し言葉コーパス』XML文書について:http://www.kokken.go.jp/katsudo/seika/corpus/public/manuals/xml.pdf]]
--[[CSJのXMLデータの解析(菊池先生):http://www.f.waseda.jp/kikuchi/tips/csj_use.html]]
--[[CSJ-XSLサンプル(菊池先生):http://www.f.waseda.jp/kikuchi/tips/CSJ-XSLsample.htm]]
--[[共同研究動画データのXML化:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?%E5%85%B1%E5%90%8C%E7%A0%94%E7%A9%B6%E5%8B%95%E7%94%BB%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AEXML%E5%8C%96]]
--[[XML-XSLTスタイルシートの基本:http://ykr414.com/xml/xml01.html]]
--[[JavaでHelloWorld XSLT編:http://www.hellohiro.com/xslt.htm]]
-[[『日本語話し言葉コーパス』のイントネーションラベリング:http://web.mac.com/jen.venditti/iWeb/Site/Japanese%20ToBI_files/XJToBI2004.pdf#page=3]] によれば、X-JToBI の BI(break index) = 3 がイントネーション境界。
--菊池先生からいただいたご指摘
BIには、3以外にも、2, 2+p, 2+b, 2+bpなどがあります。
「イントネーション境界」が何を指すのかにもよりますが、2がつくBIも、ある種のイントネーション境界を指します。2と3の違いは、境界の大きさです。3の方がより大きな境界、という位置づけです。概ね、2はダウンステップが継続、3はダウンステップが中止しているという状況です。分析の際には注意して下さい。
#2をイントネーション境界とすることによって結果が変わってくる可能性があります。
--[[『日本語話し言葉コーパス』XML文書について:http://www.kokken.go.jp/katsudo/seika/corpus/public/manuals/xml.pdf#page=18]]によれば、イントネーションに関する XML の要素は <XJToBILabelBreak> である。
--したがって、<XJToBILabelBreak>要素の値が「3」以外で、かつ <Phone>要素のPhoneClass属性の値が「vowel」のときの、<Phone>要素のPhoneEntity属性の値を出力すればよい。
-XSLTテンプレートの作成
--CSJのXMLの構造
---[[CSJのXML要素一覧:http://www.kokken.go.jp/katsudo/seika/corpus/public/manuals/xml.pdf#page=5]]
---階層構造は以下のとおり。
<talk>
<IPU>
<LUW>
<SUW>
<TransSUW>
<Mora>
<Phoneme>
<Phone>
<XJToBILabelBreak>
---例:[[R00M0036_short.xml:http://shower.human.waseda.ac.jp/~m-kouki/pass/R00M0036_short.xml]]
--お題を実現するには、以下のようなスタイルシート(('''[[testxsl_1.xsl:http://shower.human.waseda.ac.jp/~m-kouki/pg/testxsl_1.xsl]]'''))を作成します。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xml:lang="ja">
<xsl:output method="text" indent="yes" encoding="Shift_JIS"/>
<xsl:strip-space elements="*"/>
<!--イントネーション境界以外の母音のリストを取得する-->
<!--まず音素ラベル(Phone要素)を見つける-->
<xsl:template match="Phone">
<!--Phone要素の属性 PhoneClass の値が「vowel」であるものを探す-->
<xsl:if test= "@PhoneClass='vowel'">
<!-- Phone の下位要素 XJToBILabelBreak の値が「3」でないものを探す-->
<xsl:if test= "descendant::XJToBILabelBreak != '3'">
<!--条件を満たすときの PhoneEntity 属性の値を表示-->
<xsl:value-of select="@PhoneEntity" />
<xsl:text>,</xsl:text>
<!--条件を満たすときの XJToBILabelBreak の値を表示-->
<xsl:value-of select="descendant::XJToBILabelBreak" />
<xsl:text>,</xsl:text>
<!--改行記号を表示-->
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
-XSLTを実行する
--Java
---[[JavaでHelloWorld XSLT編:http://www.hellohiro.com/xslt.htm]] の HelloWorldXSLT.java をそのまんま使う。
--MATLAB
---xslt コマンドが使える。
>> xslt A01F0055.xml makePROMPT.xsl resut.txt
--実行結果
---以下のテキストファイルが出力される。
o,F,
o,2,
o,1,
e,1+p,
u,D,
(省略)
***お題:アクセント核を持たない名詞・形容詞のリストを作成する [#d326e2b6]
-'''[[20091110 無アクセント名詞句・形容詞句リスト作成:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?20091110%20%E7%84%A1%E3%82%A2%E3%82%AF%E3%82%BB%E3%83%B3%E3%83%88%E5%90%8D%E8%A9%9E%E5%8F%A5%E3%83%BB%E5%BD%A2%E5%AE%B9%E8%A9%9E%E5%8F%A5%E3%83%AA%E3%82%B9%E3%83%88%E4%BD%9C%E6%88%90]]'''
***お題:HTK学習用の転記テキストファイル(.PROMPTファイル)を作成する [#v2cda914]
-形式
*/(ファイル番号)_(文番号) \t スペース区切りの単語 \t 音素間カンマ区切り(単語間スペース区切り)の発音 \t 開始時間[s] \t 終了時間[s] \t WAVファイルのパス
-例
*/0001_0005 発表 し ます h,a,Q,py,o,H, sj,i, m,a,s,u, 00005.549 00006.564 /home/CSJ/disc3/A01F0055/A01F0055.wav
-XSLTファイル
--[[makePROMPT.xsl:http://shower.human.waseda.ac.jp/~m-kouki/pg_public/xslt/makePROMPT.xsl]]
--出力される文字列の例
0005 発表 し ます ハ,ッ,ピョ,ー, シ, マ,ス, 00005.549 00006.564
---コアデータ以外のXMLファイルには、mora層までしかないので、モーラ単位で書き出してjavaプログラムで音素表記に変換します。
-実行
--音素・モーラ対応表を準備
---[[MoraPhonemeList.txt:http://shower.human.waseda.ac.jp/~m-kouki/pg_public/xslt/MoraPhonemeList.txt]]
---&color(red){''注意'' : 長音記号「ー」は、ここでは独立した音素「H」として記述します};
--[[コーパス加工用プログラム/ディレクトリをサーチしてXMLファイルのパスを取得する:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/index.php?%E3%82%B3%E3%83%BC%E3%83%91%E3%82%B9%E5%8A%A0%E5%B7%A5%E7%94%A8%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0#m7152994]] にしたがって、XMLパスファイル xmlfilelist.txt を作成しておきます。
--makePROMPT.xsl と xmlfilelist.txt と MoraPhonemeList.txt の入ったディレクトリで、[[HtkMakePromptCSJ.java:http://shower.human.waseda.ac.jp/~m-kouki/pg_public/xslt/HtkMakePromptCSJ.java.txt]] を実行
java HtkMakePromptCSJ xmlfilelist.txt result.PROMPT MoraPhonemeList.txt sjis
---最後の引数は MoraPhonemeList.txt の文字コード
---result.PROMPT ファイルができます。
***IPUの開始・終了時間およびノイズマスク区間((CSJのXMLにおいて、Talk - IPU - LUW - SUW - TransSUW 要素の 「TagMaskStart」属性が 1 になっている''IPU全体''は、ホワイトノイズによってマスクされています。))の有無を取得する [#f8758f9a]
#ref(searchTimeIPUandNoise.xsl);
-- MATLABでの実行例
xslt('R00M0036.xml', 'searchTimeIPUandNoise.xsl', 'resultNoizeCsj.txt');
***音素の開始・終了時間を取得する [#t24a217e]
-【注意!】以下はノイズマスク区間も出力されてしまっています。上記のノイズ区間検出スクリプトと組み合わせて使ってください。
-母音
#ref(searchTimeVowel.xsl);
--長母音記号「H」も独立した音素扱いで出力されます。((CSJのXML上では、長母音は/a/,/H/といったように分割されて記述されていますが、/aH/の時間的中心点を境界とした恣意的な分割です(「境界が曖昧である」というラベルがついているはず)。モーラ単位で記述した方が便利だからだと思われます。))
-子音
#ref(searchTimeConsonant.xsl);
--「SclS」「N」も独立した音素扱いで出力されます。
-全音素
#ref(searchTimeAllophone.xsl);
***お題:話者情報を取得する [#l36bde62]
#ref(searchSpeakerInfo.xsl);
**現代日本語書き言葉均衡コーパス(BCCWJ) [#ree4d593]
***お題:短単位ごとに情報を出力する [#fdb302fe]
文ID,連番(短単位の並び順、10刻み),文境界(Bは文頭、Iはそれ以外),出現形(UniDicの書字形),語彙素読み,語彙素,語彙素細分類,語形,品詞,活用型,活用形,発音形,開始文字位置(形態素に対応する文字列のXML文書中の開始位置),終了文字位置(形態素に対応する文字列のXML文書中の終了位置),原文文字列(元のXML文書における対応する文字列),固定長フラグ(Trueは固定長サンプル内),可変長フラグ(Trueは可変長サンプル内)
-参考
--テンプレート間で変数のやりとり
---http://www.asahi-net.or.jp/~PS8A-OKZK/xml/xslt10_2/passing_parameter.html
---http://www.res-system.com/weblog/item/433
--要素に番号をふる
---http://www.dab.hi-ho.ne.jp/sasa/biboroku/xml-xslt/position.html
-スクリプトとサンプルデータとマニュアル
--[[searchBCCWJ.zip:http://shower.human.waseda.ac.jp/~m-kouki/pass/searchBCCWJ.zip]]