PubMedデータベース は何をしますか?
このスキルは、一般のウェブ検索ではなくPubMedから生物医学文献が必要なタスクに使用します。
使用タイミング
- MEDLINEや生命科学文献の検索。
- MeSH用語、フィールドタグ、日付、論文タイプを用いたPubMedクエリの構築。
- PMID、抄録、出版メタデータ、関連引用情報の検索。
- 再現可能な検索文字列が必要な系統的レビューの検索パスの実行。
- Python、シェル、その他のHTTPクライアントからNCBI E-utilitiesを直接使用する場合。
クエリの構築
研究課題から始め、概念に分割し、ブール演算子で結合します。
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)
バッチ処理では、URL経由で非常に長いPMIDリストを渡す代わりに、NCBIヒストリーサーバーパラメータ(usehistory=y、WebEnv、query_key)を推奨します。
出力管理
各検索パスについて、以下を記録します:
- 正確な検索文字列
- 検索したデータベース
- 検索日
- 使用したフィルター
- 結果件数
- エクスポート形式
- 手動除外の有無
例:
| データベース | 検索日 | クエリ | フィルター | 結果 |
| --- | --- | --- | --- | ---: |
| PubMed | 2026-05-11 | `sickle cell disease[mh] AND CRISPR[tiab]` | 2020:2026[dp], English | 42 |
レビューチェックリスト
- フィールドタグは有効なPubMedタグですか?
- MeSH用語は新しいトピックのためにフリーテキストの同義語とペアになっていますか?
- 日付範囲は明示的かつ適切ですか?
- 検索ログはクエリを再現するのに十分な詳細を含んでいますか?
- APIキーは環境から読み込まれていますか?
- HTTPコードはパース前に
raise_for_status()を呼び出しているか、または200以外の応答を適切に処理していますか? - レート制限は尊重されていますか?