alterlab-pubmed について
alterlab-pubmedは、PubMedで生物医学・生命科学文献を検索するためのスキルです。高度な検索式の作成とE-utilitiesによるプログラムアクセスを扱い、検索・要約・取得用スクリプトを備えています。
主な機能
- 01ブール演算子、フィールドタグ、MeSH検索
- 02日付と出版物タイプによる絞り込み
- 03E-utilitiesでの検索、要約、取得
- 04PMID、DOI、引用情報からの記事検索
- 05関連記事の探索と引用データの出力
- 06システマティックレビュー向け検索ガイド
活用シーン
- 01文献レビュー用の生物医学論文を探す場面
- 02MeSH語とフィルターで検索式を組み立てる場面
- 03PMIDから抄録や書誌情報を取得する場面
- 04文献管理ソフト用にレコードを出力する場面
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-pubmedインストール後、Claude Code で/alterlab-pubmedを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/api_reference.mdcommon_queries.mdsearch_syntax.mdscripts/query_pubmed.py詳細
PubMed データベース
概要
PubMed は、MEDLINE および生命科学分野の文献に無料でアクセスできる、米国国立医学図書館の包括的なデータベースです。ブール演算子、MeSH 用語、フィールドタグを使って高度なクエリを作成し、E-utilities API を介してデータにプログラムからアクセスすることで、システマティックレビューや文献分析を行えます。
スクリプト
scripts/query_pubmed.py — NCBI E-utilities(ESearch/ESummary/EFetch、標準ライブラリのみ、JSON を標準出力に出力):
python scripts/query_pubmed.py search "crispr[tiab] AND 2024[dp]" --retmax 20 # PMIDs
python scripts/query_pubmed.py summary 39726939 39492484 # metadata for PMIDs
python scripts/query_pubmed.py fetch 39726939 # abstracts (set NCBI_API_KEY or --api-key for 10 req/s)
このスキルを使う場面
次のような場合に、このスキルを使います:
- 生物医学または生命科学分野の研究論文を検索する
- ブール演算子、フィールドタグ、MeSH 用語を使って複雑な検索クエリを作成する
- システマティックレビューやメタアナリシスを実施する
- E-utilities API を介して PubMed のデータにプログラムからアクセスする
- 特定の条件(著者、ジャーナル、出版日、論文種別)に基づいて論文を探す
- 引用情報、抄録、または全文を取得する
- PMID(PubMed ID)や DOI を扱う
- 文献のモニタリングやデータ抽出のための自動化ワークフローを作成する
対象外
| シナリオ | 代わりに使うもの |
|---|---|
| 分野横断的な文献検索、引用数、計量書誌学 | alterlab-openalex |
| 査読前の生命科学分野のプレプリント | alterlab-biorxiv |
| 試験登録、募集状況、NCT レコード | alterlab-clinicaltrials |
| 参考文献リストの文献が実在するか、撤回されているかの確認 | alterlab-citation-verifier |
| 大規模な Biopython パイプライン内での Python Entrez ワークフロー | alterlab-biopython |
主な機能
1. 高度な検索クエリの作成
ブール演算子、フィールドタグ、専用の構文を使って、高度な PubMed クエリを作成します。
基本的な検索方法:
- ブール演算子(AND、OR、NOT)で概念を組み合わせる
- フィールドタグを使って、検索対象を特定のレコード部分に絞り込む
- 完全一致検索には二重引用符を使う
- 用語のバリエーションにはワイルドカードを使う
- 指定した距離内にある用語を近接検索する
クエリの例:
# Recent systematic reviews on diabetes treatment
diabetes mellitus[mh] AND treatment[tiab] AND systematic review[pt] AND 2023:2024[dp]
# Clinical trials comparing two drugs
(metformin[nm] OR insulin[nm]) AND diabetes mellitus, type 2[mh] AND randomized controlled trial[pt]
# Author-specific research
smith ja[au] AND cancer[tiab] AND 2023[dp] AND english[la]
search_syntax.md を参照する場面:
- 利用可能なフィールドタグを網羅した一覧が必要な場合
- 検索演算子の詳細な説明が必要な場合
- 複雑な近接検索を作成する場合
- 自動用語マッピングの動作を理解する場合
- 日付範囲、ワイルドカード、特殊文字の具体的な構文が必要な場合
フィールドタグの Grep パターン:\[au\]|\[ti\]|\[ab\]|\[mh\]|\[pt\]|\[dp\]
2. MeSH 用語と統制語彙
Medical Subject Headings(MeSH)を使って、生物医学文献を正確かつ一貫性のある方法で検索します。
MeSH 検索:
- [mh] タグは、下位用語を自動的に含めて MeSH 用語を検索します
- [majr] タグは、トピックが主題である論文に絞り込みます
- MeSH 用語をサブヘディングと組み合わせて、検索を具体化します(例:diabetes mellitus/therapy[mh])
よく使われる MeSH サブヘディング:
- /diagnosis - 診断方法
- /drug therapy - 薬物療法
- /epidemiology - 疾患のパターンと有病率
- /etiology - 疾患の原因
- /prevention & control - 予防策
- /therapy - 治療法
例:
# Diabetes therapy with specific focus
diabetes mellitus, type 2[mh]/drug therapy AND cardiovascular diseases[mh]/prevention & control
3. 論文種別と出版情報による絞り込み
出版種別、日付、テキストの利用可能性などの属性で検索結果を絞り込みます。
出版種別([pt] フィールドタグを使用):
- 臨床試験
- メタアナリシス
- ランダム化比較試験
- レビュー
- システマティックレビュー
- 症例報告
- ガイドライン
日付による絞り込み:
- 単一年:
2024[dp] - 日付範囲:
2020:2024[dp] - 特定の日付:
2024/03/15[dp]
テキストの利用可能性:
- 無料の全文:クエリに
AND free full text[sb]を追加する - 抄録あり:クエリに
AND hasabstract[text]を追加する
例:
# Recent free full-text RCTs on hypertension
hypertension[mh] AND randomized controlled trial[pt] AND 2023:2024[dp] AND free full text[sb]
4. E-utilities API によるプログラムからのアクセス
NCBI E-utilities REST API を使用して、PubMed のデータにプログラムからアクセスし、自動化や一括処理を行います。
主要な API エンドポイント:
- ESearch - データベースを検索し、PMID を取得します
- EFetch - さまざまな形式で完全なレコードをダウンロードします
- ESummary - 文書の要約を取得します
- EPost - 一括処理用に UID をアップロードします
- ELink - 関連記事やリンクされたデータを検索します
基本的なワークフロー:
import requests
# Step 1: Search for articles
base_url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/"
search_url = f"{base_url}esearch.fcgi"
params = {
"db": "pubmed",
"term": "diabetes[tiab] AND 2024[dp]",
"retmax": 100,
"retmode": "json",
"api_key": "YOUR_API_KEY" # Optional but recommended
}
response = requests.get(search_url, params=params)
pmids = response.json()["esearchresult"]["idlist"]
# Step 2: Fetch article details
fetch_url = f"{base_url}efetch.fcgi"
params = {
"db": "pubmed",
"id": ",".join(pmids),
"rettype": "abstract",
"retmode": "text",
"api_key": "YOUR_API_KEY"
}
response = requests.get(fetch_url, params=params)
abstracts = response.text
レート制限:
- API キーなし:毎秒 3 リクエスト
- API キーあり:毎秒 10 リクエスト
- 必ず User-Agent ヘッダーを含めてください
ベストプラクティス:
- 大規模な結果セットには履歴サーバー(usehistory=y)を使用します
- 複数の UID に対する一括処理には EPost を使用します
- 重複した呼び出しを最小限に抑えるため、結果をローカルにキャッシュします
- サービスの中断を避けるため、レート制限を遵守します
api_reference.md を参照する場合:
- エンドポイントの詳細なドキュメントが必要な場合
- 各 E-utility のパラメーター仕様が必要な場合
- 一括処理や履歴サーバーのワークフローを構築する場合
- 応答形式(XML、JSON、テキスト)を確認する場合
- API エラーやレート制限の問題をトラブルシューティングする場合
API エンドポイントの grep パターン:esearch|efetch|esummary|epost|elink|einfo
5. 引用情報の照合と論文の取得
不完全な引用情報や特定の識別子を使って論文を検索します。
識別子で検索:
# By PMID
12345678[pmid]
# By DOI
10.1056/NEJMoa123456[doi]
# By PMC ID
PMC123456[pmc]
引用情報の照合(ECitMatch API を使用): 雑誌名、年、巻、ページ、著者を使って PMID を検索します:
Format: journal|year|volume|page|author|key|
Example: Science|2008|320|5880|1185|key1|
著者とメタデータで検索:
# First author with year and topic
smith ja[1au] AND 2023[dp] AND cancer[tiab]
# Journal, volume, and page
nature[ta] AND 2024[dp] AND 456[vi] AND 123-130[pg]
6. システマティックレビュー
システマティックレビューやメタアナリシスのために、包括的な文献検索を行います。
PICO フレームワーク(対象集団、介入、比較、アウトカム): 臨床研究の疑問を体系的に構成します:
# Example: Diabetes treatment effectiveness
# P: diabetes mellitus, type 2[mh]
# I: metformin[nm]
# C: lifestyle modification[tiab]
# O: glycemic control[tiab]
diabetes mellitus, type 2[mh] AND
(metformin[nm] OR lifestyle modification[tiab]) AND
glycemic control[tiab] AND
randomized controlled trial[pt]
包括的な検索戦略:
# Include multiple synonyms and MeSH terms
(disease name[tiab] OR disease name[mh] OR synonym[tiab]) AND
(treatment[tiab] OR therapy[tiab] OR intervention[tiab]) AND
(systematic review[pt] OR meta-analysis[pt] OR randomized controlled trial[pt]) AND
2020:2024[dp] AND
english[la]
検索の絞り込み:
- 広く検索し、結果を確認します
- フィールドタグを使って検索条件を詳細化します
- 日付と出版タイプのフィルターを適用します
- Advanced Search を使ってクエリの変換結果を確認します
- 複雑なクエリでは検索履歴を組み合わせます
common_queries.md を参照する場合:
- 特定の疾患や研究分野のクエリ例が必要な場合
- さまざまな研究デザイン向けのテンプレートが必要な場合
- 対象集団別のクエリパターン(小児、高齢者など)を探している場合
- 方法論に特化した検索を構築する場合
- 品質フィルターやベストプラクティスのパターンが必要な場合
クエリ例の grep パターン:diabetes|cancer|cardiovascular|clinical trial|systematic review
7. 関連論文と引用情報の検索
ELink を使って、プログラムから関連研究を検索します(タイトル/抄録の類似性と MeSH の重複に基づいて事前計算された近傍論文)。
elink.fcgi?dbfrom=pubmed&db=pubmed&id=PMID&cmd=neighbor
cmd=prlinks は出版社の全文 URL を返し、cmd=llinks は LinkOut URL を返します。
8. 引用文献管理用のエクスポート
EFetch で rettype=medline&retmode=text を使用すると、文献管理ツール(Zotero、Mendeley、EndNote)向けに MEDLINE/.nbib 形式でレコードをエクスポートできます。
efetch.fcgi?db=pubmed&id=PMID1,PMID2&rettype=medline&retmode=text
リファレンスファイルの使用
このスキルには、references/ ディレクトリに包括的なリファレンスファイルが 3 つ含まれています。
references/api_reference.md
9 つすべてのエンドポイント、パラメーター、応答形式、ベストプラクティスを網羅した E-utilities API の完全なドキュメントです。次の場合に参照してください。
- プログラムから PubMed にアクセスする場合
- API リクエストを構築する場合
- レート制限と認証について確認する場合
- 履歴サーバーを使用して大規模なデータセットを扱う場合
- API エラーをトラブルシューティングする場合
references/search_syntax.md
フィールドタグ、ブール演算子、ワイルドカード、特殊文字など、PubMed の検索構文に関する詳細なガイドです。次の場合に参照してください。
- 複雑な検索クエリを構築する場合
- 自動用語マッピングについて確認する場合
- 高度な検索機能(近接検索、ワイルドカード)を使用する場合
- フィルターや制限を適用する場合
- 予期しない検索結果をトラブルシューティングする場合
references/common_queries.md
さまざまな研究シナリオ、疾患の種類、方法論に関する広範なクエリ例をまとめています。次のような場合に参照してください。
- 新しい文献検索を始めるとき
- 特定の研究分野向けのテンプレートが必要なとき
- ベストプラクティスとなるクエリパターンを探すとき
- 系統的レビューを実施するとき
- 特定の研究デザインや集団を検索するとき
リファレンスの読み込み戦略:
必要に応じてリファレンスファイルを読み込みます。基本的な検索には通常、この SKILL.md で十分です。複雑なクエリの作成には search_syntax.md、API ワークフローには api_reference.md、分野別のテンプレートには common_queries.md を参照してください。
ヒントとベストプラクティス
- 翻訳の確認:Automatic Term Mapping によって検索語が意図せず拡張されることがあります。結果に違和感がある場合は、クエリの翻訳を確認するか、フィールドタグや二重引用符を使って ATM を回避してください。
- API のスループット:キーなしの場合、IP あたり 3 req/s です。API キーを使うと 10 req/s になります。内容が分かる User-Agent を送信し、HTTP 429 では指数バックオフを追加して、重複した呼び出しを避けるためにキャッシュしてください。
- 大量の検索結果(>約500件):巨大な
idリストを送信する(HTTP 414 に達する場合があります)のではなく、history server(usehistory=yを指定し、retstart/retmaxで EFetch をページング)または EPost を使用してください。history server を使っても、以下に記載する 9,999 件の上限は解除されません。 - エビデンスの質:
systematic review[pt]、meta-analysis[pt]、randomized controlled trial[pt]を優先し、必要に応じてhumans[mh]、english[la]、[dp]の期間指定を組み合わせてください。 - 再現性:正確なクエリ文字列と検索日を記録してください。PubMed の結果は、レコードの追加や再インデックスに伴って変化します。
制限事項と考慮点
- 対象範囲:査読済みの生物医学・ライフサイエンス文献(MEDLINE + PubMed)です。プレプリントにはプレプリントサーバーを、試験登録情報(NCT ID、募集状況)には ClinicalTrials.gov を使用してください。
- 収録範囲の不足:1975年より前の論文には抄録がないことが多く、著者のフルネームがインデックス化されているのは2002年以降です。
- 検索結果の上限:PubMed ESearch が返すのはクエリの先頭 9,999 件までです。9998 を超える
retstartを指定するとエラーになり、history server を使った EFetch/ESummary でも同じ上限に達します。これを超える件数を取得するには、各期間が 9,999 件未満になるようクエリを日付範囲(例:AND 2020/01/01:2020/06/30[dp])で分割するか、自動的にバッチ処理する EDirect を使用してください。 - 全文:PubMed が提供するのは引用情報と抄録であり、全文ではありません。アクセス可否は出版社、オープンアクセスの状況、または機関購読によって異なります。詳細なレコードには XML の解析が必要です。
サポートリソース
- PubMed ヘルプ:https://pubmed.ncbi.nlm.nih.gov/help/
- E-utilities ドキュメント:https://www.ncbi.nlm.nih.gov/books/NBK25501/
- NLM ヘルプデスク:1-888-FIND-NLM (1-888-346-3656)
- テクニカルサポート:[email protected]
- メーリングリスト:[email protected]