PHP:提高从Entrez数据库(Pubmed)返回Mesh术语的速度


PHP: Improve speed returning Mesh terms from Entrez database (Pubmed)

我想从Pubmed数据库的搜索结果中提取Mesh术语。我使用的是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

有没有办法只检索Mesh术语,或者至少检索xml的一小部分?或者只加载文件的一半?

谢谢


更新:我有了一些进步。将efetch与retmode=textrettype=medline一起使用将一个文件的下载量从15kb减少到4kb。我还将所有下载捆绑在一起,以减少请求量。

现在加载500个结果需要4.8秒。

我仍然希望它更快。

有人有什么建议吗?

我不确定你的极限和目标是什么。但如果你正在查询整个数据库,那么我会尝试其他方法。查询数据库以列出每个已知MeSH术语的文章。据我所知,只有"2014 MeSH中的27149个描述符",所以您需要发送不到3万个查询才能获得整个数据库的结果。您可以使用欧洲PMC RESTful Web服务来实现它。