Galatea Talkのテキスト処理について

2006.10.25

Studio ARC

編集者の注:XMLファイルの出力例に一部色分けが使われているので、暫定的にテキスト表記と画像表示を併記しています。

テキスト処理の手順

a) 入力テキストの前処理(1) (数字処理等)
b) 形態素解析 (第1層のタギング、発音、品詞付与)
c) 形態素解析結果の前処理 (英字からなる未知語の分解)
d) チャンキング (第2層へのまとめ上げ)
e) 音韻交替 (接続による語頭、語末の音の変化)
f) アクセント結合 (アクセント句内のアクセント位置)
g) テキストの後処理 (品詞体系の簡易化)
h) 音素列への展開 (音響パラメータタグの処理を含む)

現状では

a) -> gtalk本体
b) -> ChaSen + UniDic
c),d),e),f),g) -> ChaOne
h) -> gtalk本体

で処理を行っている

gtalkからの呼び出し方式

Linux版: ChaSen, ChaOneともに別プロセスとして起動し, パイプを用いて,標準入出力経由でデータを受け渡している

それぞれの実行ファイルはgtalkの設定ファイル (ssm.conf) で,

# path name of 'chasen' (ChaSen実行ファイルのパス)
CHASEN: /usr/local/bin/chasen
# configuration file for 'chasen' (ChaSen設定ファイルのパス)
CHASEN-RC: ./chasenrc
# command of running 'chaone' (ChaOne実行ファイルのパス)
CHAONE: ../morph/chaone-1.3.0/chaone

のように指定する

Windows版: ChaSen, ChaOneともにdll (libchasen.dll, msxml3.dll) を用いて, gtalkから関数呼び出しを行っている

それぞれのファイルはgtalkの設定ファイル (ssm-win.conf) で,

# path name of 'libchasen.dll' (only for Windows) (ChaSen dllファイルのパス)
CHASEN-DLL:  ../chasen-2.3.3/lib/libchasen.dll
# configuration file for 'chasen' (ChaSen設定ファイルのパス)
CHASEN-RC: ./chasenrc-win
# path name of 'chaone.xsl' (only for Windows) (ChaOneファイルのパス)
CHAONE-XSL-FILE: ../chaone-win-1.3.0a2/chaone_t_Shift_JIS.xsl
のように指定する (msxml3.dllはWindows標準)

データ形式

  • a)の段階では一部タグ付きのプレーンテキスト
  • b)からg)までは,それぞれ定められたXML形式

を用いている

よって,同等のXML形式を扱うことができる任意のソフトウェアによって b)からg)までの処理は置き換え可能な設計になっている

また,g)の出力形式で予めファイルに保存しておき,gtalkのコマンドで

set ParsedText = ファイル名

とすることにより,gtalkに直接読み込み可能である

処理内容及びデータ形式の詳細

a) 入力テキストの前処理 (text.c @ gtalk)

gtalkタグが埋め込まれたプレーンテキストを, 形態素解析に適したプレーンテキストに変換する

数字,英字の処理

半角英数字を全角文字に変換する

gtalkの設定ファイルで指定されているとおりに変換する

# default for numbers and alphabets
NUMBER: DECIMAL
ALPHABET: WORD
DATE: YMD
TIME: hms

CONTEXTタグの処理

出力にCONTEXTタグは含まれない

<CONTEXT TYPE="NUMBER">1234</CONTEXT>→ 千二百三十四
<CONTEXT TYPE="DIGITS">1234</CONTEXT>→ 一二三四
<CONTEXT TYPE="DATE">2005-7-21</CONTEXT>→ 二千五年七月二十一日
<CONTEXT TYPE="TIME">12:34</CONTEXT>→ 十二時三十四分
<CONTEXT TYPE="PHONE">0120-123-4567</CONTEXT>→ 〇一二〇、一二三、四五六七

ユーザ定義辞書の処理

一致する文字列をPRONタグに置換

ユーザ定義辞書ファイルはgtalk設定ファイルで以下のように指定する

