Работа с базой данных PubMed: различия между версиями
Перейти к навигации
Перейти к поиску
Denis.s (обсуждение | вклад) Нет описания правки |
Denis.s (обсуждение | вклад) |
||
(не показано 19 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
== Полный дамп пабмеда == | |||
* ftp://ftp.ncbi.nlm.nih.gov/pubmed/baseline − фтп архив для свободного скачивания по анонимному логину. В архиве около 50 Гб сжатых файлов вида <code>pubmed<year_when_dumped>n<index>xml.gz</code> содержат около 31 миллиона [[MEDLINE (формат данных)|medline]] записей. | |||
Файлы большие, могут биться при закачке. Поэтому рекомендуется после загрузки проверить контрольные суммы, скачав с сервера файлы .md5. В линуксе проверку по всему массиву файлов можно сделать например так: | |||
<syntaxhighlight lang="Bash">md5sum -c pubmed21n*.xml.gz.md5</syntaxhighlight> | |||
показать количество побитых файлов: | |||
<syntaxhighlight lang="Bash">md5sum -c pubmed21n*.xml.gz.md5 2>/dev/null | grep FAILED | wc -l</syntaxhighlight> | |||
==Страница публикации с конкретным pmid== | |||
<nowiki>https://pubmed.ncbi.nlm.nih.gov/[pmid]</nowiki> | |||
==Получение [[medline]] записи по pmid== | |||
<nowiki>https://api.ncbi.nlm.nih.gov/lit/ctxp/v1/pubmed/?format=medline&id=[pmid]</nowiki> | |||
==Получение pmid статей по запросу== | |||
Для получения списка айдишников статей по ключевому слову можно использовать get-запрос: | Для получения списка айдишников статей по ключевому слову можно использовать get-запрос: | ||
<pre><nowiki>https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db= | <!-- конкретный пример: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=longevity&tool=just_a_browser_address_string&email=my_mail@example.com&format=json&retmax=100 --> | ||
<pre><nowiki>https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&tool=[название вашего скрипта]&email=[контактный email]&format=json&term=[ключевое слово]</nowiki></pre> | |||
Результат будет примерно такой: | Результат будет примерно такой: | ||
Строка 15: | Строка 32: | ||
"idlist":["7956338", "7956337", "7956317", "7956313", "7956301", "7956298", "7956293", "7956291", "7956287", "7956282", "7956276", "7956270", "7956269", "7956239", "7956238", "7956234", "7956232", "7956215", "7956214", "7956207"], | "idlist":["7956338", "7956337", "7956317", "7956313", "7956301", "7956298", "7956293", "7956291", "7956287", "7956282", "7956276", "7956270", "7956269", "7956239", "7956238", "7956234", "7956232", "7956215", "7956214", "7956207"], | ||
"translationset":[{ | "translationset":[{ | ||
"from":" | "from":"aging", | ||
"to":"\" | "to":"\"aging\"[MeSH Terms] OR \"aging\"[All Fields]"}], | ||
"translationstack":[ | "translationstack":[ | ||
{ | { | ||
"term":"\" | "term":"\"aging\"[MeSH Terms]", | ||
"field":"MeSH Terms", | "field":"MeSH Terms", | ||
"count":"49929", | "count":"49929", | ||
"explode":"Y"}, | "explode":"Y"}, | ||
{ | { | ||
"term":"\" | "term":"\"aging\"[All Fields]", | ||
"field":"All Fields", | "field":"All Fields", | ||
"count":"557471", | "count":"557471", | ||
Строка 30: | Строка 47: | ||
"OR", | "OR", | ||
"GROUP"], | "GROUP"], | ||
"querytranslation":"\" | "querytranslation":"\"aging\"[MeSH Terms] OR \"aging\"[All Fields]"} | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Соответственно, список id статей: <code><res>.esearchresult.idlist</code> | Соответственно, список id статей: <code><res>.esearchresult.idlist</code> | ||
===Параметры запроса=== | |||
* '''db''' − какую базу данных запрашиваем. Возможные значения: <code>pmc, pubmed</code>. Разница между PMC и PubMed в том, что на PMC статьи с полнотекстовым доступом, а на PubMed не всегда. Зато на PubMed больший охват статей по абстрактам. Учитывая то, что полный текст интересующей статьи достать [https://sci-hub.do не так уж и трудно], установка ''db'' в значение ''pubmed'' выглядит более предпочтительной. | |||
* '''tool''' − PubMed просит указывать название инструментария или программы, которая работает с API. (Я указываю ''"odysseus"'' - по названию своей библиотеки, расширяющей Racket. -- [[Участник:Denis.s|Denis.s]] ([[Обсуждение участника:Denis.s|обсуждение]])) | |||
* '''email''' − реальный почтовый ящик, тоже по просьбе PubMeda. Неизвестно насколько страшно указывать в этом параметре значение типа foobar@example.com и какие кары за это могут последовать | |||
* '''format''' − в каком формате выводить результат. По умолчанию выводится XML. (Я ставлю значение ''json'', потому что мне кажется, что json чуть легче парсить и "читать вручную". -- [[Участник:Denis.s|Denis.s]] ([[Обсуждение участника:Denis.s|обсуждение]])) | |||
* '''retmax''' − максимальное число выводимых id | |||
* '''term''' − собственно ключевое слово, по которому происходит отбор статей. Либо комбинация ключевых слов и частей записи, в которых они должны встретиться. Например <code>(aging[Abstract] AND aging[MeSH Terms]) OR (longevity[Abstract] AND longevity[MeSH Terms])</code> | |||
===Тьюториалы=== | |||
* [https://www.ncbi.nlm.nih.gov/books/NBK25499/ ncbi.nlm.nih.gov/books/NBK25499 − Подробная статья про параметры GET запросов] |
Текущая версия от 15:58, 21 марта 2021
Полный дамп пабмеда[править]
- ftp://ftp.ncbi.nlm.nih.gov/pubmed/baseline − фтп архив для свободного скачивания по анонимному логину. В архиве около 50 Гб сжатых файлов вида
pubmed<year_when_dumped>n<index>xml.gz
содержат около 31 миллиона medline записей.
Файлы большие, могут биться при закачке. Поэтому рекомендуется после загрузки проверить контрольные суммы, скачав с сервера файлы .md5. В линуксе проверку по всему массиву файлов можно сделать например так:
md5sum -c pubmed21n*.xml.gz.md5
показать количество побитых файлов:
md5sum -c pubmed21n*.xml.gz.md5 2>/dev/null | grep FAILED | wc -l
Страница публикации с конкретным pmid[править]
https://pubmed.ncbi.nlm.nih.gov/[pmid]
Получение medline записи по pmid[править]
https://api.ncbi.nlm.nih.gov/lit/ctxp/v1/pubmed/?format=medline&id=[pmid]
Получение pmid статей по запросу[править]
Для получения списка айдишников статей по ключевому слову можно использовать get-запрос:
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&tool=[название вашего скрипта]&email=[контактный email]&format=json&term=[ключевое слово]
Результат будет примерно такой:
{
"header": {
"type":"esearch",
"version":"0.3"},
"esearchresult": {
"count":"556850",
"retmax":"20",
"retstart":"0",
"idlist":["7956338", "7956337", "7956317", "7956313", "7956301", "7956298", "7956293", "7956291", "7956287", "7956282", "7956276", "7956270", "7956269", "7956239", "7956238", "7956234", "7956232", "7956215", "7956214", "7956207"],
"translationset":[{
"from":"aging",
"to":"\"aging\"[MeSH Terms] OR \"aging\"[All Fields]"}],
"translationstack":[
{
"term":"\"aging\"[MeSH Terms]",
"field":"MeSH Terms",
"count":"49929",
"explode":"Y"},
{
"term":"\"aging\"[All Fields]",
"field":"All Fields",
"count":"557471",
"explode":"N"},
"OR",
"GROUP"],
"querytranslation":"\"aging\"[MeSH Terms] OR \"aging\"[All Fields]"}
}
Соответственно, список id статей: <res>.esearchresult.idlist
Параметры запроса[править]
- db − какую базу данных запрашиваем. Возможные значения:
pmc, pubmed
. Разница между PMC и PubMed в том, что на PMC статьи с полнотекстовым доступом, а на PubMed не всегда. Зато на PubMed больший охват статей по абстрактам. Учитывая то, что полный текст интересующей статьи достать не так уж и трудно, установка db в значение pubmed выглядит более предпочтительной. - tool − PubMed просит указывать название инструментария или программы, которая работает с API. (Я указываю "odysseus" - по названию своей библиотеки, расширяющей Racket. -- Denis.s (обсуждение))
- email − реальный почтовый ящик, тоже по просьбе PubMeda. Неизвестно насколько страшно указывать в этом параметре значение типа foobar@example.com и какие кары за это могут последовать
- format − в каком формате выводить результат. По умолчанию выводится XML. (Я ставлю значение json, потому что мне кажется, что json чуть легче парсить и "читать вручную". -- Denis.s (обсуждение))
- retmax − максимальное число выводимых id
- term − собственно ключевое слово, по которому происходит отбор статей. Либо комбинация ключевых слов и частей записи, в которых они должны встретиться. Например
(aging[Abstract] AND aging[MeSH Terms]) OR (longevity[Abstract] AND longevity[MeSH Terms])