ノート
前のページ
訪問者数 2725      最終更新 2007-11-23 (金) 17:10:50

各論文からAbstractを抽出しよう

そのためには、前頁のアクセス時のモードretmodeを、テキストtextではなくXML(xml)にする。

XMLモードで得られるデータの例

<?xml version="1.0"?>
<!DOCTYPE PubmedArticleSet PUBLIC "-//NLM//DTD PubMedArticle, 1st January 2007//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/pubmed_070101.dtd">
<PubmedArticleSet>
<PubmedArticle>
    <MedlineCitation Owner="NLM" Status="Publisher">
        <PMID>1803 0674</PMID>
        <DateCreated>
            <Year>2007</Year>
            <Month>11</Month>
            <Day>21</Day>
        </DateCreated>
        <Article PubModel="Print-Electronic">
            <Journal>
                <ISSN IssnType="Electronic">1098-1004</ISSN>
                <JournalIssue CitedMedium="Internet">
                    <PubDate>
                        <Year>2007</Year>
                        <Month>Nov</Month>
                        <Day>20</Day>
                    </PubDate>
                </JournalIssue>
            </Journal>
            <ArticleTitle>RNA-based mutation analysis identifies an unusual MSH6 splicing defect and circumvents PMS2 pseudogene interference.</ArticleTitle>
            <Pagination>
                <MedlinePgn/>
            </Pagination>
            <Abstract>
                <AbstractText>Heterozygous germline mutations in one of the mismatch repair (以下略) </AbstractText>
            </Abstract>
            <Affiliation>Department of Medical Genetics, Medical University Vienna, Vienna, Austria.</Affiliation>
            <AuthorList>
                <Author>
                    <LastName>Etzler</LastName>
                    <FirstName>J</FirstName>
                    <Initials>J</Initials>
                </Author>
                <Author>
                    <LastName>Peyrl</LastName>
                    <FirstName>A</FirstName>
                    <Initials>A</Initials>
                </Author>
                <Author>
                    <LastName>Zatkova</LastName>
                    <FirstName>A</FirstName>
                    <Initials>A</Initials>
                </Author>
                <Author>
                    <LastName>Schildhaus</LastName>
                    <FirstName>H-U</FirstName>
                    <Initials>HU</Initials>
                </Author>
                <Author>
                    <LastName>Ficek</LastName>
                    <FirstName>A</FirstName>
                    <Initials>A</Initials>
                </Author>
                <Author>
                    <LastName>Merkelbach-Bruse</LastName>
                    <FirstName>S</FirstName>
                    <Initials>S</Initials>
                </Author>
                <Author>
                    <LastName>Kratz</LastName>
                    <FirstName>C P</FirstName>
                    <Initials>CP</Initials>
                </Author>
                <Author>
                    <LastName>Attarbaschi</LastName>
                    <FirstName>A</FirstName>
                    <Initials>A</Initials>
                </Author>
                <Author>
                    <LastName>Hainfellner</LastName>
                    <FirstName>J A</FirstName>
                    <Initials>JA</Initials>
                </Author>
                <Author>
                    <LastName>Yao</LastName>
                    <FirstName>S</FirstName>
                    <Initials>S</Initials>
                </Author>
                <Author>
                    <LastName>Messiaen</LastName>
                    <FirstName>L</FirstName>
                    <Initials>L</Initials>
                </Author>
                <Author>
                    <LastName>Slavc</LastName>
                    <FirstName>I</FirstName>
                    <Initials>I</Initials>
                </Author>
                <Author>
                    <LastName>Wimmer</LastName>
                    <FirstName>K</FirstName>
                    <Initials>K</Initials>
                </Author>
            </AuthorList>
            <Language>ENG</Language>
            <PublicationTypeList>
                <PublicationType>JOURNAL ARTICLE</PublicationType>
            </PublicationTypeList>
            <ArticleDate DateType="Electronic">
                <Year>2007</Year>
                <Month>11</Month>
                <Day>20</Day>
            </ArticleDate>
        </Article>
        <MedlineJournalInfo>
            <MedlineTA>Hum Mutat</MedlineTA>
            <NlmUniqueID>9215429</NlmUniqueID>
        </MedlineJournalInfo>
    </MedlineCitation>
    <PubmedData>
        <History>
            <PubMedPubDate PubStatus="pubmed">
                <Year>2007</Year>
                <Month>11</Month>
                <Day>22</Day>
                <Hour>9</Hour>
                <Minute>0</Minute>
            </PubMedPubDate>
            <PubMedPubDate PubStatus="medline">
                <Year>2007</Year>
                <Month>11</Month>
                <Day>22</Day>
                <Hour>9</Hour>
                <Minute>0</Minute>
            </PubMedPubDate>
        </History>
        <PublicationStatus>aheadofprint</PublicationStatus>
        <ArticleIdList>
            <ArticleId IdType="doi">10.1002/humu.20657</ArticleId>
            <ArticleId IdType="pubmed">18030674</ArticleId>
        </ArticleIdList>
    </PubmedData>
