mcpField
A
alterlab-biorxiv

alterlab-biorxiv

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

alterlab-biorxiv について

alterlab-biorxivは、キー不要のbioRxiv APIを使って生命科学分野のプレプリントを検索・取得するPythonツールです。キーワード、著者、日付、分野で絞り込み、構造化メタデータの取得やPDFのダウンロードができます。

主な機能

  1. 01キーワード・著者による検索
  2. 02日付範囲・分野による絞り込み
  3. 03DOIによる論文詳細の取得
  4. 04プレプリントPDFのダウンロード
  5. 05JSON形式での検索結果出力

活用シーン

  1. 01特定テーマの新しい生命科学プレプリントを検索
  2. 02指定期間の著者別プレプリントを追跡
  3. 03系統的なプレプリント文献レビューを整理
  4. 04分析用に論文全文をダウンロード

インストール

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

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

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

同梱ファイル

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

evals/
evals.json
references/
api_reference.md
scripts/
biorxiv_search.py

詳細

bioRxiv データベース

概要

キー不要の bioRxiv API を利用する、生命科学プレプリントの検索・取得用 Python ツールです。キーワード、著者、日付範囲、カテゴリで検索し、構造化された JSON(タイトル、要旨、DOI、著者、バージョン)を返します。また、全文 PDF をダウンロードできます。

出版済みの査読付き文献には alterlab-pubmed、コンピューターサイエンス/物理学/数学のプレプリントには alterlab-arxiv を使用してください。bioRxiv が対象とするのは生物学分野のみです。同じ API は medRxiv にも対応しています(エンドポイントのパスで biorxiv を medrxiv に置き換えます。例:/details/medrxiv/2025-03-21/2025-03-28?category=cardiovascular%20medicine)。同梱のスクリプトは bioRxiv を対象としているため、medRxiv を検索するには curl/requests を直接使用してください。

仕組みと制限事項

bioRxiv の /details エンドポイントは、日付範囲内のプレプリントを 1 ページあたり 30 件返します。サーバー側の分野カテゴリフィルター(?category=cell_biology)には対応していますが、キーワードや著者によるフィルターには対応していません。そのため、このツールは次の処理を行います。

  1. すべてのレコードを取得するまでカーソルをたどりながら日付範囲をページネーションし、対象分野だけを取得するよう --category をサーバーに渡します。その後、
  2. キーワード(タイトル/要旨内の部分文字列)と著者(著者一覧内の部分文字列)でクライアント側のフィルタリングを行います。

つまり、日付範囲が広いほど API 呼び出しが増え、ダウンロード量も大きくなります。質問の要件を満たす範囲で日付をできるだけ絞り、--category(API 呼び出しを削減)と --limit を使って処理量を制限してください。

このスキルを使用する場面

次のような場合に使用します。

  • 特定の研究分野における最近の生命科学プレプリントを検索する
  • 特定の著者によるプレプリントを追跡する
  • プレプリント文献のシステマティックレビューを実施する
  • 期間ごとのプレプリントの傾向を分析する
  • 引用文献管理用のメタデータを取得する
  • 分析用にプレプリントの PDF をダウンロードする
  • bioRxiv の分野カテゴリで論文を絞り込む
対象外
シナリオ代わりに使用
査読済みで MeSH インデックス登録された生物医学系ジャーナル論文alterlab-pubmed
arXiv 上の CS/物理学/数学/定量生物学のプレプリントalterlab-arxiv
プレプリントの引用数や複数の出版社にまたがる書誌計量データalterlab-openalex
自分のプレプリントの投稿(サーバーの選択、ライセンス、バージョン管理)alterlab-preprint-deposition
PRISMA スクリーニングを伴う複数データベースのシステマティックレビューalterlab-literature-review

スクリプトの実行

このスクリプトの依存関係は requests のみです。依存関係を実行時に用意するため、uv を使って実行してください。

uv run --with requests scripts/biorxiv_search.py --help

以下に記載する python scripts/biorxiv_search.py ... の呼び出しは簡略表記です。uv run --with requests scripts/biorxiv_search.py ... に置き換えるか、requests がインストールされた環境を有効にしてください。

主な検索機能

1. キーワード検索

