mcpField
S
scientific-literature-search

scientific-literature-search

github.com/jaechang-hits生産性38478 回インストール1 週間前に更新
リポジトリ

scientific-literature-search について

科学文献の検索を計画・実行するための研究スキルです。特定論文の検索から広範なレビューまでを対象とし、データベース別クエリ、AI によるウェブ検索、論文内容の抽出を三段階で組み合わせます。

主な機能

  1. 01三段階の文献検索戦略
  2. 02PubMed、arXiv、Google Scholar の検索
  3. 03PICO による臨床検索の設計
  4. 04ブール演算子とフィールド指定
  5. 05全文・補足資料の抽出

活用シーン

  1. 01システマティックレビュー向けの臨床エビデンス検索
  2. 02計算手法に関するプレプリントの検索
  3. 03複数ソースを横断した研究動向の把握
  4. 04論文の手法や補足データの抽出

インストール

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

$npx skills add https://github.com/jaechang-hits/sciagent-skills --skill scientific-literature-search

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

詳細

科学文献検索

概要

科学文献検索は、エビデンスに基づく研究の基盤です。適切に実施された検索では、精度(無関係な結果を避けること)を維持しながら、再現率(関連する論文をすべて見つけること)を最大化します。このガイドでは、データベースごとの検索戦略、AI を活用した統合、コンテンツの直接抽出を組み合わせた体系的なアプローチを紹介します。対象を絞った検索から包括的な概観レビューまで対応できる、3 段階の枠組みに沿って構成されています。

主な概念

PICO フレームワーク

臨床および生物医学的な問いでは、PICO フレームワークを使って検索クエリを構成します。

  • P(対象集団):誰を対象に研究しますか?(例:"Diabetes Mellitus"[MeSH])
  • I(介入):どのような治療または曝露ですか?(例:"Metformin"[MeSH])
  • C(比較):比較対象は何ですか?(例:プラセボ、標準治療)
  • O(アウトカム):どのような結果を測定しますか?(例:"Cardiovascular Diseases"[MeSH])

PICO クエリは、出版物タイプのフィルターと組み合わせることで、特定のエビデンスレベルに絞り込めます。

"Diabetes Mellitus"[MeSH] AND "Metformin"[MeSH] AND "Cardiovascular Diseases"[MeSH] AND ("clinical trial"[Publication Type] OR "meta-analysis"[Publication Type])
3 段階の検索戦略

文献検索は、対象範囲を段階的に広げて進めると最も効果的です。

第 1 段階 -- データベース固有の検索(最も信頼性が高い)

確立された学術データベース(PubMed、arXiv、Google Scholar)で、査読済みのインデックス登録済みコンテンツを検索します。最も信頼性の高い段階であり、必ずここから始めてください。

  • PubMed(Biopython の Bio.Entrez 経由):生物医学および生命科学文献の主要データベースです。MeSH 統制語彙と高度なフィールドタグに対応しています。
  • arXiv(arxiv パッケージ経由):物理学、数学、コンピューターサイエンス、定量生物学のプレプリントサーバーです。査読付きジャーナルよりも早く結果が公開されます。
  • Google Scholar(scholarly パッケージ経由):あらゆる学術分野を対象とする、最も広範なカバレッジを提供します。注:自動クエリには厳しいレート制限があります。

最適な用途:特定の論文、システマティックレビュー、臨床エビデンス、プレプリントの検索。

第 2 段階 -- AI を活用したウェブ検索(包括的)

Claude API とサーバーサイドツール web_search_20250305 を使って、より広い文脈を統合し、研究動向を特定し、まだデータベースに登録されていない最新の動向を見つけます。また、プロトコル、チュートリアル、ソフトウェアドキュメントの検索には、一般的なウェブ検索(例:duckduckgo-search パッケージ経由)も利用します。

最適な用途:研究分野全体の把握、複雑で多面的な問いへの対応、最新動向の発見、主要な研究者の特定。