# dictionary
DICTIONARY: ./gtalk-eucjp.dic
ユーザ定義辞書の形式

単語,読み,アクセント型を空白文字区切りで記述する

南草津	ミナミクサツ	4
置換結果
最寄り駅は南草津です。
→
最寄り駅は<PRON SYM="ミナミク’サツ">南草津</PRON>です。

b) 形態素解析 (ChaSen 2.3.3 + Unidic 1.2.0)

プレーンテキストを形態素解析して,XML形式で出力する

入力: a)の処理結果

<PRON SYM="ミナミク’サツ">南草津</PRON>にHBが一本あります。

出力:

<S>
  <PRON SYM="ミナミク’サツ">
    <W1 orth="南" pron="{ミナミ/ナン/ミンナミ}" pos="名詞-普通名詞-一般" lForm="{ミナミ/ナン/ミンナミ}" lemma="南" aType="0" aConType="{C2/C3/C2}"/>
    <W1 orth="草津" pron="クサツ" pos="名詞-固有名詞-地名-一般" lForm="クサツ" lemma="草津" aType="1"/>
  </PRON>
  <W1 orth="に" pron="ニ" pos="助詞-格助詞" lForm="ニ" lemma="に" aConType="動詞%F5,形容詞%F1,名詞%F1"/>
  <W1 orth="HB" pron="HB" pos="未知語" />
  <W1 orth="が" pron="ガ" pos="助詞-格助詞" lForm="ガ" lemma="が"  aConType="動詞%F5,名詞%F1"/>
  <W1 orth="一" pron="{イチ/ヒト/イッ/ヒ/イツ}" pos="名詞-数詞" lForm="{イチ/ヒト/イチ/ヒト/イチ}" lemma="一" iConType="{N1/N1/N1//}" fType="{数・一/数・一/数・一//}" fForm="{基本形/和語形/促音形//}" aType="{2/0/2/0/1,2}" aConType="C3"/>
  <W1 orth="本" pron="{ポ/ホ/ボ}ン" pos="接尾辞-名詞的-助数詞" lForm="ホン" lemma="本" iType="ホ混合" iForm="{半濁音/基本/濁音}形" fConType="B1S6SjShS,B1S8SjShS" aConType="C3"/>
  <W1 orth="あり" pron="アリ" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般" lForm="アル" lemma="有る"  aType="1" aConType="C3"/>
  <W1 orth="ます" pron="マス" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般" lForm="マス" lemma="ます"  aConType="動詞%F4@1"/>
  <W1 orth="。" pron="。" pos="補助記号-句点" lForm="" lemma="。"/>
</S>

タグの説明

S: 文
W1: 第1層語
orth: 出現形
pron: 発音形
pos: 品詞
lForm:
lemma:
cType:
cForm:

次の2属性はアクセント結合計算用(それ以外には不要)

aType: アクセント型
aConType: アクセント結合型

次の4属性は音韻交替計算用(それ以外には不要)

iType: 語頭音韻交替型
iConType: 語頭音韻交替結合型
fType: 語末音韻交替方型
fConType: 語末音韻交替結合型

c) 形態素解析結果の前処理 (prep.xsl @ ChaOne 1.3.0)

形態素解析結果のうち,英字からなる未知語を単独の英字列に分解する

入力: b)の形態素解析結果

出力:

