mcpField
S
Searching Scientific Literature

Searching Scientific Literature

github.com/kthorn生産性13167 回インストール53 週間前に更新
リポジトリ

Searching Scientific Literature について

Searching Scientific Literatureは、PubMedで文献を検索し、論文のメタデータを抽出する研究向けスキルです。研究者が初期論文セットを作るために、検索式の設計から検索、関連性評価に向けた整理までを支援します。

主な機能

  1. 01キーワード、データ要件、制約の整理
  2. 02ブール演算子によるPubMed検索式の作成
  3. 03フィールドと期間による絞り込み
  4. 04論文メタデータとDOIの抽出
  5. 05レート制限と検索結果なしへの対処

活用シーン

  1. 01新しい研究課題の文献検索
  2. 02手法、化合物、疾患に関する文献の検索
  3. 03関連性評価用の初期論文セットの作成

インストール

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

$npx skills add https://github.com/kthorn/research-superpower --skill searching-scientific-literature

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

詳細

科学文献の検索

概要

最適化されたクエリを使用して、PubMedで科学文献を検索します。メタデータを抽出し、関連性評価に向けて論文を準備します。

基本原則: 関連する論文を見つけられるよう十分に広く検索しつつ、対象を絞ったキーワードで結果を管理しやすい件数に保ちます。

使用する場面

次の場合にこのスキルを使用します。

  • 新しい研究課題に取り組み始めるとき
  • ユーザーが「〜に関する論文を探して」と依頼したとき
  • 評価用の初期論文セットが必要なとき
  • 特定の手法、化合物、疾患、技術を検索するとき

検索戦略

1. ユーザーのクエリを解析する

