[[ノート>ノート/ノート]]~
[[前のページ>ノート/Pythonその2]]~
訪問者数 &counter();      最終更新 &lastmod();

***各論文からAbstractを抽出しよう [#zcc3dc9a]
そのためには、前頁のアクセス時のモード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>

これを抽出するためには、パターンマッチングを今ひとつ作り直す必要がある。
まずは.侫ールド中に空白やマイナス、ピリオドなどを含むのでそれをも取り出すこと。テストプログラムとしては&ref(testabstract.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>
                (以下略)

この仕組を、前ページのプログラムに加えると、このようなことになる。全体は
&ref(getlist_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 = []

## Next, get the abstract of each article
 
 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]

これの出力は、&ref(abstractout.txt);のようになる。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS