mcpField
E
ea-obsidian-world-builder

ea-obsidian-world-builder

github.com/lnilya生産性5462 回インストール8 週間前に更新
リポジトリ

ea-obsidian-world-builder について

ea-obsidian-world-builderは、学術PDFを引用付きの相互接続されたObsidian概念ネットワークに変換するスキルです。新規構築と既存Vaultへの論文追加に対応し、概念リストの確認工程を設けています。

主な機能

  1. 01PDFから論文内容を抽出
  2. 02概念リストの統合と確認
  3. 03引用付き概念ノートの作成
  4. 04論文参照ノートの作成
  5. 05wikilinkによる概念間リンク
  6. 06既存ネットワークへの論文追加

活用シーン

  1. 01学術論文を概念ネットワークに整理
  2. 02研究知見に追跡可能な引用を付与
  3. 03ノート生成前の概念リスト確認
  4. 04既存Obsidian Vaultへの論文統合

インストール

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

$npx skills add https://github.com/lnilya/effortless-academic-skills --skill ea-obsidian-world-builder

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

同梱ファイルscripts/extract_pdf_text.py

詳細

Academic Obsidian World Builder

このスキルは、学術論文の PDF コレクションを、相互に深く結び付いた Obsidian のナレッジネットワークへと変換します。各概念ノートには、文献から直接抽出した原子的な文が記載され、相互にリンクされた、Wikipedia のようなウェブを構築します。

ワークフローの概要

このスキルには 2 つのモードがあります。まず、どちらに該当するかを判断してください。

  • 構築モード — 新しいナレッジネットワークを一から作成します(フェーズ 1~4)
  • 拡張モード — 既存の Vault に論文を追加します(フェーズ 5)

ユーザーが既存の Vault に言及する場合や、既存のネットワークに論文を追加したいと言う場合は、拡張モード(フェーズ 5)を使用してください。それ以外の場合は、構築モードを使用してください。

構築モード — 4 つの逐次フェーズ

次のフェーズを始める前に、各フェーズを完全に終わらせてください。論文の数が多い場合(論文が 5 件以上、または概念が 10 個以上)、フェーズ 1 と 3 では並列サブエージェントを使用できます。

  1. 抽出 — 各 PDF を読み取り、テキストを抽出して、論文ごとに構造化データ(概念と原子的な知見)を作成します
  2. 統合 — 全論文の概念を集約して重複を取り除き、ユーザーが確認できるよう概念のリストを提示します
  3. ナレッジネットワークの構築 — 概念ごとに Wikipedia のような Obsidian ノートを 1 つ生成し、引用付きの原子的な文と Wiki リンクを記載します
  4. 論文のスタブ — 各論文の参照ノートを作成します

開始する前に、ユーザーに次の点を確認してください。

  • PDF の保存場所(会話の文脈から明らかな場合は不要です)
  • 出力先(どの Obsidian Vault フォルダーを使うか、または新しいフォルダーを作成するか)

ユーザーが obsidian:obsidian-cli スキルを利用できる場合は、それを使用してユーザーの Vault に直接ノートを書き込んでください。それ以外の場合は、出力ディレクトリに .md ファイルを書き込み、ファイルの保存場所をユーザーに伝えてください。


フェーズ 1:PDF の抽出

依存関係のインストール
pip install pdfplumber --break-system-packages 2>/dev/null
各 PDF からテキストを抽出

各 PDF に対して、同梱のスクリプトを使用してください。

python <skill_dir>/scripts/extract_pdf_text.py "<pdf_path>" "<workspace>/_extracted/<paper_slug>.txt"

スクリプトはプレーンテキストを出力します。抽出したテキストはすべて <workspace>/_extracted/ に保存してください。

PDF から抽出されたテキストが非常に少ない場合(200 語未満)、スキャン画像のみの PDF である可能性が高いです。その旨を記録してスキップし、最後にユーザーへ伝えてください。

各論文から構造化データを抽出

各論文について、抽出したテキストを読み取り、<workspace>/_paper_data/<paper_slug>.json に JSON ファイルを作成してください。

論文が 5 件以上ある場合は、論文ごと(または 3 件ごとのバッチ)にサブエージェントを 1 つ起動し、並列で作業させてください。 各サブエージェントには、次の情報を渡してください。

  • 担当する論文の抽出済み全文
  • 以下の JSON を作成する指示
  • 書き込み先のパス

