mcpField
A
alterlab-arxiv

alterlab-arxiv

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

alterlab-arxiv について

alterlab-arxivは、arXivの公開Atom APIでプレプリントを検索・取得するスキルで、研究者や文献レビュー作業向けです。著者・カテゴリ・IDによる検索、PDFのダウンロードに対応し、結果を構造化JSONで返します。

主な機能

  1. 01キーワード・フィールドによる論文検索
  2. 02著者またはカテゴリによる絞り込み
  3. 03arXiv IDによる論文検索
  4. 04個別・一括PDFダウンロード
  5. 05論文メタデータのJSON出力

活用シーン

  1. 01機械学習分野のプレプリント検索
  2. 02著者の新着論文の追跡
  3. 03カテゴリ別の新規投稿の確認
  4. 04文献レビュー用データセットの作成

インストール

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

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

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

同梱ファイル

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

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

詳細

arXiv データベース

概要

このスキルは、arXiv.org の公開 Atom API を介してプレプリントを検索・取得するための Python ツールを提供します。キーワード検索、著者検索、カテゴリによる絞り込み、arXiv ID の検索、PDF のダウンロードに対応しています。検索結果は、タイトル、要旨、著者、カテゴリ、リンクを含む構造化 JSON として返されます。

このスクリプトでは PEP 723 のインラインヘッダーを使って requests 依存関係を宣言しているため、最も確実な実行方法は uv run scripts/arxiv_search.py ... です(依存関係が自動的に解決されます)。以下の python scripts/arxiv_search.py ... の例は、requests がすでにインストールされている場合に動作します。

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

以下の場合にこのスキルを使用してください:

  • CS、ML、AI、物理学、数学、統計学、q-bio、q-fin、経済学のプレプリントを検索する
  • arXiv ID(例:2309.10668)で特定の論文を検索する
  • 著者の最近のプレプリントを追跡する
  • arXiv のカテゴリ(例:cs.LG、cs.CL、stat.ML)で論文を絞り込む
  • 全文分析のために PDF をダウンロードする
  • AI/ML 研究のための文献レビュー用データセットを構築する
  • あるサブ分野の新着投稿を監視する
使用しない場面
シナリオ代わりに使用
査読済みで MeSH にインデックスされた生物医学系ジャーナル論文alterlab-pubmed
ライフサイエンス分野のプレプリント(bioRxiv / medRxiv)alterlab-biorxiv
被引用数、被引用推移、機関や研究室の研究成果の追跡alterlab-openalex
自身のプレプリントを arXiv に投稿する(カテゴリ、ライセンス、バージョン管理)alterlab-preprint-deposition
PRISMA スクリーニングを伴う複数データベースのシステマティックレビューalterlab-literature-review

主な検索機能

1. キーワード検索

タイトル、要旨、またはすべてのフィールドを対象に、キーワードで論文を検索します。

python scripts/arxiv_search.py \
  --keywords "sparse autoencoders" "mechanistic interpretability" \
  --max-results 20 \
  --output results.json

カテゴリによる絞り込み:

python scripts/arxiv_search.py \
  --keywords "transformer" "attention mechanism" \
  --category cs.LG \
  --max-results 50 \
  --output transformer_papers.json

特定のフィールドを検索:

# Title only
python scripts/arxiv_search.py \
  --keywords "GRPO" \
  --search-field ti \
  --max-results 10

# Abstract only
python scripts/arxiv_search.py \
  --keywords "reward model" "RLHF" \
  --search-field abs \
  --max-results 30
2. 著者検索

au: が照合するのは著者名のみです。API では所属機関による絞り込みができないため、au:anthropic や au:deepmind では何も返されないか、組織が団体著者として記載されている論文のみが返されます。研究室を追跡するには、そのメンバーの名前で検索してください。機関全体を追跡するには、alterlab-openalex(機関フィルター)を使用してください。

python scripts/arxiv_search.py \
  --author "Yoshua Bengio" \
  --max-results 50 \
  --output bengio_papers.json
python scripts/arxiv_search.py \
  --author "Ilya Sutskever" \
  --category cs.LG \
  --max-results 20
3. arXiv ID の検索

特定の論文のメタデータを取得します:

python scripts/arxiv_search.py \
  --ids 2309.10668 2406.04093 2310.01405 \
  --output sae_papers.json

arXiv の完全な URL も使用できます:

python scripts/arxiv_search.py \
  --ids "https://arxiv.org/abs/2309.10668"