<S>
  <PRON SYM="ミナミク’サツ">
   <W1 orth="南" pron="{ミナミ/ナン/ミンナミ}" pos="名詞-普通名詞-一般" lForm="{ミナミ/ナン/ミンナミ}" lemma="南" aType="0" aConType="{C2/C3/C2}"/>
   <W1 orth="草津" pron="クサツ" pos="名詞-固有名詞-地名-一般" lForm="クサツ" lemma="草津" aType="1"/>
  </PRON>
  <W1 orth="に" pron="ニ" pos="助詞-格助詞" lForm="ニ" lemma="に" aConType="動詞%F5,形容詞%F1,名詞%F1"/>
  <W1 orth="H" pron="エイチ" pos="記号-文字" lex="エイチ!H" indexForm="エイチ" indexOrth="H" aType="1"/>
  <W1 orth="B" pron="ビー" pos="記号-文字" lex="ビー!B" indexForm="ビー" indexOrth="B" aType="1"/>
  <W1 orth="が" pron="ガ" pos="助詞-格助詞" lForm="ガ" lemma="が" aConType="動詞%F5,名詞%F1"/>
  <W1 orth="一" pron="{イチ/ヒト/イッ/ヒ/イツ}" pos="名詞-数詞" lForm="{イチ/ヒト/イチ/ヒト/イチ}" lemma="一" iConType="{N1/N1/N1//}" fType="{数・一/数・一/数・一//}" fForm="{基本形/和語形/促音形//}" aType="{2/0/2/0/1,2}" aConType="C3"/>
  <W1 orth="本" pron="{ポ/ホ/ボ}ン" pos="接尾辞-名詞的-助数詞" lForm="ホン" lemma="本" iType="ホ混合" iForm="{半濁音/基本/濁音}形" fConType="B1S6SjShS,B1S8SjShS" aConType="C3"/>
  <W1 orth="あり" pron="アリ" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般" lForm="アル" lemma="有る" aType="1" aConType="C3"/>
  <W1 orth="ます" pron="マス" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般" lForm="マス" lemma="ます" aConType="動詞%F4@1"/>
  <W1 orth="。" pron="。" pos="補助記号-句点" lForm="" lemma="。"/>
</S>

gtalktext01.png

d) チャンキング (chunker.xsl @ ChaOne 1.3.0)

形態素解析結果を第2層にまとめあげる

入力: c)の処理結果

出力:

<S>
  <PRON SYM="ミナミク’サツ">
    <W2 orth="南" pos="名詞-普通名詞-一般">
      <W1 orth="南" pron="{ミナミ/ナン/ミンナミ}" pos="名詞-普通名詞-一般" lForm="{ミナミ/ナン/ミンナミ}" lemma="南" aType="0" aConType="{C2/C3/C2}"/>
    </W2>
    <W2 orth="草津" pos="名詞-固有名詞-地名-一般">
      <W1 orth="草津" pron="クサツ" pos="名詞-固有名詞-地名-一般" lForm="クサツ" lemma="草津" aType="1"/>
    </W2>
  </PRON>
  <W2 orth="に" pos="助詞-格助詞">
    <W1 orth="に" pron="ニ" pos="助詞-格助詞" lForm="ニ" lemma="に" aConType="動詞%F5,形容詞%F1,名詞%F1"/>
  </W2>
  <W2 orth="H" pos="記号-文字">
    <W1 orth="H" pron="エイチ" pos="記号-文字" lex="エイチ!H" indexForm="エイチ" indexOrth="H" aType="1"/>
  </W2>
  <W2 orth="B" pos="記号-文字">
    <W1 orth="B" pron="ビー" pos="記号-文字" lex="ビー!B" indexForm="ビー" indexOrth="B" aType="1"/>
  </W2>
  <W2 orth="が" pos="助詞-格助詞">
    <W1 orth="が" pron="ガ" pos="助詞-格助詞" lForm="ガ" lemma="が" aConType="動詞%F5,名詞%F1"/>
  </W2>
  <W2 orth="一本" pos="名詞-普通名詞-副詞可能">
    <W1 orth="一" pron="{イチ/ヒト/イッ/ヒ/イツ}" pos="名詞-数詞" lForm="{イチ/ヒト/イチ/ヒト/イチ}" lemma="一" iConType="{N1/N1/N1//}" fType="{数・一/数・一/数・一//}" fForm="{基本形/和語形/促音形//}" aType="{2/0/2/0/1,2}" aConType="C3"/>
    <W1 orth="本" pron="{ポ/ホ/ボ}ン" pos="接尾辞-名詞的-助数詞" lForm="ホン" lemma="本" iType="ホ混合" iForm="{半濁音/基本/濁音}形" fConType="B1S6SjShS,B1S8SjShS" aConType="C3"/>
  </W2>
  <W2 orth="あり" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般">
    <W1 orth="あり" pron="アリ" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般" lForm="アル" lemma="有る" aType="1" aConType="C3"/>
  </W2>
  <W2 orth="ます" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般">
    <W1 orth="ます" pron="マス" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般" lForm="マス" lemma="ます" aConType="動詞%F4@1"/>
  </W2>
  <W2 orth="。" pos="補助記号-句点">
    <W1 orth="。" pron="。" pos="補助記号-句点" lForm="" lemma="。"/>
  </W2>