各 JSON ファイルは、次のスキーマに従う必要があります。

{
  "title": "Full paper title as it appears in the document",
  "authors": ["Smith J", "Jones K", "Brown L"],
  "year": 2023,
  "citation_key": "Smith 2023",
  "abstract": "The abstract text...",
  "concepts": [
    "biodiversity",
    "climate change",
    "species richness",
    "habitat fragmentation"
  ],
  "findings": [
    {
      "concept": "biodiversity",
      "statement": "Global biodiversity loss is accelerating at rates 100–1000 times above natural background levels.",
      "related_concepts": ["climate change", "habitat fragmentation"],
      "section": "results"
    },
    {
      "concept": "climate change",
      "statement": "Elevated atmospheric CO₂ concentrations correlate with a 2.3°C increase in mean annual temperature across temperate biomes.",
      "related_concepts": ["biodiversity", "species distribution"],
      "section": "discussion"
    }
  ]
}

抽出のガイドライン:

引用キーの形式:

  • 著者数にかかわらず、すべての論文で Smith 2023 を使用します(筆頭著者の姓 + 半角スペース + 年)
  • 年が不明確な場合は Smith ND を使用します(no date)
  • 必ずこの形式を使い、「Etal」を付けたり、キーに共著者名を含めたりしないでください