適さない用途:特定の論文の検索(第 1 段階を利用)、引用数の確認(Google Scholar を利用)、再現性が必要なシステマティックレビュー、正確な検索語を記録する必要がある検索。

第 3 段階 -- コンテンツの直接抽出(詳細な分析)

特定した論文の全文、PDF、補足資料を、trafilatura(HTML 記事の抽出)、pypdf(PDF テキスト)、Crossref API(DOI → 補足ファイルの URL)を使って抽出し、分析します。

最適な用途:方法論の詳細な抽出、データ取得、プロトコルの特定、補足データへのアクセス。

PubMed のフィールドタグ

PubMed では、検索精度を高めるためにフィールドを指定して検索できます。

タグ説明例
[MeSH]医学主題見出し(統制語彙)"Neoplasms"[MeSH]
[Title]タイトルフィールドのみ"CRISPR"[Title]
[Title/Abstract]タイトルまたは抄録"gene therapy"[Title/Abstract]
[Author]著者名"Zhang F"[Author]
[Journal]ジャーナル名"Nature"[Journal]
[Publication Type]論文タイプのフィルター"Review"[Publication Type]
[Date - Publication]出版日の範囲"2020/01/01"[Date - Publication]:"2024/12/31"[Date - Publication]
[MeSH Major Topic]論文の主要なテーマとしての MeSH 用語"CRISPR-Cas Systems"[MeSH Major Topic]
ブール演算子

ブール演算子は、検索語の組み合わせ方を制御します。

# AND: All terms must be present -- narrows results
results = query_pubmed("CRISPR AND cancer AND therapy")

# OR: Any term can be present -- broadens results (use for synonyms)
results = query_pubmed("(tumor OR tumour OR neoplasm) AND immunotherapy")

# NOT: Exclude terms -- use sparingly to avoid losing relevant papers
results = query_pubmed("cancer immunotherapy NOT review")

AND と組み合わせる前に、括弧を使って OR の語句をまとめます。

arXiv の主題カテゴリー

arXiv では、プレプリントを主題カテゴリー別に整理しています。生物学関連のカテゴリーは次のとおりです。

カテゴリー説明
q-bio.BM生体分子
q-bio.CB細胞の挙動
q-bio.GNゲノミクス
q-bio.MN分子ネットワーク
q-bio.NCニューロンと認知
q-bio.QM定量的手法
cs.AI人工知能
cs.LG機械学習

判断フレームワーク

このツリーを使って、最初に利用する検索ティアとデータベースを判断します。

What type of question are you answering?
├── Clinical / biomedical question
│   ├── Specific drug or treatment → Tier 1: PubMed with PICO query
│   ├── Disease mechanism → Tier 1: PubMed with MeSH terms
│   └── Clinical trial evidence → Tier 1: PubMed filtered by Publication Type
├── Computational / quantitative methods
│   ├── ML model or algorithm → Tier 1: arXiv (cs.LG, cs.AI)
│   ├── Computational biology method → Tier 1: arXiv (q-bio.*) + PubMed
│   └── Software tool or pipeline → Tier 2: AI-assisted web search
├── Broad research landscape
│   ├── Current state of a field → Tier 2: AI-assisted web search
│   ├── Recent developments (last 6 months) → Tier 2: AI-assisted web search
│   └── Cross-disciplinary question → Tier 1: Google Scholar + Tier 2
├── Specific paper or data
│   ├── Known paper details → Tier 1: any database by title/author/DOI
│   ├── Methodology or protocol → Tier 3: full-text extraction
│   └── Supplementary data → Tier 3: DOI-based supplementary fetch
└── Protocols / reagents
    ├── Lab protocol → Tier 2: web search for protocols.io, etc.
    └── Validated reagents → Tier 2: AI-assisted web search