</S>

gtalktext02.png

タグの説明:

W2: 第2層語

e) 音韻交替 (phonetic.xsl @ ChaOne 1.3.0)

音韻交替規則に基づき第1層語の撥音形の選択と,第2層語への撥音形の付与を行う

入力: d)のチャンキング結果

出力:

<S>
  <PRON SYM="ミナミク’サツ">
    <W2 orth="南" pos="名詞-普通名詞-一般" pron="ミナミ">
      <W1 orth="南" pron="ミナミ" pos="名詞-普通名詞-一般" lForm="ミナミ" lemma="南" aType="0" aConType="C2"/>
    </W2>
    <W2 orth="草津" pos="名詞-固有名詞-地名-一般" pron="クサツ">
      <W1 orth="草津" pron="クサツ" pos="名詞-固有名詞-地名-一般" lForm="クサツ" lemma="草津" aType="1"/>
    </W2>
  </PRON>
  <W2 orth="に" pos="助詞-格助詞" pron="ニ">
    <W1 orth="に" pron="ニ" pos="助詞-格助詞" lForm="ニ" lemma="に" aConType="動詞%F5,形容詞%F1,名詞%F1"/>
  </W2>
  <W2 orth="H" pos="記号-文字" pron="エイチ">
    <W1 orth="H" pron="エイチ" pos="記号-文字" lex="エイチ!H" indexForm="エイチ" indexOrth="H" aType="1"/>
  </W2>
  <W2 orth="B" pos="記号-文字" pron="ビー">
    <W1 orth="B" pron="ビー" pos="記号-文字" lex="ビー!B" indexForm="ビー" indexOrth="B" aType="1"/>
  </W2>
  <W2 orth="が" pos="助詞-格助詞" pron="ガ">
    <W1 orth="が" pron="ガ" pos="助詞-格助詞" lForm="ガ" lemma="が" aConType="動詞%F5,名詞%F1"/>
  </W2>
  <W2 orth="一本" pos="名詞-普通名詞-副詞可能" pron="イッポン">
    <W1 orth="一" pron="イッ" pos="名詞-数詞" lForm="イチ" lemma="一" iConType="N1" fType="数・一" fForm="促音形" aType="2" aConType="C3"/>
    <W1 orth="本" pron="ポン" pos="接尾辞-名詞的-助数詞" lForm="ホン" lemma="本" iType="ホ混合" iForm="半濁音形" fConType="B1S6SjShS,B1S8SjShS" aConType="C3"/>
  </W2>
  <W2 orth="あり" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般" pron="アリ">
    <W1 orth="あり" pron="アリ" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般" lForm="アル" lemma="有る" aType="1" aConType="C3"/>
  </W2>
  <W2 orth="ます" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般" pron="マス">
    <W1 orth="ます" pron="マス" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般" lForm="マス" lemma="ます" aConType="動詞%F4@1"/>
  </W2>
  <W2 orth="。" pos="補助記号-句点" pron="。">
    <W1 orth="。" pron="。" pos="補助記号-句点" lForm="" lemma="。"/>
  </W2>
</S>

gtalktext03.png

f) アクセント結合 (accent.xsl @ ChaOne 1.3.0)

第2層語をもとにアクセント句を構成し,結合規則に基づきアクセント型を計算する

入力: e)の音韻交替処理結果

出力:

