【问题标题】:PHP: Improve speed returning Mesh terms from Entrez database (Pubmed)PHP:提高从 Entrez 数据库返回 Mesh 项的速度(Pubmed)
【发布时间】:2015-03-28 20:03:39
【问题描述】:

我想从 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

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

谢谢


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

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

我还是想要更快。

有人有什么建议吗?

【问题讨论】:

    标签: php performance pubmed


    【解决方案1】:

    我不确定您的限制和目标是什么。但是,如果您要查询整个数据库,那么我会尝试相反的方法。查询数据库以列出每个已知 MeSH 术语的文章。据我所知,只有"27,149 descriptors in 2014 MeSH",因此您需要发送少于 3 万个查询才能获得整个数据库的结果。您可以使用Europe PMC RESTful Web Service 来实现它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多