シナリオ推奨されるティアとデータベース理由
臨床エビデンスの系統的レビューティア 1:MeSH と出版タイプのフィルターを使った PubMed再現可能で、文書化された検索戦略が必要です
新しい ML 手法のプレプリントを探すティア 1:カテゴリーとキーワード検索を使った arXivプレプリントはジャーナルより先に arXiv に掲載されます
研究分野の全体像を把握するティア 2:AI 支援ウェブ検索多数の情報源を統合する必要があります
論文から特定のプロトコルを抽出するティア 3:PDF のコンテンツ抽出方法のセクションにアクセスするには全文が必要です
分野を横断して論文を探すティア 1:Google Scholar分野を横断した最も幅広い収録範囲を提供します
ニッチな分野の主要な研究者を特定するティア 2:AI 支援ウェブ検索文脈に沿った統合が必要です
補足データの表をダウンロードするティア 3:DOI に基づく補足資料の取得補足ファイルに直接アクセスできます

ベストプラクティス

  1. PubMed 検索では統制語彙(MeSH)を使います:フリーテキスト検索では、異なる用語を使っている論文を見落とします。MeSH 用語は同義語を単一の概念に対応付けるため、精度を損なうことなく再現率を高められます。

    # Free text misses synonyms
    query_pubmed("heart attack treatment")
    # MeSH captures all synonyms
    query_pubmed('"Myocardial Infarction"[MeSH] AND "Drug Therapy"[MeSH]')
    
  2. OR を使って同義語や別表記を含めます:科学的な概念には複数の名称があることがよくあります(例:tumor/tumour/neoplasm)。関連する論文を見落とさないよう、括弧内で同義語を OR でまとめます。

    query_pubmed("(myocardial infarction OR heart attack) AND (treatment OR therapy)")
    
  3. 複数の語からなる概念にはフレーズ検索を使います:完全一致のフレーズを引用符で囲むと、検索エンジンが語句を分割して個別に一致させるのを防げます。

    query_pubmed('"single cell RNA sequencing" AND methods')
    
  4. 特定のエビデンスを探すときは出版タイプで絞り込みます:臨床試験、系統的レビュー、メタ分析はそれぞれ異なる問いに答えます。必要なエビデンスレベルに合わせて [Publication Type] を使います。

    query_pubmed("COVID-19 vaccine efficacy AND clinical trial[Publication Type]")
    
  5. 広く検索してから、段階的に絞り込みます:まず中心となる概念(2~3 語)で検索し、初期結果を確認します。見つかった内容に基づき、語句、日付範囲、フィールドタグ、出版タイプを追加して具体性を高めます。

    # Step 1: Broad
    results = query_pubmed("CRISPR base editing iPSC", max_papers=20)
    # Step 2: Add MeSH and specificity
    results = query_pubmed(
        '"CRISPR-Cas Systems"[MeSH] AND "base editing" AND "induced pluripotent stem cells" AND efficiency',
        max_papers=20
    )
    # Step 3: Filter by date
    results = query_pubmed(
        '"CRISPR-Cas Systems"[MeSH] AND "base editing" AND "induced pluripotent stem cells" AND efficiency AND ("2022"[Date - Publication]:"2024"[Date - Publication])',
        max_papers=20
    )
    
  6. 複数のデータベースを相互参照します:すべての文献を網羅するデータベースはありません。生物医学分野のコンテンツには PubMed、計算分野のプレプリントには arXiv、分野横断的な検索には Google Scholar を使います。

  7. 結果の質を体系的に評価します:情報源の信頼性(査読付きジャーナル)、著者の実績、発表時期、研究デザインの適切さ、サンプルサイズの妥当性、再現性、利益相反の申告、被引用数を評価します。