概念(論文ごとに 5~20 個):

  • 具体的な概念(例:「ベータ多様性」「窒素固定」)と、より広範な概念(例:「生物多様性」「生態系機能」の両方を含めてください
  • 概念は動詞や形容詞ではなく、名詞または名詞句にしてください
  • 概念は一貫して小文字で表記してください

知見 — 最も重要な項目です:

  • 結果、考察、結論のみに厳密に焦点を当ててください。序論や文献レビューの主張は含めないでください(これらは背景情報であり、この論文の貢献ではありません)
  • 各知見は 1 つの原子的な文、つまり具体的な主張または測定値 1 つにしてください
  • 知見は、他の研究への引用ではなく、論文独自の貢献を示すものにしてください
  • 論文が実質的に扱っている概念ごとに、知見を 2~3 件記述してください。単に言及しているだけの概念は対象外です
  • 学術的な表現のみを使い、数値、単位、統計用語がある場合はそのまま保持してください
  • related_concepts:同じ主張の中で実質的に関連する、論文の概念リスト内の他の概念
  • section:"results"、"discussion"、"conclusions" のいずれか

フェーズ 2:概念の統合

_paper_data/*.json ファイルをすべて読み込みます。その後、次の手順を実行します。

  1. すべての論文の "concepts" 配列から、すべての概念を収集します
  2. 同義語や類似した概念を統合します。例:「biodiversity loss」と「biodiversity decline」→より一般的、またはより正確な用語を選択します。「CO₂」と「carbon dioxide」→「carbon dioxide」とします。判断に迷う場合は、曖昧な表現よりも具体的な表現を優先します。
  3. 各概念を参照している論文の数を数えます
  4. 論文数の多い順に並べ替えます(複数の論文にまたがる重要な概念を先頭にします)
  5. 概念の総数が30を超える場合、1本の論文でしか引用されていない概念を除外し、ユーザーが任意で含められるよう、別のセクションに記載します

概念のリストを <workspace>/concept_list.md に書き込みます。

# Concept List — Please Review Before Proceeding

I've extracted **N concepts** from **M papers**. Review this list:
- ✏️ Edit names (this becomes the note title)
- ❌ Delete lines you don't want
- ➕ Add new lines for concepts you feel are underrepresented
- The indented lines show which papers discuss each concept

When you're happy, let me know and I'll build the knowledge network.

---

## Core Concepts (discussed in 3+ papers)

- biodiversity (12 papers: Smith 2023, Jones 2022, ...)
- climate change (10 papers)
- species richness (8 papers)

## Supporting Concepts (1–2 papers)

- trophic cascade (2 papers)
- keystone predator (1 paper)

## Concepts I'm Unsure About (possible duplicates — your call)

- biodiversity loss ↔ biodiversity (may overlap)
- CO₂ emissions ↔ carbon dioxide (may overlap)

このファイルをユーザーに提示し、内容を確認するよう明示的に依頼してください。たとえば、次のように伝えます。

"すべての論文から抽出した概念のリストです。確認してください。名称の編集、関係のない項目の削除、気づいた不足項目の追加を行い、準備ができたらお知らせください。確認をいただくまで、ノートの作成は開始しません。"

ユーザーから明示的な確認を得るまで、フェーズ 3 に進んではいけません。


フェーズ 3:ワールドの構築

ユーザーが概念のリストを確認した後、そのリストを解析して、承認された最終的な概念の一覧を取得します(概念の項目に見えない行は無視します)。

各概念について、Obsidian ノートを1つ作成します。概念が10個以上ある場合は、10~15個ずつのバッチに分けてサブエージェントを起動します。各サブエージェントは次の作業を行います。

  • 担当する概念名のバッチを受け取ります
  • すべての _paper_data/*.json ファイルへの読み取りアクセス権を持ちます
  • 各概念に関連する知見を、概念を記載した論文だけでなく、すべての論文から探します
  • 完成したノートを <vault_output>/Concepts/ に書き込みます
ノートの構成

すべての概念ノートは、次のテンプレートに厳密に従います。

---
tags: [concept, knowledge-network]
aliases: []
---

# <Concept Name>

<A 2–3 sentence academic definition of this concept, written in your own words. This sets the stage — no citations needed here. Be precise and accurate.>

## <Thematic Section 1>

- <Atomic sentence with [[related concept]] linked inline where it appears.> [[CitationKey]]
- <Atomic sentence linking [[another concept]] where meaningful.> [[CitationKey]]

## <Thematic Section 2>

- <Atomic sentence.> [[CitationKey]]

## Related Concepts

- [[concept-a]] — <5–10 words explaining how it relates to this concept>
- [[concept-b]] — <5–10 words explaining how it relates to this concept>
- [[concept-c]] — <5–10 words explaining how it relates to this concept>
Wikiリンクの規則

これらは Obsidian の Wikiリンクです。承認済みのリストにある概念名と完全に一致させてください(Obsidian では大文字と小文字が区別されませんが、一貫性を保ってください)。

  • 概念リンク:[[biodiversity]]、[[climate change]]、[[habitat fragmentation]]
    • 意味のある形で原子的な文に概念が現れる場合は、文中に概念を組み込んでリンクします。リンクを別途追加するのではなく、文中の単語や語句を置き換えてください
    • 承認済みの概念リストにある概念のみをリンクしてください。リンクを独自に作成してはいけません
    • ページ下部の「関連概念」セクションにも記載します
  • 引用リンク:[[Smith 2023]] — 必ず原子的な文の末尾に、ピリオドの後の独立した角括弧内に記載します
    • 形式:文のテキスト。 [[CitationKey]]
    • 引用を文中に埋め込んではいけません
原子的な文の規則

原子的な文とは、1つの出典に帰属する、検証可能な主張を1つだけ述べる文です。次の条件を満たす必要があります。

  • 主張を1つだけ述べます
  • 具体的な内容にします。可能な場合は定量的にし、曖昧な表現は避けます
  • 学術的な言葉遣いにします。口語表現は使いません
  • 1~2文以内にします(分割できない場合に限り、2文になることがあります)
  • 背景として引用された文献ではなく、論文の独自の知見に基づきます
  • 主張に承認済みリストの概念が含まれる場合は、インラインの Wikiリンクを付けます。文中の用語を置き換えてください。例:[[Habitat fragmentation]] reduces [[species richness]] in old-growth temperate forests. [[Pereira 2022]]
  • 文中に承認済みの概念が自然に含まれない場合は、インラインリンクは不要です。無理にリンクを付けてはいけません
関連概念のルール

「関連概念」セクションでは、次の要件を満たす必要があります。

  • このノートの概念と意味のあるつながりがある、承認済みの概念をすべて列挙する
  • 箇条書きで、1 行に 1 概念を記載する:- [[concept]] — <relation phrase>
  • 関係を示す語句は5~10 語とし、具体的なつながりを説明します。リンク先の概念を一般的に説明するのではなく、この概念との関係を示してください
  • 良い例:
    • - [[poleward shift]] — most range shifts move poleward specifically
    • - [[habitat fragmentation]] — reduces corridors needed for range expansion
    • - [[species richness]] — declines as ranges contract under warming
  • 悪い例(曖昧すぎる、または概念の定義にすぎない):
    • - [[poleward shift]] — a type of range shift ✗
    • - [[habitat fragmentation]] — fragmentation of natural habitats ✗
テーマ別セクション

各ノートでは、1 つの文につき 1 つの主張となる文を、2~5 個のテーマ別セクションに分けてください。概念に自然に合う見出しを選びます。適切な例:世界的傾向、メカニズム、測定と指標、地域的パターン、生態学的影響、政策への示唆、方法論上の考慮事項、介入と再生、要因、他の要因との関係。

すべてのノートで同じセクションを使う必要はありません。内容に応じて選んでください。

網羅性の要件

各概念ノートには、(入手可能な場合)少なくとも2 本の異なる論文から、1 つの文につき 1 つの主張となる文を3 文以上含めてください。概念が 1 本の論文でしか扱われていない場合は、該当する内容を記載し、コールアウトでその旨を示してください。

> [!note] Limited sources
> This concept is currently documented from a single paper. Consider adding more literature.

フェーズ 4:論文のスタブノート

論文ごとに <vault_output>/Papers/<CitationKey>.md にノートを 1 つ作成します。

---
tags: [paper]
title: "<Full paper title>"
authors: [<comma-separated author list>]
year: <year>
citation_key: <CitationKey>
---

# [[<CitationKey>.pdf|<Full paper title>]]

> [!abstract]
> <Abstract text>

## Key Concepts

[[concept-a]] | [[concept-b]] | [[concept-c]]

## Main Contributions

- <One atomic sentence summarising each major finding from this paper>
- <Another finding>

「Key Concepts」の行には、この論文が扱っている承認済み概念リスト内の概念をすべて記載してください。


品質チェック

完了を宣言する前に、次の点を確認してください。

  1. すべての概念ノートに、1 つの文につき 1 つの主張となる文が 3 文以上ある(または「Limited sources」コールアウトがある)
  2. 1 つの文につき 1 つの主張となる文がすべて [[CitationKey]] のウィキリンクで終わっている
  3. 「Related Concepts」セクションに、一般的でない関係を示す語句を添えた項目が 2 つ以上ある
  4. すべての概念ノートで使用されている各引用キーに対して、論文のスタブノートが存在する
  5. 孤立した概念がないこと。すべての概念が、少なくとも 1 つの他のノートの「Related Concepts」セクションに記載されている

チェックに不合格の場合は、出力を提示する前に修正してください。


結果の提示

すべてのノートを書き終えたら、次の内容をユーザーに伝えてください。

  • 作成した概念ノートの総数
  • 作成した論文スタブの総数
  • 参照数の多い概念の上位 5 件(1 つの文につき 1 つの主張となる文が登場する回数)
  • スキップした PDF(スキャン画像または判読不能)
  • 承認済みリスト内で、3 文未満にとどまった概念(網羅性が限定的なもの)

例:

✅ Obsidian の保管庫に概念ノート 47 件、論文スタブ 18 件を作成しました。

関連度の高い概念: 生物多様性(34 文)、気候変動(28 文)、種の豊富さ(21 文)、生息地の分断化(19 文)、生態系機能(17 文)

スキップした PDF: jones_2019_scan.pdf(画像のみで、テキストを抽出できません)

網羅性が限定的な概念: 「keystone predator」(論文 1 本のみ、2 文)


大量の論文を扱う場合の注意

大量のコレクション(論文 30 本以上)では、抽出にかなり時間がかかることがあります。進捗をユーザーに随時伝えてください。

  • 「論文 5/30 を処理中です……」
  • 「概念の統合が完了しました。30 本の論文から 68 個の異なる概念が見つかりました」
  • 「概念ノートを並行して作成中です。バッチ 1/4 を処理しています……」

進捗を伝えることで、待ち時間を有意義に感じてもらえます。


フェーズ 5:拡張 — 既存の保管庫への新しい論文の追加

このスキルを使ってすでにナレッジネットワークを構築しており、新しい論文を 1 本以上取り込む場合は、このフェーズを使用します。

始める前に

ほかのことをする前に、必ず最初に次の警告を伝えてください。

⚠️ 作業を進める前に、Vault をバックアップしてください。 ネットワークを拡張すると、既存の概念ノートがその場で変更されます。問題が起きた場合に復元できるよう、Concepts/ フォルダーと Papers/ フォルダーを安全な場所にコピーし、準備ができたらお知らせください。

ユーザーがバックアップを作成したと確認するまで、先に進まないでください。

その後、次のことを尋ねてください。

  • 新しい PDF の保存場所
  • 既存の Vault の場所(Concepts/ フォルダーと Papers/ フォルダーのパス)

ステップ 5.1:新しい論文データを抽出する

新しい論文のみを対象にフェーズ 1(PDF 抽出)を実行し、通常どおり <workspace>/_extracted/ と <workspace>/_paper_data/ に出力します。


ステップ 5.2:概念を特定する — 新規か既存か

既存の Vault を読み込み、Concepts/ 内のすべての .md ファイルを調べて、ノートのタイトルを既存の概念リストとして収集します。

新しい論文の抽出データから概念を収集し、それぞれを次のように分類します。

  • 既存の概念 — Vault 内の既存概念と一致する(またはほぼ同義である)
  • 新しい概念 — Vault 内に実質的に存在しない

変更を加える前に、この分類をユーザーに提示してください。

Here's what I found in the new paper(s):

**Concepts already in your vault** (will be expanded with new sentences):
- biodiversity (matches existing note)
- species richness (matches existing note)
- climate change (matches existing note)

**New concepts not yet in your vault** (new notes will be created):
- thermal tolerance
- microhabitat heterogeneity

**Possible overlaps — your call:**
- "range contraction" ↔ existing "range shift" — treat as same or separate?

Shall I proceed with this plan, or would you like to adjust anything?

ユーザーが確認するまで、ファイルを変更しないでください。 ユーザーは、概念の統合、名前の変更、またはスキップを希望する場合があります。


ステップ 5.3:既存の概念ノートを更新する

新しい論文で扱われている既存の概念ごとに、Concepts/<concept>.md の概念ノートを開き、論文から新しい原子的な文を追加します。

更新時のルール:

  • 最も適切なテーマ別セクションを見つけ、新しい文をその末尾に追加します。該当する既存セクションがない場合は、新しいセクションを追加します。
  • 既存の内容は削除も変更もしません。追加のみ行います。
  • すべての原子的な文のルール(インラインの概念 Wiki リンク、末尾の引用リンク)に従います。
  • 新しい論文によって、この概念と「関連概念」セクションにまだ記載されていない概念との関係が示された場合は、関係を表す語句を添えて追加します。

ステップ 5.4:新しい概念ノートを作成する

新しい概念として分類されたものについては、フェーズ 3 と同じテンプレートとルールに従って、完全な概念ノートを生成します。関連する既存の概念への相互リンクを、新しい概念ノート内の原子的な文と「関連概念」セクションの両方に追加します。

逆方向も確認してください。新しい概念と意味のある関連がある既存の概念について、そのノートを開き、「関連概念」セクションに新しい概念を追加します。


ステップ 5.5:論文のスタブを作成する

フェーズ 4 のテンプレートに従って、新しい論文のスタブを Papers/<CitationKey>.md に作成します。


ステップ 5.6:拡張内容の概要を提示する

すべての編集が完了したら、ユーザーに明確な概要を示してください。

✅ Expansion complete.

**New paper added:** Smith 2024 — "Full title here"

**Existing concept notes updated (N):**
- [[biodiversity]] — 3 new sentences added (Results, Drivers sections)
- [[species richness]] — 2 new sentences added (Regional Patterns section)
- [[climate change]] — 1 new sentence added; also added new related concept [[thermal tolerance]]

**New concept notes created (N):**
- [[thermal tolerance]] — 4 sentences from Smith 2024
- [[microhabitat heterogeneity]] — 3 sentences from Smith 2024

**Anything worth noting:**

最後のセクションでは、目につく点があれば指摘します。たとえば、次のような点です。

  • 新しい概念が、既存の多くの概念と意外なほど強く結びついている
  • Vault 内の既存の記述と矛盾する可能性のある知見がある(例:同じ概念について相反する主張がある)
  • 新しい論文の概念がほかのネットワークとあまりつながっておらず、孤立している
  • 既存の概念ノートの文数がほかより大幅に増え、分割したほうがよい可能性がある

このセクションは簡潔かつ具体的にし、本当に目立つ点だけを記載してください。一般的な所見は含めないでください。

コメント