タイトル、要旨、著者一覧に特定のキーワードを含むプレプリントを検索します。

基本的な使い方:

python scripts/biorxiv_search.py \
  --keywords "CRISPR" "gene editing" \
  --start-date 2024-01-01 \
  --end-date 2024-12-31 \
  --output results.json

カテゴリフィルターを使用:

python scripts/biorxiv_search.py \
  --keywords "neural networks" "deep learning" \
  --days-back 180 \
  --category neuroscience \
  --output recent_neuroscience.json

検索対象フィールド: キーワードの照合では大文字と小文字を区別せず、いずれか1つのキーワードが見つかれば論文が一致します(AND ではなく OR の意味です)。既定では、タイトルと要旨の両方が検索対象です。--search-fields でカスタマイズできます。

python scripts/biorxiv_search.py \
  --keywords "AlphaFold" \
  --search-fields title \
  --days-back 365
2. 著者検索

日付範囲内で特定の著者による論文をすべて検索します。

基本的な使い方:

python scripts/biorxiv_search.py \
  --author "Smith" \
  --start-date 2023-01-01 \
  --end-date 2024-12-31 \
  --output smith_papers.json

最近の出版物:

# Last year by default if no dates specified
python scripts/biorxiv_search.py \
  --author "Johnson" \
  --output johnson_recent.json
3. 日付範囲検索

特定の日付範囲内に投稿されたプレプリントをすべて取得します。

基本的な使い方:

python scripts/biorxiv_search.py \
  --start-date 2024-01-01 \
  --end-date 2024-01-31 \
  --output january_2024.json

カテゴリフィルターを使用:

python scripts/biorxiv_search.py \
  --start-date 2024-06-01 \
  --end-date 2024-06-30 \
  --category genomics \
  --output genomics_june.json

過去の日数を指定するショートカット:

# Last 30 days
python scripts/biorxiv_search.py \
  --days-back 30 \
  --output last_month.json
4. DOI による論文の詳細

特定のプレプリントの詳細なメタデータを取得します。bioRxiv の DOI には 2 つのプレフィックスがあります。 10.1101/… は古いプレプリント用、10.64898/… は openRxiv への移行後(2025 年 12 月)に 投稿されたプレプリント用です。例:10.64898/2026.08.28.747819。どちらも /details/ および www.biorxiv.org/content/ URL で使用できます。このスクリプトは、プレフィックスを問わず、DOI、doi.org リンク、 コンテンツ URL を正規化します。正規表現やバリデーターに 10.1101 をハードコードしないでください。

基本的な使い方:

python scripts/biorxiv_search.py \
  --doi "10.1101/2024.01.15.123456" \
  --output paper_details.json

完全な DOI URL に対応(どちらのプレフィックスも可):

python scripts/biorxiv_search.py \
  --doi "https://doi.org/10.64898/2026.08.28.747819"
5. PDF のダウンロード

任意のプレプリントの全文 PDF をダウンロードします。

基本的な使い方:

python scripts/biorxiv_search.py \
  --doi "10.1101/2024.01.15.123456" \
  --download-pdf paper.pdf

バッチ処理: 複数の PDF をダウンロードするには、検索結果の JSON から DOI を抽出し、各論文をダウンロードします:

import json
from biorxiv_search import BioRxivSearcher

# Load search results
with open('results.json') as f:
    data = json.load(f)

searcher = BioRxivSearcher(verbose=True)

# Download each paper
for i, paper in enumerate(data['results'][:10]):  # First 10 papers
    doi = paper['doi']
    searcher.download_pdf(doi, f"papers/paper_{i+1}.pdf")

有効なカテゴリ

bioRxiv の分野カテゴリで検索を絞り込みます:

  • animal-behavior-and-cognition
  • biochemistry
  • bioengineering
  • bioinformatics
  • biophysics
  • cancer-biology
  • cell-biology
  • clinical-trials
  • developmental-biology
  • ecology
  • epidemiology
  • evolutionary-biology
  • genetics
  • genomics
  • immunology
  • microbiology
  • molecular-biology
  • neuroscience
  • paleontology
  • pathology
  • pharmacology-and-toxicology
  • physiology
  • plant-biology
  • scientific-communication-and-education
  • synthetic-biology
  • systems-biology
  • zoology