よくある落とし穴

  1. クエリが長すぎる、または具体的すぎる:1つのクエリに用語を詰め込みすぎると、すべての用語が同時に一致する必要があるため、検索結果を見落とす原因になります。

    • 回避方法:クエリは主要な概念(3-5語)に絞ります。サブトピックごとに個別に検索し、手動で結果を組み合わせます。
    # Too specific -- misses relevant papers
    query_pubmed("CRISPR Cas9 gene editing HEK293T cells 2024 efficiency optimization delivery")
    # Better -- core concepts only
    query_pubmed("CRISPR Cas9 gene editing optimization efficiency")
    
  2. 単一のデータベースに依存する:PubMedは生物医学に重点を置き、arXivはプレプリントを扱い、Google Scholarは幅広い分野を網羅しています。1つのデータベースだけを使うと、必ず見落としが生じます。

    • 回避方法:常に少なくとも2つのデータベースを検索します。計算生物学では、PubMedとarXivを組み合わせます。学際的なトピックでは、Google Scholarも含めます。
  3. 出版日を無視する:科学的知識は急速に進歩します。基礎となる論文は引き続き重要ですが、手法や臨床的エビデンスは新しいものに置き換えられている場合があります。

    • 回避方法:すべての検索結果で出版日を確認します。手法に関する論文は、直近の3-5年のものを優先します。基礎概念については古い論文でもかまいませんが、最近のレビューで内容を確認します。
  4. 詳しく読む前にタイトルと要旨を確認しない:キーワードに一致する検索結果がすべて、実際に関連しているとは限りません。選別せずに全文をダウンロードして読むと、時間を無駄にします。

    • 回避方法:必ず最初にタイトルと要旨を選別します。選別を通過した論文のみ、全文(Tier 3)を抽出します。
  5. NOT演算子を使いすぎる:NOT演算子を使うと、除外する用語が別の文脈で使われている関連論文まで、誤って除外してしまうことがあります。

    • 回避方法:NOTは控えめに使います。用語を除外するよりも、肯定的な用語を追加して検索結果を絞り込みます。NOTを使う必要がある場合は、除外された結果が本当に無関係かどうかを確認します。
  6. Google Scholarのレート制限を無視する:Google Scholarは自動クエリに対して厳しいレート制限を設けているため、その後の検索がブロックされることがあります。

    • 回避方法:Google Scholarは必要な場合に限って使います。リクエストの間隔を空けます。大量検索にはPubMedまたはarXivを優先し、Google Scholarは学際的な確認に利用します。
  7. 検索戦略を記録しない:システマティックレビューや再現可能な研究では、記録されていない検索は検証も再現もできません。

    • 回避方法:検索語、検索したデータベース、日付範囲、各段階の検索結果数を記録します。これはシステマティックレビューでは不可欠であり、あらゆる検索において望ましい実践です。

