Entrez és un motor de cerca de l'institució pública NCBI que integra diverses bases de dades de ciències de la salut. Ofereix de manera gratuïta molta informació genòmica d'alt rendiment, a través de la API anonimitzada d'Entrez.

NCBI

El Centre Nacional d’Informació Biotecnològica (NCBI) és una institució pública del govern dels Estats Units que ofereix de manera gratuïta molta informació biomèdica i genòmica.

Pots accedir al seu lloc web a http://www.ncbi.nlm.nih.gov/ i obtenir qualsevol dada de seqüències biològiques en diverses formes: des de genomes complets fins a proteïnes, polimorfismes de nucleòtids únics (SNP) o dades de seqüències d'alt rendiment carregades.

L’NCBI i altres bancs de dades publiquen mostres anònimes autoritzades per tal de prevenir MTS.

Entrez

Entrez és un motor de cerca del NCBI que integra diverses bases de dades de ciències de la salut.

Des d'una única pàgina web pots cercar en diferents conjunts de dades com ara literatura científica, bases de dades de seqüències d'ADN i proteïnes, dades d'estructura de proteïnes en 3D i domini de proteïnes, dades d'expressió gènica, conjunts de genomes complets i informació taxonòmica.

Aquest motor de cerca està disponible a http://www.ncbi.nlm.nih.gov/sites/gquery com aplicació web.


eUtils

L'NCBI també ha creat les "Entrez Programming Utilities" (eUtils), un conjunt de 9 eines del costat del servidor per consultar la base de dades Entrez sense un navegador web:

  • EGQuery
  • ECitMatch
  • EInfo
  • ELink
  • EPost
  • ESearch
  • ESpell,
  • EFetch
  • ESummary

Aqueste eines porten molt anys en funcionament i s’accedeixen mitjançant una API web de manera flexible.

L’objectiu és crear una interfície comuna per accedir a bases de dades de característiques diferents: les dades de publicacions mèdiques són diferents a les de les proteïnes o de les de seqüències genètiques.

Tal com s’explica en aquest document: https://www.ncbi.nlm.nih.gov/books/NBK25500, per consultar una base de dades has de crear una URL específica amb el nom del programa que s'utilitzarà al servidor web del NCBI i tots els paràmetres necessaris (com el nom de la base de dades i els termes de cerca).

La resposta serà un document amb les dades en el format corresponent. Totes les URLs E-utility comparteixen el mateix URL base: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/

Pots fer una cerca básica amb aquesta eina i aquests paràmetres:

esearch.fcgi?db=<database>&term=<query>

Per exemple, pots buscar tots els identificadors de PubMed (PMID) per als articles sobre càncer de mama publicats a Science el 2008 amb aquesta URL:

Pots veure que el resultat és un document XML, que era el format estàndard d’intercanvi de dades fins l’aparició de JSON, i és el format per defecte que encara fa servir eUtils per compatibilitat.

Si vols la mateixa informació amb JSON pots utilitzar l’argument retmode=json.

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]&retmode=json

term

Els documents que estan en la base de dades de PubMed estan marcats amb tags que tenen metadata dels documents.

Cada base de dades té uns tags específics, encara que en molts casos són coincidents amb altres bases de dades.

En la consulta anterior pots veure que es fan servir tags per restringir el camp de búsqueda en el paràmetre term.

Per exemple science[journal] per restringir la paraula science al tag journal.

En aquest enllaç tens més informació del camps de búsqueda i els tags: PubMed

PubMed també ofereix "cerca de proximitat" per a diversos termes que apareixen en qualsevol ordre dins d'un nombre determinat de paraules entre si als camps [Title] o [Title/Abstract].


Python

En el seu moment Perl era el llenguatge d’Internet i el NCBI té scripts en aquest llenguatge.

Però avui en dia el llenguatge que es fa servir és Python.

Com que l’accés a eUtils és mitjançant una API Web, pots crear un programa en Python per consultar dades a Entrez mitjançant una sol.licitud HTTP:

./scripts/entrez.py

db = "pubmed"
term = "science[journal] AND breast cancer AND 2008[pdat]"

# https://www.ncbi.nlm.nih.gov/books/NBK25500/
url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"

term = urllib.parse.quote_plus(term)
response = urllib3.request(
    "GET",
    url,
    fields={"db": db, "term": term})

data = response.data.decode("utf-8")
print(data)

Però com pots saber quina informació tens disponible?

NCBI utilitza fitxers DTD per descriure l'estructura de la informació continguda en fitxers XML tal com pots veure en el document de resposta: https://eutils.ncbi.nlm.nih.gov/eutils/dtd/20060628/esearch.dtd

Amb el paràmetre retmode pots escollir el format de tornada del document. El valor per defecte és xml, però pots utilitzar json perquè és més ràpid de processar.

Modifica el programa perquè torni el document en JSON.

./scripts/entrez-json.py

import json
import urllib.parse
import urllib3

db = "pubmed"
term = "science[journal] AND breast cancer AND 2008[pdat]"

#####

url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"

term = urllib.parse.quote_plus(term)

response = urllib3.request(
    "GET",
    url,
    fields={"db": db, "term": term, "retmode": "json"}
)

data = response.json()
print(json.dumps(data["esearchresult"], indent=2))

Pots veure el resultat formatejat perquè els puguis veure bé:

{
  "count": "14597",
  "retmax": "20",
  "retstart": "0",
  "idlist": [
    "39825989",
    "39825944",
    "39824498",

A diferència de XML, fer un “parsing” de JSON és més ràpid que en XML i les respostes en JSON es poden utilitzar directament per les aplicacions web.

En aquest enllaç tens totes les opcions disponibles: https://www.ncbi.nlm.nih.gov/books/NBK25499/#_chapter4_ESearch_


Limitacions

Pots realitzar com a màxim 3 consultes per segon i per IP, sense importar el temps que tardi la consulta en completar-se.

Les altres consultes dins del mateix segon tornen error.

Et pots registrar al NCBI per obtenir una API key tal com s’explica en aquest article New API Keys for the E-utilities, i llavors pots realitzar 10 consultes per segon, encara que comparteixis IP.


Biopython

Enlloc de crear la teva llibreria en Python, pots utilitzar el mòdul Bio.Entrez de BioPython que proporciona funcions per utilitzar tots els programes eUtils.

Al capítol 12 del tutorial de Biopython podem veure com usar tots els programes: https://biopython.org/DIST/docs/tutorial/Tutorial.html#sec19

ESearch

https://pubmed.ncbi.nlm.nih.gov/ és un motor de cerca per a MEDLINE, una base de dades bibliogràfica de ciències de la vida i informació biomèdica. Aquest script consulta la base de dades PubMed mitjançant Entrez.


Referències

Google Docs - Entrez