出力形式

すべての検索結果は、次の形式の構造化 JSON で返されます:

{
  "query": {
    "keywords": ["CRISPR"],
    "start_date": "2024-01-01",
    "end_date": "2024-12-31",
    "category": "genomics"
  },
  "result_count": 42,
  "results": [
    {
      "doi": "10.1101/2024.01.15.123456",
      "title": "Paper Title Here",
      "authors": "Smith, J.; Doe, J.; Johnson, A.",
      "author_corresponding": "Smith J",
      "author_corresponding_institution": "University Example",
      "date": "2024-01-15",
      "version": "1",
      "type": "new results",
      "license": "cc_by",
      "category": "genomics",
      "abstract": "Full abstract text...",
      "pdf_url": "https://www.biorxiv.org/content/10.1101/2024.01.15.123456v1.full.pdf",
      "html_url": "https://www.biorxiv.org/content/10.1101/2024.01.15.123456v1",
      "jatsxml": "https://www.biorxiv.org/content/...",
      "published": ""
    }
  ]
}

よくある使用パターン

文献レビューのワークフロー
  1. 広範なキーワード検索:
python scripts/biorxiv_search.py \
  --keywords "organoids" "tissue engineering" \
  --start-date 2023-01-01 \
  --end-date 2024-12-31 \
  --category bioengineering \
  --output organoid_papers.json
  1. 結果の抽出と確認:
import json

with open('organoid_papers.json') as f:
    data = json.load(f)

print(f"Found {data['result_count']} papers")

for paper in data['results'][:5]:
    print(f"\nTitle: {paper['title']}")
    print(f"Authors: {paper['authors']}")
    print(f"Date: {paper['date']}")
    print(f"DOI: {paper['doi']}")
  1. 選択した論文のダウンロード:
from biorxiv_search import BioRxivSearcher

searcher = BioRxivSearcher()
selected_dois = ["10.1101/2024.01.15.123456", "10.1101/2024.02.20.789012"]

for doi in selected_dois:
    filename = doi.replace("/", "_").replace(".", "_") + ".pdf"
    searcher.download_pdf(doi, f"papers/{filename}")
トレンド分析

出版頻度を時系列で分析して、研究トレンドを追跡します:

python scripts/biorxiv_search.py \
  --keywords "machine learning" \
  --start-date 2020-01-01 \
  --end-date 2024-12-31 \
  --category bioinformatics \
  --output ml_trends.json

次に、結果に含まれる時間的な分布を分析します。

著者の追跡

特定の研究者のプレプリントをモニタリングします:

# Track multiple authors (each run scans the whole window, so keep it short)
for author in Smith Johnson Williams; do
  python scripts/biorxiv_search.py \
    --author "$author" \
    --days-back 365 \
    --output "${author}_papers.json"
done

Python API の使用

より複雑なワークフローでは、BioRxivSearcher クラスを直接インポートして使用します:

from scripts.biorxiv_search import BioRxivSearcher

# Initialize
searcher = BioRxivSearcher(verbose=True)

# Multiple search operations
keywords_papers = searcher.search_by_keywords(
    keywords=["CRISPR", "gene editing"],
    start_date="2024-01-01",
    end_date="2024-12-31",
    category="genomics"
)

author_papers = searcher.search_by_author(
    author_name="Smith",
    start_date="2023-01-01",
    end_date="2024-12-31"
)

# Get specific paper details
paper = searcher.get_paper_details("10.1101/2024.01.15.123456")

# Download PDF
success = searcher.download_pdf(
    doi="10.1101/2024.01.15.123456",
    output_path="paper.pdf"
)

# Format results consistently
formatted = searcher.format_result(paper, include_abstract=True)

