PHP: Повышена скорость возврата терминов Mesh из базы данных Entrez (Pubmed)

Я хочу извлечь термины Mesh из результатов поиска в базе данных 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

Есть ли способ получить только термины Mesh или хотя бы меньшую часть xml? Или загрузить только половину файла?

Спасибо


обновление: у меня есть некоторые улучшения. Использование efetch с retmode=text и rettype=medline уменьшило загрузку одного файла с 15 КБ до 4 КБ. Я также связал все загрузки, чтобы уменьшить количество запросов.

Теперь загрузка 500 результатов занимает 4,8 секунды.

Я все еще хочу быстрее.

Есть ли у кого-нибудь советы?


person user4724822    schedule 28.03.2015    source источник


Ответы (1)


Я не уверен, каковы ваши пределы и цели. Но если вы запрашиваете всю базу данных, я бы попробовал наоборот. Запросите базу данных, чтобы перечислить статьи по каждому известному термину MeSH. Насколько мне известно, в MeSH 2014 года есть только «27 149 дескрипторов» , поэтому вам нужно отправить менее 30 тысяч запросов, чтобы получить результаты для всей базы данных. Вы можете добиться этого с помощью Europe PMC RESTful Web Service.

person gawi    schedule 26.04.2015