ノート/テキストマイニング
訪問者数 3833      最終更新 2008-06-23 (月) 15:50:39
> ノート/テキストマイニング
> ノート/テキストマイニング/テキストマイニングとシソーラス
> ノート/テキストマイニング/MeSH
> ノート/テキストマイニング/NLTK

PubMedのテキストマイニング解析

アイデア

PubMedのAbstractを使ったテキストマイニングの演習。要するにPubMedのデータ(全部は大変だから一部に限定)を、テキストマイニングの手法で解析してみる。

PubMedアクセス

作業ログ
oreganoを使う。FreeBSDはMySQLのバージョンが合わず面倒なのでやめた。
MySQLは既に入っているので、そのまま使う。ユーザのみ作成(GRANT文)
MySQL-pythonのインストール

次に、XMLのパージングは、Pythonライブラリリファレンスの13. 構造化マークアップツールに説明がある。それによるとPython2.3以降は、Expat パーザが Python に取り込まれているので、 xml.parsers.expat モジュールは常に利用できるということなので、これで済むだろう。最初はPyXML 追加パッケージを見ていたが、もし何もせずに使えるもので足りるなら、それがよかろう。

ということで、xml.parsers.expatを使ってみる。特にインストールとかは要らない。
上記のライブラリリファレンスにある例題をほとんどそのまま実行。但し、xmlデータ入力はファイルからとしてみる。

import xml.parsers.expat

# 3 handler functions
def start_element(name, attrs):
    print 'Start element:', name, attrs
def end_element(name):
    print 'End element:', name
def char_data(data):
    print 'Character data:', repr(data)

p = xml.parsers.expat.ParserCreate()

p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data

f = open('sample.xml')
p.ParseFile(f)

入力ファイルxample.xmlの頭の方は

<?xml version="1.0"?>
<!DOCTYPE PubmedArticleSet PUBLIC "-//NLM//DTD PubMedArticle, 1st January 2008//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/pubmed_080101.dtd">
<PubmedArticleSet>
<PubmedArticle>
    <MedlineCitation Owner="NLM" Status="In-Process">
        <PMID>18543432</PMID>
        <DateCreated>
            <Year>2008</Year>
            <Month>06</Month>
            <Day>10</Day>
        </DateCreated>
        <Article PubModel="Print">
            <Journal>
                <JournalIssue CitedMedium="Print">
                    <Issue>1</Issue>
                    <PubDate>
                        <Year>2007</Year>
                    </PubDate>
                </JournalIssue>
                <Title>Ernst Schering Foundation symposium proceedings</Title>
            </Journal>

出力はこうなった(対応する Journal End まで)。

Start element: PubmedArticleSet {}
Character data: u'\n'
Start element: PubmedArticle {}
Character data: u'\n'
Character data: u'    '
Start element: MedlineCitation {u'Owner': u'NLM', u'Status': u'In-Process'}
Character data: u'\n'
Character data: u'        '
Start element: PMID {}
Character data: u'18543432'
End element: PMID
Character data: u'\n'
Character data: u'        '
Start element: DateCreated {}
Character data: u'\n'
Character data: u'            '
Start element: Year {}
Character data: u'2008'
End element: Year
Character data: u'\n'
Character data: u'            '
Start element: Month {}
Character data: u'06'
End element: Month
Character data: u'\n'
Character data: u'            '
Start element: Day {}
Character data: u'10'
End element: Day
Character data: u'\n'
Character data: u'        '
End element: DateCreated
Character data: u'\n'
Character data: u'        '
Start element: Article {u'PubModel': u'Print'}
Character data: u'\n'
Character data: u'            '
Start element: Journal {}
Character data: u'\n'
Character data: u'                '
Start element: JournalIssue {u'CitedMedium': u'Print'}
Character data: u'\n'
Character data: u'                    '
Start element: Issue {}
Character data: u'1'
End element: Issue
Character data: u'\n'
Character data: u'                    '
Start element: PubDate {}
Character data: u'\n'
Character data: u'                        '
Start element: Year {}
Character data: u'2007'
End element: Year
Character data: u'\n'
Character data: u'                    '
End element: PubDate
Character data: u'\n'
Character data: u'                '
End element: JournalIssue
Character data: u'\n'
Character data: u'                '
Start element: Title {}
Character data: u'Ernst Schering Foundation symposium proceedings'
End element: Title
Character data: u'\n'
Character data: u'            '
End element: Journal
Character data: u'\n'

ここで、Character data u'\n'は改行で、元データが多分UTF-8でそのために入っている?
また、Character data u' 'は、各行の先頭にある段下げのための空白。

【欲しいのは?】

<PubmedArticleSet>
  <PubmedArticle>
     <MedlineCitation ... >
        <PMID> PubMed中でのID </PMID>
        ...
        <Article ...>
           <Journal>
             <JournalIssue ...>
                 <Issue> 巻番号 </Issue>
                 <PubDate>
                    <Year> 発行年 </Year>
                    ...
                 </PubDate>
              </JournalIssue>
              ....
              <Title> ジャーナルのタイトル </Title>
           </Journal>
       <ArticleTitle> 論文のタイトル </ArticleTitle>
           <Abstract>
              <AbstractText> 概要 </AbstractText>
           </Abstract>        
           <Affiliation> 著者所属 </Affiliation>
           <AuthorList ... >
              <Author ...>
                 <LastName> 著者姓 </LastName>
                 <ForeName> 著者名 </ForeName>
                 <Initials> イニシャルで書くと </Initials>
              </Author>
              <Author>
                 ...
              </Author>
           </AuthorList>
           <Language>eng</Language>
           ...
        </Article>
        ...
     </MedlineCitation>
     ...
  </PubmedArticle>

  <PubmedArticle>
     ...
  </PubmedArticle>

</PubmedArticleSet>

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-06-23 (月) 15:50:39 (3464d)