<S>
  <AP orth="南草津に" pron="ミナミクサツニ" aType="4" silence="NON">
    <PRON SYM="ミナミク’サツ" orth="南草津" pron="ミナミクサツ" pos="名詞-固有名詞-地名-一般" aType="4" aConType="">
      <W2 orth="南" pos="名詞-普通名詞-一般" pron="ミナミ" aType="0" aConType="C2">
        <W1 orth="南" pron="ミナミ" pos="名詞-普通名詞-一般" lForm="ミナミ" lemma="南" aConType="C2" aType="0"/>
      </W2>
      <W2 orth="草津" pos="名詞-固有名詞-地名-一般" pron="クサツ" aType="1" aConType="">
        <W1 orth="草津" pron="クサツ" pos="名詞-固有名詞-地名-一般" lForm="クサツ" lemma="草津" aType="1"/>
      </W2>
    </PRON>
    <W2 orth="に" pos="助詞-格助詞" pron="ニ" aType="0" aConType="動詞%F5,形容詞%F1,名詞%F1">
      <W1 orth="に" pron="ニ" pos="助詞-格助詞" lForm="ニ" lemma="に" aConType="動詞%F5,形容詞%F1,名詞%F1" aType="0"/>
    </W2>
  </AP>
  <AP orth="HBが" pron="エイチビーガ" aType="0" silence="NON">
    <W2 orth="H" pos="記号-文字" pron="エイチ" aType="1" aConType="">
      <W1 orth="H" pron="エイチ" pos="記号-文字" lex="エイチ!H" indexForm="エイチ" indexOrth="H" aType="1"/>
    </W2>
    <W2 orth="B" pos="記号-文字" pron="ビー" aType="1" aConType="">
      <W1 orth="B" pron="ビー" pos="記号-文字" lex="ビー!B" indexForm="ビー" indexOrth="B" aType="1"/>
    </W2>
    <W2 orth="が" pos="助詞-格助詞" pron="ガ" aType="0" aConType="動詞%F5,名詞%F1">
      <W1 orth="が" pron="ガ" pos="助詞-格助詞" lForm="ガ" lemma="が" aConType="動詞%F5,名詞%F1" aType="0"/>
    </W2>
  </AP>
  <AP orth="一本" pron="イッポン" aType="1" silence="NON">
    <W2 orth="一本" pos="名詞-普通名詞-副詞可能" pron="イッポン" aType="1" aConType="C3">
      <W1 orth="一" pron="イッ" pos="名詞-数詞" lForm="イチ" lemma="一" iConType="N1" fType="数・一" fForm="促音形" aConType="C3" aType="2"/>
      <W1 orth="本" pron="ポン" pos="接尾辞-名詞的-助数詞" lForm="ホン" lemma="本" iType="ホ混合" iForm="半濁音形" fConType="B1S6SjShS,B1S8SjShS" aConType="C3" aType="0"/>
    </W2>
  </AP>
  <AP orth="あります" pron="アリマス" aType="3" silence="NON">
    <W2 orth="あり" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般" pron="アリ" aType="1" aConType="C3">
      <W1 orth="あり" pron="アリ" pos="動詞-非自立可能" cType="五段-ラ行-一般" cForm="連用形-一般" lForm="アル" lemma="有る" aConType="C3" aType="1"/>
    </W2>
    <W2 orth="ます" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般" pron="マス" aType="0" aConType="動詞%F4@1">
      <W1 orth="ます" pron="マス" pos="助動詞" cType="助動詞-マス" cForm="基本形-一般" lForm="マス" lemma="ます" aConType="動詞%F4@1" aType="0"/>
    </W2>
  </AP>
  <AP orth="。" pron="。" aType="0" silence="SILE">
    <W2 orth="。" pos="補助記号-句点" pron="。" aType="0" aConType="">
      <W1 orth="。" pron="。" pos="補助記号-句点" lForm="" lemma="。" aType="0"/>
    </W2>
  </AP>
</S>

gtalktext04.png

タグの説明:

AP: アクセント句
silence: 休止

g) テキストの後処理 (postp.xsl @ ChaOne 1.3.0)

品詞を音響モデル用に変換する

入力: f)のアクセント結合結果

出力:

