我是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()
或者,如果有人知道一种不那么迂回的方式,我只能使用作者/年和关键词得到摘要,那也很棒。