如何使用作者,年份和关键字检索已发布的摘要/完整文章?

时间:2014-07-26 20:38:53

标签: python

我是python的新手,所以也许有一个简单的解决方案,我错过了。我需要能够使用文章的作者,年份和一些关键词(特别是文章中研究的疾病)从PubMed获得文章的摘要。

我可以创建可以获取给定作者/年的URL和关键字(一个名为'形态'的变量)的函数:

def print_url(author, morphology):
    url="http://www.ncbi.nlm.nih.gov/pubmed/?term="+author+morphology
    print url

其中,给定print_url(“Abdel-Ghaffar + et + al + 2010”,“弥漫性+大+ B细胞+淋巴瘤”)打印文章的网址:http://www.ncbi.nlm.nih.gov/pubmed/?term=Abdel-Ghaffar+et+al+2010Diffuse+large+B-cell+lymphoma

(注意:我使用原始关键词并用excel替换空格,因此为了网址,“Abdel-Ghaffar et al 2010”变成了“Abdel-Ghaffar + et + al + 2010”。我不知道怀疑这可以在python中完成,但无论如何它都很容易在excel中完成。)

获取页面的html也非常简单:

import urllib2

def print_html(author, morphology):
    url="http://www.ncbi.nlm.nih.gov/pubmed/?term="+"%2C+"+author+morphology
    handler=urllib2.urlopen(url)
    html=handler.read()
    print html

abstract_html = print_html("Abdel-Ghaffar+et+al+2010", "Diffuse+large+B-cell+lymphoma")

从那里开始,我计划这样做的方法是使用以下函数根据html中PMID之前和之后的字符从html中提取文章Pubmed ID(PMID):

def find_between( s, before, after ):
    try:
        start = s.index( before ) + len( before )
        end = s.index( after, before )
        return s[before:end]
    except ValueError:
        return ""

然后在先前定义的变量'html'上运行此函数:

print find_between( abstract_html, "pmid=", ";" )

因为在整个'html'中,ID出现在“pmid =”和“;”之间。在我的例子中,它将是“pmid = 19905895; id”,我想要的输出是“19905895”。从这里开始,我可以使用Biopython获取PMID后的摘要。但由于某种原因,上述功能不起作用;我得到“AttributeError:'NoneType'对象没有属性'索引” 当我尝试将html块转换为字符串时,该函数根本不返回任何内容。那么我怎样才能从html中获得pmid?

一旦我有了PMID,我就可以使用我在另一个问题的答案中找到的以下代码:

from Bio.Entrez import efetch

def print_abstract(pmid):
    handle = efetch(db='pubmed', id=pmid, retmode='text', rettype='abstract')
    print handle.read()

或者,如果有人知道一种不那么迂回的方式,我只能使用作者/年和关键词得到摘要,那也很棒。

0 个答案:

没有答案