Работа с базой данных PubMed: различия между версиями

Материал из hpluswiki
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 7: Строка 7:
<syntaxhighlight lang="Bash">md5sum -c pubmed21n*.xml.gz.md5 2>/dev/null | grep FAILED | wc -l</syntaxhighlight>
<syntaxhighlight lang="Bash">md5sum -c pubmed21n*.xml.gz.md5 2>/dev/null | grep FAILED | wc -l</syntaxhighlight>


==Получение id статей по запросу==
==Страница публикации с конкретным 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-запрос:
Для получения списка айдишников статей по ключевому слову можно использовать get-запрос:

Версия от 15:57, 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])

Тьюториалы