Searching Scientific Literature について
Searching Scientific Literatureは、PubMedで文献を検索し、論文のメタデータを抽出する研究向けスキルです。研究者が初期論文セットを作るために、検索式の設計から検索、関連性評価に向けた整理までを支援します。
主な機能
- 01キーワード、データ要件、制約の整理
- 02ブール演算子によるPubMed検索式の作成
- 03フィールドと期間による絞り込み
- 04論文メタデータとDOIの抽出
- 05レート制限と検索結果なしへの対処
活用シーン
- 01新しい研究課題の文献検索
- 02手法、化合物、疾患に関する文献の検索
- 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件超):
- より具体的な用語を追加する
- フィールドタグを使用して絞り込む
- 日付の制約を追加する
- 複数のサブクエリに分割することを検討する
他のスキルとの連携
検索完了後:
- 検索結果を
initial-search-results.jsonとして研究フォルダーに保存します - 各論文について、
evaluating-paper-relevanceスキルを呼び出します 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を使って評価を開始します- 論文のスクリーニングが進むごとに、ユーザーに進捗を知らせます