xmlからデータの抽出を行う xml.dom.minidom

基本的な追加方は19.7. xml.dom.minidom — 軽量な DOM 実装 — Python 2.7ja1 documentationを見ればわかることなのが.ただ,ちょっとわかりにくいので,Python で XML 操作 | TM Lifeを見た方がよい.

ところで,「コメントのみを記述したxmlノードを抽出するにはどうしたものか?」と調べてみたところ,下のように書けばよいことがわかった.

  <!-- V1 -->
  <fusion source="yd_&#171;" target="_" rev="-"/>


  <!-- II. Verbes irr&#233;guliers -->

  <!-- A. Verbes irr&#233;guliers avec radicaux 2 en -d -->


  <!-- V2 -->
  <fusion source="d_:" target="_" rev="-"/>

  <!-- V3 -->
  <fusion source="rd_¨" target="ar_" rev="-"/>

  <!-- V4 -->
  <fusion source="ad_~" target="_" rev="-"/>

  <!-- V5 -->

のようなxmlからコメント部分のを抽出する.

    import xml.dom.minidom
    dom = xml.dom.minidom.parse("morpho.fa")

    present_stem_list=[];
    for node in dom.documentElement.childNodes:
        if node.nodeType in [node.COMMENT_NODE]:
            nodetext=(node.data).strip(u' ');    
            if nodetext in [u'V1', u'V2', u'V3', u'V4', u'V5', u'V6', u'V7', u'V8', u'V8', u'V9', u'V10',
                            u'V11', u'V12', u'V13', u'V14', u'V15', u'V16', u'V17', u'V18', u'V19', u'V20',
                            u'V21', u'V22', u'V23', u'V24', u'V25', u'V26', u'V27',
                            u'V28:Light Verbs', u'V29:Light Verbs with alternate stems']:

if node.nodeType in [node.COMMENT_NODE]: の記述でノードの種類がコメントノードの時のみを指定している.さらには,node.dataでコメントノードの中身を取得している.

本当はその後,Vが含まれているノードのみを正規表現で獲得したかったのだが,どうしてだが,それができなかった.
なので,みっともない格好ではあるが,リスト表記で記述している.(Vの数があらかじめ決まっているからこそできることではある)