alterlab-citation-graph について
alterlab-citation-graphは、OpenAlexを使って1件以上の起点となる文献を中心に引用・共引用グラフを構築します。関連文献を探索し、順位付きの結果をGraphMLとJSONで分析・可視化用に出力できます。
主な機能
- 01DOI、OpenAlexの作品ID、arXivを起点に指定
- 02参考文献と被引用作品を両方向に展開
- 03複数ホップの引用ネットワークを探索
- 04共引用のつながりで作品を順位付け
- 05GraphMLとJSONにエクスポート
活用シーン
- 01重要論文を中心に研究文献をマッピング
- 02分野内で共引用の多い作品を発見
- 03レビュー用に引用を前後方向へたどる
- 04可視化・分析用に引用ネットワークを出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-citation-graphインストール後、Claude Code で/alterlab-citation-graphを入力して読み込まれたか確認します。
同梱ファイルevals/evals.jsonscripts/build_graph.py
詳細
Citation Graph — ResearchRabbit の無料の代替ツール
概要
ResearchRabbit や Connected Papers に代わる、サブスクリプション不要の無料ツールです。 シード DOI(または複数のシード)を指定すると、このスキルは OpenAlex の引用ネットワークを双方向にたどり、関連する文献の引用/共引用グラフを構築します。
- 後方エッジ — 各シードが引用している論文(その
referenced_works)。 - 前方エッジ — 各シードを引用している論文(その
cited_byセット)。
続いて、共引用の強さで見つかった近傍をランキングします。候補となる論文が、共有する参考文献、共有する引用者、シードへの直接リンクを通じて、シード論文のうちいくつとつながっているかを基準にします。これにより、ResearchRabbit の「Similar Work」パネルと同様に、トピックの中心となる論文を提示します。グラフ全体は GraphML(Gephi、Cytoscape、yEd、networkx で開けます)と JSON(後続のコードで使用)としてエクスポートされます。
OpenAlex のデータはオープン(CC0)で、この規模の利用であれば API も無料です。ただし、2026 年 2 月以降、リクエストは日次予算に対して課金され、以前の mailto「polite pool」は廃止されています。キーなしの呼び出しは IP アドレスごとに 1 日あたり 0.10 ドルを共有します。大学やクラウドのネットワークでは、その予算がすでに使い切られていることが多く、HTTP 429 が返されます。無料の API キー(OPENALEX_API_KEY。openalex.org/settings/api から取得)を使えば、自分専用の 1 日あたり 1 ドル分の予算が利用できます。通常のグラフ探索にかかる費用は 1 セント未満です。シードの検索は無料で、リスト/フィルターの呼び出し 1 回につき 0.0001 ドルです。
このスキルを使う場面
- 開始点となる論文から文献の全体像を把握する — 「重要な論文が 1 本あります。その周辺分野を見せてください」
- 参考文献を手作業でたどらずに、その分野の先駆的な論文や共引用の多い論文を見つける。
- レビューのために、参考文献ネットワークをたどる(前方・後方への引用追跡)。
- 引用マップを作成する、または手法/可視化用の図として共引用分析を行う。
- 研究分野のつながりを可視化する — ネットワーク図を作成するために Gephi/Cytoscape にエクスポートする。
これはグラフ構築/発見ツールです。探索の起点となるシード論文が必要です。
対象外
| シナリオ | 代わりに使うツール |
|---|---|
| シード論文のない自由形式の研究課題 | alterlab-research-lookup |
| 参考文献リストの各項目が実在するかの確認/幻覚や撤回された文献の検出 | alterlab-citation-verifier |
| OpenAlex で論文、著者、機関、書誌計量学的な傾向を検索する(グラフなし) | alterlab-openalex |
| PRISMA によるスクリーニングとバイアスリスク評価を伴うシステマティックレビュー | alterlab-literature-review |
| 独自の(引用ではない)関係データの中心性分析やコミュニティ分析 | alterlab-sna |
クイックスタート
export OPENALEX_API_KEY=... # free at openalex.org/settings/api; recommended
# One seed DOI, default 1-hop walk, write both formats next to a basename:
uv run python scripts/build_graph.py \
--seed 10.1038/nphys1170 \
--out graph/seed1
# -> graph/seed1.graphml + graph/seed1.json
# Several seeds (DOI / OpenAlex W-id / arXiv id), deeper walk, larger ranking:
uv run python scripts/build_graph.py \
--seed 10.1038/nphys1170 \
--seed W2741809807 \
--seed arXiv:2310.06825 \
--depth 2 --per-seed 50 --top 40 \
--out graph/transformer
# Offline smoke test (no network) — verifies the pipeline end-to-end:
uv run python scripts/build_graph.py --self-test
仕組み
- シードを解決します。 各
--seedは OpenAlex のセレクターに正規化されます。 使用できる形式は、DOI のみ(10.1038/nphys1170)、DOI URL、OpenAlex の論文 ID(W2741809807)、OpenAlex URL、arXiv ID(arXiv:1706.03762/1706.03762)です。 - 後方に展開します。 各シードの
referenced_worksから、seed -> referenceのエッジを追加します。 - 前方に展開します。
filter=cites:<id>をクエリしてシードを引用している論文を見つけ、citer -> seedのエッジを追加します(--per-seedを上限とします。OpenAlex は 1 ページあたり最大 100 件を返します)。 - さらに探索します。
--depth Nを指定すると、最初のホップで見つかった近傍に対して展開を繰り返します(N >= 2)。 - 共引用でランキングします。 シード以外の各ノードは
shared_refs + shared_citers + direct_seed_linksでスコア付けされます。これは、シードセットに対する書誌結合と共引用を表します。同点の場合は、全体のcited_by_countを使って順位を決めるため、代表的な論文が上位に表示されます。 - メタデータを補完します。 参考文献は W-Id のみで取得されるため、ランキングされた論文のタイトル、出版年、DOI を、バッチ処理した
filter=openalex:W…|W…の呼び出し(1 回につき ID 100 件)で取得し、表を再ランキングします。 - エクスポートします。
<out>.graphmlと<out>.jsonを書き出します。
オプション
| フラグ | デフォルト | 意味 |
|---|---|---|
--seed(繰り返し指定可能) | — | シードとなる DOI、OpenAlex の W-id、または arXiv ID です。少なくとも 1 つ必要です。 |
--api-key | $OPENALEX_API_KEY | 無料の OpenAlex キーです。Bearer ヘッダーとして送信されます。キーがシェルの履歴に残らないよう、環境変数の使用を推奨します。 |
--mailto | — | 非推奨の no-op です。OpenAlex は 2026 年 2 月以降、mailto を無視します。 |
--depth | 1 | 展開する引用ホップ数です。 |
--per-seed | 25 | 各著作物について取得する、引用する著作物の最大数です(OpenAlex の上限は 100)。 |
--top | 25 | 共引用ランキングテーブルのサイズです。 |
--out | citation_graph | 出力ファイルのベース名です。<out>.graphml と <out>.json を書き出します。 |
--sleep | 0.0 | API 呼び出し間の秒数です(OpenAlex は最大 100 リクエスト/秒を許可しています)。 |
--self-test | — | オフラインのセルフテストを実行して終了します(ネットワーク接続なし)。 |
出力
GraphML(<out>.graphml)— ノード属性 title、year、
doi、role(seed/reference/citation/neighbor)、および cited_by_count を持つ有向グラフです。Gephi、Cytoscape、yEd、または networkx.read_graphml で
直接開けます。
JSON(<out>.json)— スキーマ alterlab-citation-graph/1.0:
{
"schema": "alterlab-citation-graph/1.0",
"seeds": ["10.1038/nphys1170"],
"node_count": 142,
"edge_count": 318,
"nodes": [ { "id": "W…", "title": "…", "year": 2017, "doi": "…", "role": "citation", "cited_by_count": 8123 } ],
"edges": [ { "source": "W…", "target": "W…" } ],
"cocitation_ranking": [
{ "id": "W…", "title": "…", "cocitation": 4, "shared_refs": 2,
"shared_citers": 1, "direct_seed_links": 1, "cited_by_count": 8123 }
]
}
アクセスと制限
- 無料キーを使用してください。 ユーザーには、チャットやコミット済みファイルにキーを貼り付けるのではなく、
OPENALEX_API_KEYを設定するよう案内してください(openalex.org/settings/api)。キーがなくても、共有の IP 単位の利用枠に余裕があれば実行できます。その場合、スクリプトは注記を表示します。 - HTTP 429 は、1 日あたりの利用枠を使い切った(UTC の午前 0 時にリセットされます)か、実行中に 100 リクエスト/秒を超えたことを意味します。スクリプトはグラフを黙って不完全な状態で書き出すのではなく、明示的なエラーで停止します。キーを追加するか、後でもう一度お試しください。
- 探索範囲を制限してください。
--depth 2と大きな--per-seedを組み合わせると、急速に対象が増えます(フロンティア内の各著作物につきリスト呼び出しが 1 回発生します)。--per-seedは適切な値に保ち、レート制限に達した場合は--sleepを増やしてください。 - カバレッジに関する注意点。 OpenAlex の引用カバレッジは広範ですが、完全ではありません。非常に新しいプレプリントでは、
cited_byの集合に含まれる項目が少ない場合があります。 - arXiv のシード。
arXiv:<id>シードは、DataCite DOI(10.48550/arXiv.<id>)を介して解決されます。プレプリントが後に出版版のレコードに統合された場合、OpenAlex には出版社の DOI だけが登録されている可能性があります。その場合は、その DOI をシードとして指定してください。
関連ツール
| タスク | ツール |
|---|---|
| ランキングから選んだ論文を Zotero に追加する(DOI → アイテム、コレクション) | alterlab-pyzotero |
| 原稿内のリンク/DOI の有効性を確認する | alterlab-link-health |
| Gephi のデフォルト設定を超えてネットワーク図を描画またはスタイル変更する | alterlab-networkx |
AlterLab Academic Skills スイートの一部です。