我想从Pubmed数据库中的搜索结果中提取网格术语。我正在使用php。
我制作了一个有效的脚本,但速度非常慢。它打开每篇文章,解析XML并检索网格术语。 " fopen"功能是缓慢的部分。
$url= $base."efetch.fcgi?db=$db&id=$id&rettype=abstract";
$opts = array(
'http' => array(
'method' => "GET",
'header' => "User-Agent:MyAgent/1.0\r\n"
)
);
$context = stream_context_create($opts);
$fp = fopen($url,'r',false,$context);
$output=stream_get_contents($fp);
脚本为每篇文章打开一个大的xml文件: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=19616537&retmode=xml
有没有办法只检索网格术语,或者至少检索xml的一小部分?或只加载文件的一半?
谢谢
更新:
我有所改善。使用带有retmode=text
和rettype=medline
的efetch可将一个文件的下载量从15 kb减少到4kb。我还捆绑了所有下载以减少请求数量。
加载500个结果现在需要4.8秒。
我仍然希望它更快。
有没有人有一些提示?
答案 0 :(得分:0)
我不确定你的限制和目标是什么。但是,如果你正在查询整个数据库,那么我会尝试相反的方式。查询数据库以列出每个已知MeSH术语的文章。据我所知,只有"27,149 descriptors in 2014 MeSH",因此您需要发送少于30,000个查询才能获得整个数据库的结果。您可以使用Europe PMC RESTful Web Service来实现它。