research-knowledge-graph について
Research Knowledge Graphsは、参考文献ライブラリを論文、著者、掲載誌、トピック、引用関係のグラフに変換するスキルです。オフライン構築またはOpenAlexによるデータ補完に対応し、分析・可視化ツール向けに出力します。
主な機能
- 01BibTeXまたはCSL-JSONからグラフを構築
- 02OpenAlexによるメタデータ補完
- 03JSON、GraphML、CSV、Obsidian vaultへの出力
- 04著者・トピック・掲載誌・引用の表現
- 05クラスターと橋渡し論文の分析
活用シーン
- 01文献ライブラリのテーマと引用関係の把握
- 02コーパス内で引用数の多い論文の特定
- 03研究クラスターをつなぐ論文の発見
- 04GephiやObsidian向けグラフデータの準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-skills --skill research-knowledge-graphインストール後、Claude Code で/research-knowledge-graphを入力して読み込まれたか確認します。
同梱ファイルscripts/build_graph.py
詳細
研究ナレッジグラフ
文献レビューは、実はグラフの問題です。誰もが土台としている論文、互いの議論がかみ合わないクラスター、それらをつなぐ研究、そして未解明の領域を見つけます。このスキルは、文献ライブラリからグラフを構築し、ユーザーが希望するグラフツールに渡します。
構築
# Offline: authors, venues and keywords from the .bib itself
python scripts/build_graph.py references.bib --out kg/
# Enriched: disambiguated authors (OpenAlex IDs, ORCID), venues, topics, and
# citation edges between papers in the library
python scripts/build_graph.py references.bib --out kg/ --openalex --mailto [email protected]
CSL-JSON(Zotero または reference-manager-interop でエクスポートした .json)も入力として使用できます。
| 出力 | 使用先 |
|---|---|
graph.json | NetworkX:nx.node_link_graph(json.load(f), edges="links")、または任意の JS グラフライブラリ |
graph.graphml | Gephi、yEd、Cytoscape、igraph、nx.read_graphml |
nodes.csv、edges.csv | Neo4j(neo4j-admin database import full --nodes=nodes.csv --relationships=edges.csv)または Gephi のスプレッドシートインポート |
vault/ | Obsidian(グラフビュー)、および [[wikilinks]] をエッジとして読み込む graphify などの Markdown グラフツール |
スキーマ。 ノードの type ∈ {paper、author、venue、topic}。エッジの type ∈
{authored_by、published_in、about、cites}。論文ノードには、判明している場合、doi、year、
openalex、cited_by_count が含まれます。
ライブラリを超えて拡張する(スノーボーリング)
引用エッジでつながるのは、すでに所蔵している論文だけです。分野の全体像を把握するには:
- 中核となる論文を5~20本選び、シードにします。
- 後方探索:各シードの
referenced_worksを OpenAlex から収集します。前方探索:引用している論文をhttps://api.openalex.org/works?filter=cites:W123...で検索します。 - 2本以上のシードから引用されている候補(共引用)を残し、
.bibにエクスポートして再構築します。 - 新たに追加される、つながりの強い論文が少なくなるまで探索を続けます。再現性のため、各ラウンドとしきい値を報告します。
分析(NetworkX)
import json, networkx as nx
g = nx.node_link_graph(json.load(open("kg/graph.json")), edges="links")
papers = [n for n, d in g.nodes(data=True) if d["type"] == "paper"]
cit = g.edge_subgraph([(u, v) for u, v, d in g.edges(data=True) if d["type"] == "cites"]).copy()
influential = sorted(cit.in_degree(), key=lambda x: -x[1])[:10] # most cited within corpus
bridges = sorted(nx.betweenness_centrality(cit.to_undirected()).items(), key=lambda x: -x[1])[:10]
communities = nx.community.louvain_communities(cit.to_undirected(), seed=0) # research clusters
解釈の指針:
- コーパス内で入次数が高い = この 文献群にとって基礎的な論文です(世界的に重要という意味ではありません)。
- 媒介中心性が高い = クラスター間をつなぐ論文であり、総合的な考察の節を書く際に読むとよい論文であることが多いです。
- コミュニティ = レビューの小節候補です。それぞれに、主要なトピックと最も多く引用されている論文に基づいて名前を付けます。
- トピックを共有するクラスター間のエッジが少ない = 研究のギャップとして示す価値がある可能性があります(確認は必要です)。
- 共著関係の連結成分から研究グループがわかります。
--openalexを使わずに名前だけで著者を統合する場合は注意してください。
可視化
- Gephi:
graph.graphmlを開く → ForceAtlas2 → 入次数でサイズを設定 → モジュラリティクラスで色分けします。 - Obsidian:
kg/vaultを保管庫として開き、グラフビューでフォルダー(papers/authors/topics)を絞り込みます。 - 文書内の小規模なグラフ:引用サブグラフを Mermaid(
flowchart LR、citesごとに1本のエッジ)に変換します。
整合性のルール
- エッジや論文を決して捏造しないでください。すべてのノードとエッジは、ライブラリまたは OpenAlex のレコードに由来する必要があります。
- 明らかなギャップなど、意外な構造が見つかった場合は、それを主張する前に論文を読んで確認してください。
執筆時に明記する注意点
網羅性は OpenAlex/Crossref のメタデータに依存します。引用エッジの完全性は referenced_works の完全性に左右されます。キーワード/トピックノードは大まかなものです。データソース、取得日、フィルタリングのしきい値を必ず報告してください。
関連スキル
paper-corpus-rag(同じ論文の全文に対するQA)、literature-review、
systematic-review-prisma、networkx、reference-manager-interop、citation-verification。