Base de Dados PubMed
Utilize esta habilidade quando uma tarefa precisar de literatura biomédica do PubMed em vez de uma busca geral na web.
Quando Utilizar
- Pesquisar MEDLINE ou literatura de ciências da vida.
- Construir consultas PubMed com termos MeSH, tags de campo, datas ou tipos de artigo.
- Consultar PMIDs, resumos, metadados de publicação ou citações relacionadas.
- Executar passagens de busca para revisão sistemática que necessitem de strings de busca reproduzíveis.
- Utilizar as E-utilities do NCBI diretamente de Python, shell ou outro cliente HTTP.
Construção de Consultas
Comece com a pergunta de pesquisa, divida-a em conceitos e depois combine os conceitos com operadores booleanos.
conceito_1 AND conceito_2 AND filtro
sinônimo_a OR sinônimo_b
NOT termo_exclusão
Tags de campo úteis no PubMed:
[ti]: título[ab]: resumo[tiab]: título ou resumo[au]: autor[ta]: abreviação do título do periódico[mh]: termo MeSH[majr]: tópico MeSH principal[pt]: tipo de publicação[dp]: data de publicação[la]: idioma
Exemplos:
diabetes mellitus[mh] AND treatment[tiab] AND systematic review[pt] AND 2023:2026[dp]
(metformin[nm] OR insulin[nm]) AND diabetes mellitus, type 2[mh] AND randomized controlled trial[pt]
smith ja[au] AND cancer[tiab] AND 2026[dp] AND english[la]
MeSH e Subcabeçalhos
Prefira MeSH quando o conceito tiver um termo estável de vocabulário controlado. Combine MeSH com termos de título/resumo quando o tópico for novo ou a terminologia variar.
A sintaxe correta de subcabeçalho coloca o subcabeçalho antes da tag de campo:
diabetes mellitus, type 2/drug therapy[mh]
cardiovascular diseases/prevention & control[mh]
Use [majr] apenas quando o tópico deve ser central para o artigo. Pode melhorar a precisão, mas pode perder trabalhos relevantes.
Filtros
Tipos de publicação:
clinical trial[pt]meta-analysis[pt]randomized controlled trial[pt]review[pt]systematic review[pt]guideline[pt]
Filtros de data:
2026[dp]
2020:2026[dp]
2026/03/15[dp]
Filtros de disponibilidade:
free full text[sb]
hasabstract[text]
Fluxo de Trabalho das E-utilities
As E-utilities do NCBI suportam fluxos de trabalho de API reproduzíveis:
esearch.fcgi: pesquisa e retorna PMIDs.esummary.fcgi: retorna metadados leves do artigo.efetch.fcgi: recupera resumos ou registros completos em XML, MEDLINE ou texto.elink.fcgi: encontra artigos relacionados e recursos vinculados.
Utilize um email e chave de API para scripts de produção. Armazene chaves de API em variáveis de ambiente, nunca em arquivos versionados ou histórico de comandos.
import os
import time
import requests
BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils"
def esearch(query: str, retmax: int = 20) -> list[str]:
params = {
"db": "pubmed",
"term": query,
"retmode": "json",
"retmax": retmax,
"tool": "ecc-pubmed-search",
"email": os.environ.get("NCBI_EMAIL", ""),
}
api_key = os.environ.get("NCBI_API_KEY")
if api_key:
params["api_key"] = api_key
response = requests.get(f"{BASE}/esearch.fcgi", params=params, timeout=30)
response.raise_for_status()
time.sleep(0.35)
return response.json()["esearchresult"]["idlist"]
pmids = esearch("hypertension[mh] AND randomized controlled trial[pt] AND 2024:2026[dp]")
print(pmids)
Para lotes, prefira os parâmetros do servidor de histórico do NCBI (usehistory=y, WebEnv, query_key) em vez de passar listas muito longas de PMIDs através de URLs.
Disciplina de Saída
Para cada passagem de busca, registre:
- string de busca exata
- base de dados pesquisada
- data da pesquisa
- filtros utilizados
- contagem de resultados
- formato de exportação
- quaisquer exclusões manuais
Exemplo:
| Base de Dados | Data da Pesquisa | Consulta | Filtros | Resultados |
| --- | --- | --- | --- | ---: |
| PubMed | 2026-05-11 | `sickle cell disease[mh] AND CRISPR[tiab]` | 2020:2026[dp], English | 42 |
Lista de Verificação
- As tags de campo são tags válidas do PubMed?
- Os termos MeSH estão emparelhados com sinônimos de texto livre para tópicos mais recentes?
- O intervalo de datas é explícito e apropriado?
- O registro da busca inclui detalhes suficientes para reproduzir a consulta?
- As chaves de API são carregadas a partir do ambiente?
- O código HTTP chama
raise_for_status()ou lida de outra forma com respostas diferentes de 200 antes de analisar? - Os limites de taxa são respeitados?