以下を抽出します。

  • キーワード:主な概念(例:「BTK阻害剤」「選択性」「キナーゼ」)
  • データの種類:ユーザーが必要としているもの(IC50値、手法、構造、結果)
  • 制約:発行年の範囲、特定のジャーナル、著者名
  • 同義語:別の用語(例:「Bruton's tyrosine kinase」=「BTK」)
2. PubMedクエリを作成する

ブール演算子:

  • AND - 結果を絞り込む(両方の用語を含む)
  • OR - 結果を広げる(いずれかの用語を含む)
  • NOT - 用語を除外する

クエリの例:

"BTK inhibitor"[Title/Abstract] AND selectivity[Title/Abstract]

("kinase inhibitor" OR "protein kinase") AND (selectivity OR "off-target")

"ibrutinib"[Title/Abstract] AND ("IC50" OR "inhibitory concentration")

フィールドタグ:

  • [Title/Abstract] - タイトルと抄録のみを検索
  • [Title] - タイトルのみを検索(より精密)
  • [Author] - 特定の著者を検索
  • [Journal] - 特定のジャーナルを検索
  • [Date] - 日付範囲を指定
3. 検索を実行する

API エンドポイント:

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?\
db=pubmed&\
term=YOUR_QUERY&\
retmax=100&\
retmode=json&\
sort=relevance

パラメーター:

  • db=pubmed - PubMedデータベースを検索
  • term= - 検索クエリ(スペースや特殊文字はURLエンコードしてください)
  • retmax=100 - 最大結果件数(まずは100件から開始)
  • retmode=json - JSON形式で返す
  • sort=relevance - 関連性の高い順(または、新しい順の場合はpub_date)

bashの例:

curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=BTK+inhibitor+selectivity&retmax=100&retmode=json&sort=relevance"

レスポンス形式:

{
  "esearchresult": {
    "count": "156",
    "retmax": "100",
    "idlist": ["12345678", "87654321", ...]
  }
}
4. 論文のメタデータを取得する

API エンドポイント:

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?\
db=pubmed&\
id=12345678,87654321&\
retmode=json

レスポンスから抽出する項目:

  • タイトル
  • 著者(リスト)
  • ジャーナル名
  • 発行日
  • 抄録(別途efetchを呼び出すか、esummaryを使用)
  • PMID
  • DOI(articleidsで利用可能な場合)

PMIDからDOIを取得する:

"articleids": [
  {"idtype": "pubmed", "value": "12345678"},
  {"idtype": "doi", "value": "10.1234/example.2023"}
]

DOIが見つからない場合:

  • 代替識別子としてPMIDを使用する
  • 後でPubMed Centralまたは出版社のAPIを介してDOIを解決してみる

出力形式

論文オブジェクトのリストを作成します。

[
  {
    "pmid": "12345678",
    "doi": "10.1234/example.2023",
    "title": "Selective BTK inhibitors for autoimmune diseases",
    "authors": ["Smith J", "Doe A", "Johnson B"],
    "journal": "Nature Chemical Biology",
    "year": "2023",
    "abstract": "We developed a series of...",
    "source": "pubmed_search"
  }
]

エラー処理

レート制限(重要 - すべてのプロセス/サブエージェントで共有):

  • APIキーなし:毎秒3リクエスト(公式制限)
  • APIキーあり:毎秒10リクエスト
  • 単一のエージェント/スクリプト: 500msの間隔を使用(毎秒2リクエスト、安全な余裕あり)
    • 理論上は350msで十分ですが、実際には約20%のHTTP 429エラーが発生します
  • 複数のサブエージェントを並列実行する場合: 容量を共有するため、より長い間隔を使用します
    • 並列実行が2つの場合:それぞれ1秒(合計で毎秒2リクエスト)
    • 並列実行が3つの場合:それぞれ1.5秒(合計で毎秒2リクエスト)
    • 並列実行が5つの場合:それぞれ2.5秒(合計で毎秒2リクエスト)
    • 計算式:delay_seconds = (num_parallel / rate_limit) + safety_margin
  • HTTP 429エラーが発生した場合: 5秒待機し、間隔を2倍にして再開します

検索結果が空の場合:

  • より広い用語を試す
  • フィールドタグを削除する
  • 入力ミスがないか確認する
  • ORを使用して同義語を追加する

検索結果が多すぎる場合(500件超):

  • より具体的な用語を追加する
  • フィールドタグを使用して絞り込む
  • 日付の制約を追加する
  • 複数のサブクエリに分割することを検討する

他のスキルとの連携

検索完了後:

  1. 検索結果を initial-search-results.jsonとして研究フォルダーに保存します
  2. 各論文について、 evaluating-paper-relevanceスキルを呼び出します
  3. papers-reviewed.jsonで追跡します(キーにはDOIを使用し、ない場合はPMIDを使用)

クイックリファレンス

タスクコマンド
PubMedを検索curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=QUERY&retmax=100&retmode=json"
メタデータを取得curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=PMID1,PMID2&retmode=json"
クエリをURLエンコードスペースを+に、特殊文字を%XXに置き換える
結果を絞り込むANDを使用し、フィールドタグやより具体的な用語を追加する
結果を広げるORを使用し、フィールドタグを削除して同義語を追加する

よくある間違い

検索範囲が狭すぎる: 検索結果が5件だけの場合 → OR を使い、条件を削除します 検索範囲が広すぎる: 検索結果が5000件の場合 → AND 条件を追加し、フィールドタグを使います 抄録が見つからない: 抄録の全文を取得するには、esummary ではなく efetch を使います DOI が見つからない: 古い論文の多くには DOI がありません。代わりに PMID を使います レート制限: 500ms の間隔を空けます(単一エージェントの場合)。レート制限を共有する並列サブエージェントの場合は、さらに長い間隔を空けます

次のステップ

検索が完了したら:

  • 「クエリに一致する論文が N 件見つかりました」と報告します
  • skills/research/evaluating-paper-relevance を使って評価を開始します
  • 論文のスクリーニングが進むごとに、ユーザーに進捗を知らせます

コメント