mcpField
A
alterlab-pubmed

alterlab-pubmed

github.com/alterlab-ieu生産性7870 回インストール5 週間前に更新
リポジトリ

alterlab-pubmed について

alterlab-pubmedは、PubMedで生物医学・生命科学文献を検索するためのスキルです。高度な検索式の作成とE-utilitiesによるプログラムアクセスを扱い、検索・要約・取得用スクリプトを備えています。

主な機能

  1. 01ブール演算子、フィールドタグ、MeSH検索
  2. 02日付と出版物タイプによる絞り込み
  3. 03E-utilitiesでの検索、要約、取得
  4. 04PMID、DOI、引用情報からの記事検索
  5. 05関連記事の探索と引用データの出力
  6. 06システマティックレビュー向け検索ガイド

活用シーン

  1. 01文献レビュー用の生物医学論文を探す場面
  2. 02MeSH語とフィルターで検索式を組み立てる場面
  3. 03PMIDから抄録や書誌情報を取得する場面
  4. 04文献管理ソフト用にレコードを出力する場面

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-pubmed

インストール後、Claude Code で/alterlab-pubmedを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
evals.json
references/
api_reference.md
common_queries.md
search_syntax.md
scripts/
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 エンドポイント:

  1. ESearch - データベースを検索し、PMID を取得します
  2. EFetch - さまざまな形式で完全なレコードをダウンロードします
  3. ESummary - 文書の要約を取得します
  4. EPost - 一括処理用に UID をアップロードします
  5. 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]

検索の絞り込み:

  1. 広く検索し、結果を確認します
  2. フィールドタグを使って検索条件を詳細化します
  3. 日付と出版タイプのフィルターを適用します
  4. Advanced Search を使ってクエリの変換結果を確認します
  5. 複雑なクエリでは検索履歴を組み合わせます

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 の解析が必要です。

サポートリソース

コメント