4. カテゴリの参照

カテゴリ内の最近の論文を一覧表示します:

python scripts/arxiv_search.py \
  --category cs.AI \
  --max-results 100 \
  --sort-by submittedDate \
  --output recent_cs_ai.json
5. PDF のダウンロード
python scripts/arxiv_search.py \
  --ids 2309.10668 \
  --download-pdf papers/

検索結果から一括ダウンロード:

import json
from scripts.arxiv_search import ArxivSearcher

searcher = ArxivSearcher()

# Search first
results = searcher.search(query="ti:sparse autoencoder", max_results=5)

# Download all
for paper in results:
    arxiv_id = paper["arxiv_id"]
    searcher.download_pdf(arxiv_id, f"papers/{arxiv_id.replace('/', '_')}.pdf")

arXiv カテゴリ

コンピューターサイエンス(cs.*)
カテゴリ説明
cs.AI人工知能
cs.CL計算と言語(NLP)
cs.CVコンピュータービジョン
cs.LG機械学習
cs.NEニューラルコンピューティングと進化計算
cs.ROロボティクス
cs.CR暗号とセキュリティ
cs.DSデータ構造とアルゴリズム
cs.IR情報検索
cs.SEソフトウェア工学
統計学・数学
カテゴリ説明
stat.ML機械学習(統計学)
stat.ME方法論
math.OC最適化と制御
math.ST統計理論
その他の関連カテゴリ
カテゴリ説明
q-bio.BM生体分子
q-bio.GNゲノミクス
q-bio.QM定量的方法
q-fin.ST金融統計学
eess.SP信号処理
physics.comp-ph計算物理学

全カテゴリ一覧:references/api_reference.mdを参照してください。

クエリ構文

arXiv API では、フィールドプレフィックスとブール演算子を組み合わせた検索を使用します。

フィールドプレフィックス:

  • ti: - タイトル
  • au: - 著者
  • abs: - 要約
  • cat: - カテゴリー
  • all: - すべてのフィールド(デフォルト)
  • co: - コメント
  • jr: - ジャーナル参照
  • id: - arXiv ID

ブール演算子(大文字で指定する必要があります):

ti:transformer AND abs:attention
au:bengio OR au:lecun
cat:cs.LG ANDNOT cat:cs.CV

括弧によるグループ化:

(ti:sparse AND ti:autoencoder) AND cat:cs.LG
au:"Chris Olah" AND (abs:interpretability OR abs:alignment)

日付範囲(GMT、YYYYMMDDTTTT、両端を含む):

cat:cs.LG AND submittedDate:[202501010000 TO 202501312359]

検証(2025年11月のバックエンド移行以降): 括弧の不一致、au: のような空のプレフィックス、フィールド構文の入れ子など、形式が不正なクエリは、空の 200 ではなく、Atom エラーエントリー(<summary>Invalid query string: …</summary>)を伴う HTTP 400 を返します。裸の検索語には自動でプレフィックスが付与されます(pineapple → all:pineapple)。この書き換えを無効にするには raw=1 を追加してください。スクリプトは、これらのエラーを結果 0 件として報告するのではなく、そのまま表示します。

例:

from scripts.arxiv_search import ArxivSearcher

searcher = ArxivSearcher()

# Papers about SAEs in ML
results = searcher.search(
    query="ti:sparse autoencoder AND cat:cs.LG",
    max_results=50,
    sort_by="submittedDate"
)

# Specific author in specific field
results = searcher.search(
    query='au:"Neel Nanda" AND cat:cs.LG',
    max_results=20
)

# Complex boolean query
results = searcher.search(
    query="(abs:RLHF OR abs:reinforcement learning from human feedback) AND cat:cs.CL",
    max_results=100
)

出力形式

すべての検索結果は、構造化された JSON で返されます。

{
  "query": "id_list:2309.10668",
  "result_count": 1,
  "results": [
    {
      "arxiv_id": "2309.10668",
      "title": "Language Modeling Is Compression",
      "authors": ["Grégoire Delétang", "Anian Ruoss", "..."],
      "abstract": "Full abstract text...",
      "categories": ["cs.LG", "cs.AI", "cs.CL", "cs.IT"],
      "primary_category": "cs.LG",
      "published": "2023-09-19T14:50:38Z",
      "updated": "2024-03-18T23:15:47Z",
      "doi": "",
      "pdf_url": "https://arxiv.org/pdf/2309.10668v2",
      "abs_url": "https://arxiv.org/abs/2309.10668v2",
      "comment": "",
      "journal_ref": ""
    }
  ]
}