ベストプラクティス

  1. 日付範囲は狭く設定する:フィルタリングはクライアント側で行われるため、ツールはフィルタリングの前に範囲全体をページネーションします(1ページあたり30件)。論文の投稿が多い週は約800件のプレプリント(API 呼び出し約27回)ですが、1年分では数万件に達します。範囲を狭めるか、最近のものを検索するには --days-back を使用してください。

  2. カテゴリで絞り込む:分野がわかっている場合は、--category を使用してください。カテゴリはサーバーに送信されるため(?category=)、検索結果と API 呼び出し回数の両方を減らせます(投稿が多い週の場合、全体では約1,270件のプレプリントに対して、細胞生物学では約80件です)。

  3. --limit で上限を設定する:日付範囲のみで検索する場合、--limit を指定するとページネーションも早期に終了するため、実際に API 呼び出し回数が減ります。キーワード検索や著者検索では、先に範囲全体をスキャンする必要があるため、--limit は最終的なリストを絞り込むだけです。

  4. レート制限を守る:スクリプトはリクエストの間に0.5秒待機します。文書化された厳密なレート制限はありませんが、大量のデータを取得する場合は待機時間を長くし、結果を JSON にキャッシュしてください。

  5. バージョンを追跡する:プレプリントには複数のバージョンが存在する場合があります。DOI 検索では最新バージョンが返されます。download_pdf は自動的に最新バージョンを解決します(上書きするには version= を渡してください)。PDF/HTML の URL にはバージョン番号が含まれます。プレプリントの公開後、/details/ の published フィールドにはジャーナルの DOI(または NA)が格納されます。10.64898 の DOI では何も返さない DOI ごとの /pubs/ 検索ではなく、このフィールドを使用してください。

  6. PDF のダウンロードには制限がかかることがあります:PDF は Cloudflare の背後にある www.biorxiv.org から配信されるため、スクリプトによるリクエストに HTTP 429 を返す場合があります。ダウンロードの間隔を空け、html_url に切り替えてください。全文を一括取得する場合は、bioRxiv のリクエスター負担方式のテキストマイニング用バケット s3://biorxiv-src-monthly を使用してください(MECA の ZIP パッケージ。https://www.biorxiv.org/tdm を参照)。

  7. 結果が空の場合に対処する:result_count を確認してください。結果が空の場合、通常は該当する論文がない日付範囲、狭すぎるカテゴリ、または一時的な API 接続の問題が原因です。ページネーションで範囲全体を取得するため、結果が黙って切り捨てられたわけではありません。

  8. デバッグには詳細モードを使用する:--verbose を使用すると、ページネーションごとの API リクエストと報告された total を確認できます。

高度な機能

カスタム日付範囲のロジック
from datetime import datetime, timedelta
from scripts.biorxiv_search import BioRxivSearcher

# Last quarter
end_date = datetime.now()
start_date = end_date - timedelta(days=90)

papers = BioRxivSearcher().search_by_date_range(
    start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d"), category="genomics"
)
結果数の制限

返す結果の数を制限します:

python scripts/biorxiv_search.py \
  --keywords "COVID-19" \
  --days-back 30 \
  --limit 50 \
  --output covid_top50.json
高速化のためにアブストラクトを除外する

メタデータのみが必要な場合:

# Note: Abstract inclusion is controlled in Python API
from scripts.biorxiv_search import BioRxivSearcher

searcher = BioRxivSearcher()
papers = searcher.search_by_keywords(keywords=["AI"], days_back=30)
formatted = [searcher.format_result(p, include_abstract=False) for p in papers]

プログラムによる連携

検索結果を後続の分析パイプラインに統合します:

import json
import pandas as pd

# Load results
with open('results.json') as f:
    data = json.load(f)

# Convert to DataFrame for analysis
df = pd.DataFrame(data['results'])

# Analyze
print(f"Total papers: {len(df)}")
print(f"Date range: {df['date'].min()} to {df['date'].max()}")
print(f"\nTop authors by paper count:")
print(df['authors'].str.split(';').explode().str.strip().value_counts().head(10))

# Filter and export
recent = df[df['date'] >= '2024-06-01']
recent.to_csv('recent_papers.csv', index=False)

リファレンスドキュメント

API 仕様、エンドポイントのドキュメント、レスポンスのスキーマについて詳しくは、以下を参照してください:

  • references/api_reference.md - bioRxiv API の完全なドキュメント

リファレンスファイルには、以下が含まれます:

  • API エンドポイントの全仕様
  • レスポンス形式の詳細
  • エラー処理のパターン
  • レート制限のガイドライン
  • 高度な検索パターン

コメント