Le module Entrez permet d'accéder aux bases du NCBI (à la fois les bases type séquences et autre, mais aussi PubMed par exemple).
Pour utiliser le module, faire : from Bio import Entrez.
Recommandations pour utiliser le module :
Principe général : la plupart des requêtes récupère les infos sous forme de XML, et il y a un parseur intégré que l'on peut appeler avec Entrez.read qui transforme le xml en structure python (avec dictionnaires et listes).
Pour récupérer la liste de toutes les bases Entrez :
- handle = Entrez.einfo(); result = Entrez.read(handle); handle.close()
- le résultat est un dictionnaire avec une seule clef 'DbList' et comme valeur la liste de toutes les bases : ['pubmed', 'protein', 'nuccore', ...]
Pour récupérer des infos sur une base Entrez :
Pour effectuer une requête :
- handle = Entrez.esearch(db = 'pubmed', term = 'acetylcholine[TITL] AND receptor[TIAB] AND chang*[AUTH]', retmax = 10); result = Entrez.read(handle); handle.close() : effectue une requête exactement comme avec l'interface utilisateur en restreignant si nécessaire certains termes à certains champs.
- on peut utiliser les booléens AND, OR, NOT (par défaut, c'est AND).
- on peut utiliser la troncation de mot avec un '*'.
- retmax : permet de limiter le résultat à un certain nombre de records. attention : par défault, il est fixé à 20 pour PubMed si non indiqué, donc l'augmenter si nécessaire.
- le résultat est un dictionnaire contenant notamment les clefs :
- Count : nombre d'ids existants correspondant à la requête.
- RetMax : nombre d'ids retournés, qui peut être plus petit si limité par retmax.
- IdList : la liste des ids des records retournés, par exemple le PMID dans le cas de PubMed.
- attention : si il y a des caractère spéciaux dans la requête, il faut les échapper en html.
Pour récupérer un résumé de différentes entrées :
- handle = Entrez.esummary(db = 'pubmed', id = '25632877,1322090'); result = Entrez.read(handle); handle.close()
- on peut mettre un seul id ou plusieurs séparés par une virgule.
- le résultat est une liste de dictionnaires avec comme clefs : Id, Title, FullJournalName, AuthorList, et beaucoup d'autres (mais pas l'abstract pour PubMed).
- attention : si trop d'ids (plus de 200 environ), utiliser epost pour faire un POST plutôt qu'un GET.
Pour récupérer des entrées complètes, par exemple pour PubMed :
- handle = Entrez.efetch(db = 'pubmed', id = '25632877,1322090', rettype = 'medline', retmod = 'text'); result = handle.read(); handle.close() : recupère le résultat sous forme de texte avec des champs.
- handle = Entrez.efetch(db = 'pubmed', id = '25632877,8663316', rettype = 'abstract', retmod = 'xml'); result = Entrez.read(handle); handle.close() : récupère le résultat sous forme de xml qui est parsé :
Récupération d'un grand nombre d'entrées :
- on fait d'abord un post avec la liste des ids et on récupère en retour le cookie (sous forme d'environnement web) et un id de query :
handle = Entrez.epost(db = 'pubmed', id = '25632877,8663316')
result = Entrez.read(handle)
webEnv = result['WebEnv']
queryKey = result['QueryKey']
- puis, on réutilise cet environnement pour demander les entrées correspondantes :
handle = Entrez.efetch(db = 'pubmed', webenv = webEnv, query_key = queryKey,
rettype = 'abstract', retmod = 'xml')
result = Entrez.read(handle)
handle.close()