从 PubMed 的 HTML 页面提取标题和摘要文本
在 PubMed 摘要网页(如 http://www.ncbi.nlm.nih.gov/pubmed/18235848),可以轻松地访问相关的 HTML 源代码。 例如,这可以在 Safari 浏览器选择"Develop"→"Show Page Source"链接,或在 Firefox 菜单中选"Tools"→"Web Developer"→ "Page Source"。花几分钟探索这个页面,就会看到标题被封闭在标记<hl>和</hl>之间,而摘要文本则是<h3> Abstract</h3> <div class = ""> <p> 和</p> ,这些是关于从 PubMed 的 HTML 摘要页 中选择性提取标题和摘要内容需要知道的一些细节。
下面的示例从一个 Python 脚本打开 HTML 网页,并解析它,进而选择性提取它的某些部分(在此情况下是标题和摘要) 。
import urllib2
import re
pmid = '18235848'
url = 'http://jwww.ncbi.nlm.nih.gov/pubmed?t.erm=%s'%pmid
handler = urllib2.urlopen(url)
html = handler.read()
title_regexp = re.compile('<hl>.{5, 400}</h1>')
title_text = title_regexp.search(html)
abstract_regexp = re.compile('<h3>Abstract</h3><div class = "">cp>.{20, 3000}</p></div>')
abstract_text = abstract_regexp.search(html)
print('TITLE:',title_text.group())
print ('ABSTRACT:' , abstract_text.group())
在 urllib2 的模块中提供了一些连接一个 URL 并检索其内容的工具。 urlopen()方法用于打开 URL用于建立连接,其参数必须是一个 URL。 并且,类似于内置函数 open()打开文件的'情况, urlopen() 返回文件类型的 Python 对象(一个 handler) ,有许多方法可以用来读取其内容(read() , readline() , readlines() , close()。 read()方法将内容读取为字符串文本。
一旦 HTML 源代码被存储在字符串变量(html)中,就可以使用 re 模块提供的工具解析它了。
在这个例子中,查看一下正在使用的 HTML(应将 HTML 文本保存到一个文件,手工 检查它) ,可以识别<h1>和</h1>为题的唯一分隔标签。 因此,正则表达式定义如下:
<h1>.{5, 400}</h1>
该正则表达式匹配 5 至 400 字符的任何由<h1>和</hl> 分隔的文本字符。 只识别标题。 必须注意到,在两个标记之间允许出现的最大字符数应该和科研文章标题可能出现的最大长度匹配,提取摘要时也要注意这一点。
如果循环提取一个 PMID列表中文章的标题和摘耍,必须在代码中加入 for 循环:
pmids = ['18235848' , '22607149' , '22405002' , '21630672‘]
for pmid in pmids:
url = 'http ://www.ncbi.nlm.nih.gov/pubmed?term=%s'+ %pmid
···
PMID 的列表可以从文本文件中读取,并存储在 Python 列表中。