Я хочу извлечь термины 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 с.
Я все еще хочу это быстрее.
У кого-нибудь есть советы?
Я не уверен, каковы ваши пределы и цели. Но если вы запрашиваете всю базу данных, я бы попробовал наоборот. База данных запросов для перечисления статей для каждого известного термина MeSH. Насколько я знаю, есть только «27 149 дескрипторов в 2014 году MeSH», поэтому вам нужно отправить менее 30 тысяч запросов, чтобы получить результаты для всей базы данных. Вы можете достичь этого, используя Европа PMC RESTful Веб-сервис.
Других решений пока нет …