</PubmedArticle>

</PubmedArticleSet>

これを抽出するためには、パターンマッチングを今ひとつ作り直す必要がある。 まずは.侫ールド中に空白やマイナス、ピリオドなどを含むのでそれをも取り出すこと。テストプログラムとしてはfiletestabstract.py

mref = re.compile('.*<PubDate>(.+)</PubDate>.*<ArticleTitle>(.+)</ArticleTitle>.*<AbstractText>(.+)</AbstractText>.*<AuthorList>(.+)</AuthorList>', re.S)
a = mref.search(efetch_result)
print a
pubdate = []
articletitle = []
abstracttext = []
authorlist = []

if a:
  pubdate.append(a.group(1))
  articletitle.append(a.group(2))
  abstracttext.append(a.group(3))
  authorlist.append(a.group(4))
else:
  pubdate.append("")
  articletitle.append("")
  abstracttext.append("")
  authorlist.append("")

print "[PubDate]" ; print pubdate[0]
print "[Title]" ;  print articletitle[0]
print "[Abstract]"; print abstracttext[0]
print "[Authorlist]"; print authorlist[0]

得られた結果は

<_sre.SRE_Match object at 0x00ADE860>
[PubDate]
                       <Year>2007</Year>
                       <Month>Nov</Month>
                       <Day>20</Day>
[Title]
RNA-based mutation analysis (中略) PMS2 pseudogene interference.
[Abstract]
Heterozygous germline mutations (中略)Wiley-Liss, Inc.
[Authorlist]
                <Author>
                   <LastName>Etzler</LastName>
                   <FirstName>J</FirstName>
                   <Initials>J</Initials>
               </Author>
               <Author>
                   <LastName>Peyrl</LastName>
                   <FirstName>A</FirstName>
                   <Initials>A</Initials>
               </Author>
               (以下略)

この仕組を、前ページのプログラムに加えると、このようなことになる。全体は filegetlist_access_abstract.py

if count>3:
  count = 3   #  For experiments, I limit "count" up to 3 papers.

## Next, get the abstract of each article
articles = []

for i in range(int(count)):
  efetch = utils + "/efetch.fcgi?rettype=" + report + "&retmode=xml&retstart=" + str(i) + \
    "&retmax=" + "1" + "&db=" + db + "&query_key=" + querykey + "&WebEnv=" + webenv
  f = urllib.urlopen(efetch)
  efetch_result = f.read()
##  print efetch_result
  onearticle = []
  aref = re.compile('.*<PubDate>(.+)</PubDate>.*<ArticleTitle>(.+)</ArticleTitle>' + \
     '.*<AbstractText>(.+)</AbstractText>.*<AuthorList>(.+)</AuthorList>', re.S)
  a = aref.search(efetch_result)
  if a:
    onearticle.append(a.group(1))
    onearticle.append(a.group(2))
    onearticle.append(a.group(3))
    onearticle.append(a.group(4))
  else:
    onearticle.append("")
    onearticle.append("")
    onearticle.append("")
    onearticle.append("")
  articles.append(onearticle)

for i in range(int(count)):
  print "--[" + str(i) + "]---------"
  print articles[i][0]
  print articles[i][1]
  print articles[i][2]
  print articles[i][3]

これの出力は、fileabstractout.txtのようになる。


添付ファイル: filegetlist_access_abstract.py 781件 [詳細] fileabstractout.txt 924件 [詳細] filetestabstract.py 780件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-23 (金) 17:10:50 (3505d)