PubMed 데이터베이스
이 스킬은 작업에 일반 웹 검색이 아닌 PubMed의 생의학 문헌이 필요할 때 사용하세요.
사용 시기
- MEDLINE 또는 생명과학 문헌 검색
- MeSH 용어, 필드 태그, 날짜, 발행 유형을 사용한 PubMed 질의 구성
- PMID, 초록, 발행 메타데이터 또는 관련 인용 조회
- 반복 가능한 검색 문자열이 필요한 체계적 문헌 고찰 검색 과정 수행
- Python, 셸 또는 다른 HTTP 클라이언트에서 직접 NCBI E-utilities 사용
질의 구성
연구 질문으로 시작하여 개념으로 분할한 다음, Boolean 연산자로 개념을 결합하세요.
concept_1 AND concept_2 AND filter
synonym_a OR synonym_b
NOT exclusion_term
유용한 PubMed 필드 태그:
[ti]: 제목[ab]: 초록[tiab]: 제목 또는 초록[au]: 저자[ta]: 저널명 약어[mh]: MeSH 용어[majr]: 주요 MeSH 주제[pt]: 발행 유형[dp]: 발행일[la]: 언어
예시:
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 및 부주제
개념에 안정적인 통제 어휘 용어가 있을 때는 MeSH를 선호하세요. 주제가 새롭거나 용어가 다양할 때는 MeSH를 제목/초록 용어와 결합하세요.
올바른 부주제 구문은 부주제를 필드 태그 앞에 배치합니다:
diabetes mellitus, type 2/drug therapy[mh]
cardiovascular diseases/prevention & control[mh]
주제가 논문의 핵심인 경우에만 [majr]를 사용하세요. 정밀도를 높일 수 있지만 관련 작업을 놓칠 수 있습니다.
필터
발행 유형:
clinical trial[pt]meta-analysis[pt]randomized controlled trial[pt]review[pt]systematic review[pt]guideline[pt]
날짜 필터:
2026[dp]
2020:2026[dp]
2026/03/15[dp]
가용성 필터:
free full text[sb]
hasabstract[text]
E-utilities 워크플로우
NCBI E-utilities는 반복 가능한 API 워크플로우를 지원합니다:
esearch.fcgi: 검색 및 PMID 반환esummary.fcgi: 간단한 문서 메타데이터 반환efetch.fcgi: XML, MEDLINE 또는 텍스트 형식의 초록 또는 전체 레코드 가져오기elink.fcgi: 관련 문서 및 연결된 리소스 찾기
프로덕션 스크립트의 경우 이메일과 API 키를 사용하세요. API 키는 환경 변수에 저장하고, 커밋된 파일이나 명령 기록에는 절대 저장하지 마세요.
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)
배치 작업의 경우 매우 긴 PMID 목록을 URL로 전달하는 대신 NCBI 히스토리 서버 매개변수(usehistory=y, WebEnv, query_key)를 사용하는 것이 좋습니다.
출력 규율
각 검색 과정에 대해 다음을 기록하세요:
- 정확한 검색 문자열
- 검색한 데이터베이스
- 검색 날짜
- 사용한 필터
- 결과 수
- 내보내기 형식
- 수동 제외 사항
예시:
| 데이터베이스 | 검색 날짜 | 질의 | 필터 | 결과 |
| --- | --- | --- | --- | ---: |
| PubMed | 2026-05-11 | `sickle cell disease[mh] AND CRISPR[tiab]` | 2020:2026[dp], 영어 | 42 |
검토 체크리스트
- 필드 태그가 유효한 PubMed 태그인가요?
- MeSH 용어가 새로운 주제에 대해 자유 텍스트 동의어와 쌍을 이루고 있나요?
- 날짜 범위가 명시적이고 적절한가요?
- 검색 로그에 질의를 재현할 수 있는 충분한 세부 정보가 포함되어 있나요?
- API 키가 환경 변수에서 로드되었나요?
- HTTP 코드가
raise_for_status()를 호출하거나 파싱 전에 200이 아닌 응답을 처리하고 있나요? - 속도 제한이 준수되고 있나요?