よくある使用パターン

文献レビューのワークフロー
from scripts.arxiv_search import ArxivSearcher
import json

searcher = ArxivSearcher()

# 1. Broad search
results = searcher.search(
    query="abs:mechanistic interpretability AND cat:cs.LG",
    max_results=200,
    sort_by="submittedDate"
)

# 2. Save results
with open("interp_papers.json", "w") as f:
    json.dump({"result_count": len(results), "results": results}, f, indent=2)

# 3. Filter and analyze
import pandas as pd
df = pd.DataFrame(results)
print(f"Total papers: {len(df)}")
print(f"Date range: {df['published'].min()} to {df['published'].max()}")
print(f"\nTop categories:")
print(df["primary_category"].value_counts().head(10))
研究グループを追跡する

arXiv には所属機関検索がないため、メンバーの名前を使ってグループを追跡してください(または alterlab-openalex に切り替え、機関 ID で論文を絞り込んでください)。

searcher = ArxivSearcher()

members = ["Chris Olah", "Neel Nanda", "Tom Henighan"]  # the group's authors
query = "(" + " OR ".join(f'au:"{m}"' for m in members) + ") AND (cat:cs.LG OR cat:cs.CL)"

results = searcher.search(query=query, max_results=50, sort_by="submittedDate")
print(f"{len(results)} recent papers")
新着投稿を監視する
searcher = ArxivSearcher()

# Most recent ML papers
results = searcher.search(
    query="cat:cs.LG",
    max_results=50,
    sort_by="submittedDate",
    sort_order="descending"
)

for paper in results[:10]:
    print(f"[{paper['published'][:10]}] {paper['title']}")
    print(f"  {paper['abs_url']}\n")

Python API

from scripts.arxiv_search import ArxivSearcher

searcher = ArxivSearcher(verbose=True)

# Free-form query (uses arXiv query syntax)
results = searcher.search(query="...", max_results=50)

# Lookup by ID
papers = searcher.get_by_ids(["2309.10668", "2406.04093"])

# Download PDF
searcher.download_pdf("2309.10668", "paper.pdf")

# Build query from components
query = ArxivSearcher.build_query(
    title="sparse autoencoder",
    author="anthropic",
    category="cs.LG"
)
results = searcher.search(query=query, max_results=20)

ベストプラクティス

  1. レート制限を守る:API は呼び出し間に 3 秒の遅延を設けるよう求めています。スクリプトがこれを自動的に処理します。
  2. カテゴリーで絞り込む:ノイズを大幅に減らせます。ほとんどの ML 論文は cs.LG にあります。
  3. 結果をキャッシュする:再取得を避けるため、JSON に保存します。
  4. 最近の論文には sort_by=submittedDate、キーワード検索には relevance を使用します。
  5. 1 回の呼び出しあたり最大 2000 件:arXiv は 1 回のリクエストを 2000 件までに制限しています(スクリプトもこの上限に調整します)。それ以上の場合は、start パラメーターでページネーションしてください。合計上限は 30000 件です。
  6. arXiv ID:プログラムコードでは、完全な URL ではなく、ID のみ(2309.10668)を使用します。
  7. alterlab-openalex と組み合わせる:arXiv が提供していない被引用数や影響指標を取得できます。

制限事項

  • 全文検索には対応していません:メタデータ(タイトル、要約、著者、コメント)のみを検索します
  • 引用データはありません:引用情報には alterlab-openalex または Semantic Scholar を使用してください
  • 所属機関検索には対応していません:au: は著者名のみを照合します
  • 1 回の呼び出しあたり最大 2000 件:それ以上の場合はページネーション(start)を使用してください。合計上限は 30000 件です。
  • レート制限があります:3 秒あたり約 1 リクエストが推奨されます
  • Atom XML レスポンス:スクリプトがこれらを自動的に JSON に解析します
  • 検索の遅延:新しい論文が API の検索結果に表示されるまで、数時間かかることがあります
  • 厳格なクエリ検証:構文が無効な場合、エントリーにエラーを含む HTTP 400 が返されます(「クエリ構文」を参照)

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

  • API リファレンス:エンドポイントの仕様、すべてのカテゴリー、レスポンススキーマについては、references/api_reference.md を参照してください

コメント