ワークフロー

  1. ステップ 1:研究課題を定義する

    • 主な概念、対象集団/モデル、介入/手法、望ましい結果、対象期間を特定します
    • 臨床上の課題では、PICO フレームワークに当てはめます
    • 例:「ヒト iPSC における CRISPR 塩基編集効率に関する最近の論文を探す」は、主な概念=CRISPR 塩基編集、モデル=ヒト iPSC、結果=効率、対象期間=過去 3 年に分解できます
  2. ステップ 2:データベースのクエリを作成して実行する(ティア 1)

    • 生物医学分野のトピックでは PubMed、計算科学分野のトピックでは arXiv から始めます
    • 2~3 個の主要な用語を使った幅広いクエリから始めます
    • MeSH 用語、フィールドタグ、日付フィルター、出版物の種類によるフィルターを使って絞り込みます
    from Bio import Entrez
    import arxiv
    from scholarly import scholarly
    
    Entrez.email = "[email protected]"  # NCBI requires a contact email
    
    # PubMed: biomedical literature
    handle = Entrez.esearch(
        db="pubmed",
        term='"CRISPR-Cas Systems"[MeSH] AND "Gene Editing"[MeSH]',
        retmax=20,
    )
    pubmed_ids = Entrez.read(handle)["IdList"]
    handle.close()
    
    # arXiv: computational biology preprints
    arxiv_results = list(
        arxiv.Search(query="protein structure prediction", max_results=10).results()
    )
    
    # Google Scholar: broad cross-disciplinary coverage
    scholar_results = scholarly.search_pubs("single cell RNA sequencing analysis methods")
    
  3. ステップ 3:AI 支援検索で補完する(ティア 2)

    • 分野の全体像や最近の動向を把握するには、AI 支援のウェブ検索を使います
    • プロトコル、チュートリアル、ドキュメントには一般的なウェブ検索を使います
    from anthropic import Anthropic
    
    client = Anthropic()
    response = client.messages.create(
        model="claude-opus-4-7",
        max_tokens=4096,
        tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 3}],
        messages=[{
            "role": "user",
            "content": "What are the latest developments in CAR-T cell therapy for solid tumors in 2024?",
        }],
    )
    print(response.content)
    
  4. ステップ 4:結果を評価して絞り込む

    • タイトルと抄録を確認し、関連性を判断します
    • 新しさ、ジャーナルの質、被引用数、研究デザインを基準に優先順位を付けます
    • 臨床エビデンスでは、RCT、システマティックレビュー、メタ分析を優先します
    • 手法については、プロトコル論文や手法の比較を優先します
    • 判断の目安:結果が多すぎる場合は、より具体的な用語やフィルターを追加します。少なすぎる場合は、用語の範囲を広げ、同義語を追加します。
  5. ステップ 5:重要な論文を詳しく調べる(ティア 3)

    • 優先度の高い論文の全文を取得します
    • データやプロトコルについては、補足資料をダウンロードします
    • 参考文献リストを確認し、関連する論文を追加で探します
    import io
    import os
    from pathlib import Path
    from urllib.parse import urlparse
    
    import requests
    import trafilatura
    from pypdf import PdfReader
    
    # Extract article content from URL (clean main text, drops nav/ads)
    downloaded = trafilatura.fetch_url("https://www.nature.com/articles/nature12373")
    article_text = trafilatura.extract(downloaded)
    
    # Extract text from a PDF
    pdf_bytes = requests.get("https://arxiv.org/pdf/1706.03762.pdf", timeout=30).content
    reader = PdfReader(io.BytesIO(pdf_bytes))
    pdf_text = "\n".join(page.extract_text() or "" for page in reader.pages)
    
    # Download supplementary files via Crossref DOI metadata
    doi = "10.1038/nature12373"
    meta = requests.get(f"https://api.crossref.org/works/{doi}", timeout=30).json()
    out_dir = Path("./supplementary_materials")
    out_dir.mkdir(exist_ok=True)
    for link in meta.get("message", {}).get("link", []):
        url = link.get("URL")
        if not url:
            continue
        fname = os.path.basename(urlparse(url).path) or "supplement.bin"
        (out_dir / fname).write_bytes(requests.get(url, timeout=60).content)
    
  6. ステップ 6:記録して反復する

    • すべての検索語、データベース、フィルター、結果件数を記録します
    • 未解決の点が残る場合は、クエリを調整してステップ 2~3 を再度実行します
    • システマティックレビューでは、報告に関する PRISMA ガイドラインに従います

よくある検索シナリオ

以下のシナリオでは、一般的な研究課題に対して 3 つのティアを組み合わせる方法を説明します。

手法とプロトコルを探す

公開済みの手法論文を PubMed で探し、続いて protocols.io などのリソースから手順ごとのプロトコルをウェブ検索で補います。

from Bio import Entrez
from duckduckgo_search import DDGS

Entrez.email = "[email protected]"

# Search for methodology papers in PubMed
handle = Entrez.esearch(
    db="pubmed",
    term='"Western Blotting"[MeSH] AND (protocol OR method OR technique)',
    retmax=10,
)
pubmed_ids = Entrez.read(handle)["IdList"]
handle.close()

# Check web for step-by-step protocols
web_hits = DDGS().text("Western blot protocol for membrane proteins", max_results=5)
疾患のメカニズムを理解する

