Banco de Dados PubMed
Use esta skill quando uma tarefa precisar de literatura biomédica do PubMed em vez de pesquisa web geral.
Quando Usar
- Pesquisar na MEDLINE ou em 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 passes de busca de revisão sistemática que precisem de strings de busca reproduzíveis.
- Usar as E-utilities do NCBI diretamente do Python, shell ou outro cliente HTTP.
Construção de Consultas
Comece com a pergunta de pesquisa, divida-a em conceitos e, em seguida, combine os conceitos com operadores booleanos.
concept_1 AND concept_2 AND filter
synonym_a OR synonym_b
NOT exclusion_term
Tags de campo úteis do 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]: principal tópico MeSH[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 de vocabulário controlado estável. Combine MeSH com termos de título/resumo quando o tópico for novo ou a terminologia variar.
A sintaxe correta do 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: pesquisar e retornar PMIDs.esummary.fcgi: retornar metadados leves do artigo.efetch.fcgi: buscar resumos ou registros completos em XML, MEDLINE ou texto.elink.fcgi: encontrar artigos relacionados e recursos vinculados.
Use 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 parâmetros do servidor de histórico do NCBI (usehistory=y,
WebEnv, query_key) em vez de passar listas muito longas de PMIDs por URLs.
Disciplina de Resultados
Para cada passe de busca, registre:
- string de busca exata
- banco de dados pesquisado
- data da pesquisa
- filtros usados
- contagem de resultados
- formato de exportação
- quaisquer exclusões manuais
Exemplo:
| Database | Date searched | Query | Filters | Results |
| --- | --- | --- | --- | ---: |
| 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 log da busca inclui detalhes suficientes para reproduzir a consulta?
- As chaves de API são carregadas do ambiente?
- O código HTTP chama
raise_for_status()ou trata de outra forma respostas não-200 antes de analisar? - Os limites de taxa são respeitados?