2008-10-17 23:28:00
本当はAmazon S3にデータをアップロードするスクリプトの続きなのだけど、ちょっと手間取ってしまったので、途中まで。PubMedをpmidで検索して、論文情報の掲載誌、発表年、著者、題名、要旨などの情報を得て、それをPythonで処理する手順である。これができないと、データの整理ができないのだ。
またもやElementTreeで戸惑う。面倒臭いなあ、ElementTreeは。とにかく、あるフォルダにpmidをファイル名とするpdfファイルを入れておいて、それをまとめて上記の論文情報をPubMedに問い合わせて取得するというところまで。明日は、全文テキストの書き出しと、Amazon S3へのアップロードをしたい。スクリプトは以下の通り。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
from urllib import urlopen
import xml.etree.ElementTree as ET
filelist = os.listdir('./')
idlist = []
for pdf_file in filelist:
if pdf_file.find('pdf') > 0:
pmid = pdf_file.replace(".pdf","")
idlist.append(pmid)
url = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=' + ','.join(idlist) + '&retmode=xml&rettype=full'
xml = urlopen(url).read()
dom = ET.fromstring(xml)
for particle in dom.findall('PubmedArticle'):
print particle.findtext('./MedlineCitation/PMID')
journal = particle.findtext('./MedlineCitation/Article/Journal/ISOAbbreviation')
journal = journal.replace('.','')
volume = particle.findtext('./MedlineCitation/Article/Journal/JournalIssue/Volume')
pubyear = particle.findtext('./MedlineCitation/Article/Journal/JournalIssue/PubDate/Year')
pages = particle.findtext('./MedlineCitation/Article/Pagination/MedlinePgn')
title = particle.findtext('./MedlineCitation/Article/ArticleTitle')
abstract = particle.findtext('./MedlineCitation/Article/Abstract/AbstractText')
authors = particle.findall('./MedlineCitation/Article/AuthorList/Author')
aulist = []
for author in authors:
aname = author.findtext('./LastName') + "_" + author.findtext('./Initials')
aulist.append(aname)
print journal, "(", pubyear, ")", volume, ":", pages
print ', '.join(aulist)
print title
掲載のために一部省略している部分があります。