<S>
  <AP orth="南草津に" pron="ミナミクサツニ" aType="4" silence="NON">
    <PRON SYM="ミナミク’サツ" orth="南草津" pron="ミナミクサツ" pos="名詞-固有名詞-一般" aType="4" aConType="">
      <W2 orth="南" pos="名詞-普通名詞-一般" pron="ミナミ" aType="0" aConType="C2">
        <W1 orth="南" pron="ミナミ" pos="名詞-普通名詞-一般" lForm="ミナミ" lemma="南" aConType="C2" aType="0"/>
      </W2>
      <W2 orth="草津" pos="名詞-固有名詞-一般" pron="クサツ" aType="1" aConType="">
        <W1 orth="草津" pron="クサツ" pos="名詞-固有名詞-一般" lForm="クサツ" lemma="草津" aType="1"/>
      </W2>
    </PRON>
    <W2 orth="に" pos="助詞-格助詞-一般" pron="ニ" aType="0" aConType="動詞%F5,形容詞%F1,名詞%F1">
      <W1 orth="に" pron="ニ" pos="助詞-格助詞-一般" lForm="ニ" lemma="に" aConType="動詞%F5,形容詞%F1,名詞%F1" aType="0"/>
    </W2>
  </AP>
  <AP orth="HBが" pron="エイチビーガ" aType="0" silence="NON">
    <W2 orth="H" pos="記号-一般" pron="エイチ" aType="1" aConType="">
      <W1 orth="H" pron="エイチ" pos="記号-一般" lex="エイチ!H" indexForm="エイチ" indexOrth="H" aType="1"/>
    </W2>
    <W2 orth="B" pos="記号-一般" pron="ビー" aType="1" aConType="">
      <W1 orth="B" pron="ビー" pos="記号-一般" lex="ビー!B" indexForm="ビー" indexOrth="B" aType="1"/>
    </W2>
    <W2 orth="が" pos="助詞-格助詞-一般" pron="ガ" aType="0" aConType="動詞%F5,名詞%F1">
      <W1 orth="が" pron="ガ" pos="助詞-格助詞-一般" lForm="ガ" lemma="が" aConType="動詞%F5,名詞%F1" aType="0"/>
    </W2>
  </AP>
  <AP orth="一本" pron="イッポン" aType="1" silence="NON">
    <W2 orth="一本" pos="名詞-普通名詞-一般" pron="イッポン" aType="1" aConType="C3">
      <W1 orth="一" pron="イッ" pos="名詞-数詞-一般" lForm="イチ" lemma="一" iConType="N1" fType="数・一" fForm="促音形" aConType="C3" aType="2"/>
      <W1 orth="本" pron="ポン" pos="接尾辞-名詞的-一般" lForm="ホン" lemma="本" iType="ホ混合" iForm="半濁音形" fConType="B1S6SjShS,B1S8SjShS" aConType="C3" aType="0"/>
    </W2>
  </AP>
  <AP orth="あります" pron="アリマス" aType="3" silence="NON">
    <W2 orth="あり" pos="動詞-一般" cType="五段-ラ行-一般" cForm="連用形-一般" pron="アリ" aType="1" aConType="C3">
      <W1 orth="あり" pron="アリ" pos="動詞-一般" cType="五段-ラ行-一般" cForm="連用形-一般" lForm="アル" lemma="有る" aConType="C3" aType="1"/>
    </W2>
    <W2 orth="ます" pos="助動詞" cType="助動詞-ジャ" cForm="基本形-一般" pron="マス" aType="0" aConType="動詞%F4@1">
      <W1 orth="ます" pron="マス" pos="助動詞" cType="助動詞-ジャ" cForm="基本形-一般" lForm="マス" lemma="ます" aConType="動詞%F4@1" aType="0"/>
    </W2>
  </AP>
  <AP orth="。" pron="。" aType="0" silence="SILE">
    <W2 orth="。" pos="補助記号-一般" pron="。" aType="0" aConType="">
      <W1 orth="。" pron="。" pos="補助記号-一般" lForm="" lemma="。" aType="0"/>
    </W2>
  </AP>
</S>

gtalktext05.png