![]() |
ノート/テキストマイニング/PubMed解析http://pepper.is.sci.toho-u.ac.jp/pepper/index.php?%A5%CE%A1%BC%A5%C8%2F%A5%C6%A5%AD%A5%B9%A5%C8%A5%DE%A5%A4%A5%CB%A5%F3%A5%B0%2FPubMed%B2%F2%C0%CF |
![]() |
ノート/テキストマイニング
訪問者数 5834 最終更新 2008-06-23 (月) 15:50:39
> ノート/テキストマイニング
> ノート/テキストマイニング/テキストマイニングとシソーラス
> ノート/テキストマイニング/MeSH
> ノート/テキストマイニング/NLTK
PubMedのAbstractを使ったテキストマイニングの演習。要するにPubMedのデータ(全部は大変だから一部に限定)を、テキストマイニングの手法で解析してみる。
作業ログ
oreganoを使う。FreeBSDはMySQLのバージョンが合わず面倒なのでやめた。
MySQLは既に入っているので、そのまま使う。ユーザのみ作成(GRANT文)
MySQL-pythonのインストール
import MySQLdb con = MySQLdb.connect(db="mytest", host="localhost", port=3306, user="xxxxxx", passwd="******") cur = con.cursor() s = "SELECT * FROM mytest" cur.execute(s) r = cur.fetchone() while r != None: print "%-10s | %-40s" % r r = cur.fetchone() cur.close() con.close()
%python mysqltest.py
Yamanouchi | 21 Tanaka | 25
import MySQLdb con = MySQLdb.connect(db="mytest", host="localhost", port=3306, user="xxxxxx", passwd="******") cur = con.cursor() name = "Yamada" age = "13" s = "INSERT INTO mytest values (\'" + name + "\', \'" + age + "\')" ###print s cur.execute(s) cur.close() con.close()
次に、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>