まず総説論文で全体像を把握し、次に特定のメカニズム研究を詳しく調べます。

# Find review articles first for an overview
results = query_pubmed(
    '"Alzheimer Disease"[MeSH] AND pathophysiology AND review[Publication Type]',
    max_papers=10
)

# Then find specific mechanistic studies
results = query_pubmed(
    '"Alzheimer Disease"[MeSH] AND ("amyloid beta"[MeSH] OR tau) AND mechanism',
    max_papers=20
)
薬剤と治療に関する情報を探す

出版物の種類によるフィルターを使い、臨床試験のエビデンスとシステマティックレビューを分けて確認します。

# Clinical trials for a specific drug-condition pair
results = query_pubmed(
    '"Drug Name"[Substance Name] AND "Condition"[MeSH] AND clinical trial[Publication Type]',
    max_papers=20
)

# Systematic reviews and meta-analyses
results = query_pubmed(
    '"Drug Name" AND "Condition" AND (systematic review[Publication Type] OR meta-analysis[Publication Type])',
    max_papers=10
)
最新の動向を追う

AI 支援検索による情報の統合と、データベース検索による最近のインデックス登録済み出版物の確認を組み合わせます。

from anthropic import Anthropic
from Bio import Entrez

client = Anthropic()
Entrez.email = "[email protected]"

# AI-assisted synthesis of recent advances (Claude API web search tool)
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=4096,
    tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 3}],
    messages=[{
        "role": "user",
        "content": "What are the most significant advances in CAR-T cell therapy in 2024?",
    }],
)

# Supplement with recent PubMed results
handle = Entrez.esearch(
    db="pubmed",
    term='"Chimeric Antigen Receptor T-Cell Therapy"[MeSH] AND "2024"[Date - Publication]',
    retmax=20,
)
pubmed_ids = Entrez.read(handle)["IdList"]
handle.close()
特定の試薬と材料を探す

検証済み試薬の推奨情報を AI 支援検索で探し、一般的なウェブ検索で補います。

from anthropic import Anthropic
from duckduckgo_search import DDGS

client = Anthropic()

# Search for validated reagents (Claude API + web search tool)
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=4096,
    tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 2}],
    messages=[{
        "role": "user",
        "content": "validated antibodies for Western blot detection of p53 protein",
    }],
)

# Search supplier databases
supplier_hits = DDGS().text("p53 antibody Western blot validated", max_results=5)
手法を横断して比較分析する

技術やツールの比較情報をまとめて得るために、AI 支援検索を使います。

from anthropic import Anthropic

client = Anthropic()

# Compare approaches with AI synthesis (Claude API web search tool)
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=4096,
    tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 5}],
    messages=[{
        "role": "user",
        "content": "Compare different CRISPR delivery methods for in vivo gene editing: viral vectors vs lipid nanoparticles",
    }],
)
print(response.content)

品質評価チェックリスト

検索結果を評価する際は、以下の基準を適用します。

  • 情報源の信頼性:論文は査読付きジャーナルに掲載されていますか?
  • 著者の専門性:著者はその分野で実績のある専門家ですか?
  • 新しさ:情報は目的に照らして十分に新しいですか?
  • 研究デザイン:研究デザインは課題に適していますか(例:有効性には RCT、リスクにはコホート研究)?
  • サンプルサイズ:導き出された結論を支えるのに十分ですか?
  • 再現性:再現できるほど明確に手法が記載されていますか?
  • 利益相反:利益相反が開示されていますか?
  • 被引用数:その後の研究で十分に引用されていますか?

参考資料

関連スキル

  • pubmed-database -- 文献をプログラムから取得するための PubMed API への直接アクセス
  • scientific-manuscript-writing -- 論文内の文献レビューセクションの構成
  • research-question-formulation -- 回答可能な研究課題を定義するためのフレームワーク

コメント