mcpField
S
start-my-day

start-my-day

github.com/juliye2025生産性1.8k78 回インストール6 週間前に更新
リポジトリ

start-my-day について

start-my-dayは、Obsidianで研究する人向けの論文推薦スキルです。設定した研究関心に基づいてarXiv論文を検索・評価し、推薦ノートを作成します。上位論文には既存ノートや詳細分析も関連付けます。

主な機能

  1. 01研究関心に基づくarXiv論文の絞り込み
  2. 02関連性・新しさ・人気度・品質の評価
  3. 03日次論文推薦ノートの作成
  4. 04上位論文への画像と分析レポートの追加
  5. 05既存論文ノートの索引化とリンク

活用シーン

  1. 01研究関心に合う新着論文の確認
  2. 02評価順に並んだ日次推薦の閲覧
  3. 03推薦を既存のObsidian論文ノートに接続

インストール

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

$npx skills add https://github.com/juliye2025/evil-read-arxiv --skill start-my-day

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

同梱ファイル

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

agents/
openai.yaml
scripts/
common_words.py
link_keywords.py
scan_existing_notes.py
search_arxiv.py

詳細

Language Setting / 言語設定

このスキルは中国語と英語のレポートに対応しています。言語は設定ファイルの language フィールドで指定します。

  • 中国語(デフォルト):設定ファイルで language: "zh" を指定します
  • 英語:設定ファイルで language: "en" を指定します

設定ファイルは次の場所に配置してください:$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml

言語の検出

実行開始時に設定ファイルを読み込み、言語設定を確認します。

# Resolve OBSIDIAN_VAULT_PATH if not set in the current session
# Some agent-hosted shell sessions do not source interactive shell profiles automatically
if [ -z "$OBSIDIAN_VAULT_PATH" ]; then
    [ -f "$HOME/.zshrc" ] && source "$HOME/.zshrc" 2>/dev/null || true
    [ -f "$HOME/.bash_profile" ] && source "$HOME/.bash_profile" 2>/dev/null || true
fi

# Read language from config
LANGUAGE=$(grep -E "^\s*language:" "$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml" | awk '{print $2}' | tr -d '"')

# Default to Chinese if not set
if [ -z "$LANGUAGE" ]; then
    LANGUAGE="zh"
fi

# Set note filename suffix based on language
if [ "$LANGUAGE" = "en" ]; then
    NOTE_SUFFIX="paper-recommendations"
else
    NOTE_SUFFIX="论文推荐"
fi

その後、ワークフロー全体でこの言語設定を使用します。

  • ノートを生成するときは、スクリプトに --language $LANGUAGE を渡します
  • 生成するノートでは、適切なセクション見出しを使用します

目標

ユーザーが研究日の始まりに、直近1か月と1年の非常に注目度が高く、人気があり、質の高い論文を検索し、おすすめノートを生成できるよう支援します。

ワークフロー

ワークフローの概要

このスキルでは、Python スクリプトから arXiv API を呼び出して論文を検索し、XML の結果を解析して、研究関心に基づいて選別・評価します。

ステップ1:コンテキストの収集(サイレント)

  1. 今日の日付を取得

    • 現在の日付を特定します(YYYY-MM-DD形式)
  2. 研究設定を読み込む

    • $OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml を読み込みます(ファイル名は interests であり、interest ではありません)。研究分野を取得します
    • キーワード、カテゴリ、優先度を抽出します
  3. 既存のノートをスキャンしてインデックスを作成

    • 20_Research/Papers/ ディレクトリにあるすべての .md ファイルをスキャンします
    • ノートのタイトルを抽出します(ファイル名と frontmatter の title フィールドから)
    • 後で自動リンクに使用するため、キーワードとノートのパスの対応表を作成します
    • frontmatter の title フィールドを優先し、次にファイル名を使用します

ステップ2:論文を検索

2.1 検索範囲

関連するすべてのカテゴリから、最近の論文を検索します。

  1. 検索範囲

    • scripts/search_arxiv.py を使用して arXiv を検索します
    • クエリ:研究に関連するすべての arXiv カテゴリ
    • 投稿日順に並べ替えます
    • 結果の上限:200件
  2. 選別方法

    • 研究関心の設定ファイルに基づいて論文を選別します
    • 総合推薦スコアを算出します
    • 高スコアの論文を上位10件まで残します
2.2 検索と選別の実行

scripts/search_arxiv.py スクリプトを使用して、検索、解析、選別を行います。

# 使用 Python 脚本搜索、解析和筛选 arXiv 论文
# 首先切换到 skill 目录,然后执行脚本
cd "$SKILL_DIR"
python scripts/search_arxiv.py \
  --config "$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml" \
  --output arxiv_filtered.json \
  --max-results 200 \
  --top-n 10 \
  --categories "cs.AI,cs.LG,cs.CL,cs.CV,cs.MM,cs.MA,cs.RO"

スクリプトの機能:

  1. arXiv の検索

    • arXiv API を呼び出し、指定したカテゴリの論文を検索します
    • 最新の論文を最大200件取得します
  2. XML 結果の解析

    • API が返す XML を解析します
    • ID、タイトル、著者、概要、投稿日、カテゴリを抽出します
  3. 選別とスコア付けの適用

    • 研究関心の設定ファイルに基づいて論文を選別します
    • 総合推薦スコアを算出します(関連性40%、新近性20%、人気度30%、品質10%)
    • スコア順に並べ替え、上位10件を残します

出力:

  • arxiv_filtered.json - 選別後の論文リスト(JSON 形式)
  • 各論文には以下が含まれます:
    • 論文 ID、タイトル、著者、概要
    • 投稿日、カテゴリ
    • 関連性スコア、新近性スコア、人気度スコア、品質スコア
    • 最終推薦スコア、一致した分野

ステップ3:選別結果の読み込み

3.1 JSON 結果の読み込み

arxiv_filtered.json から、選別とスコア付けが完了した論文リストを読み込みます。

# 读取筛选结果
cat arxiv_filtered.json

結果に含まれる項目:

  • total_found:検索された論文の総数
  • total_filtered:選別後の論文数
  • top_papers:高スコアの上位10件の論文。各論文には以下が含まれます:
    • 論文 ID、タイトル、著者、概要
    • 投稿日、カテゴリ
    • 関連性スコア、新近性スコア、品質スコア
    • 最終推薦スコア、一致した分野、一致したキーワード
3.2 スコアの説明

複数の観点からスコアを算出します。

推荐评分 =
  相关性评分: 40%
  新近性评分: 20%
  热门度评分: 30%
  质量评分: 10%

スコアの詳細:

  1. 関連性スコア(40%)

    • 研究関心との一致度
    • タイトルのキーワード一致:1件につき+0.5点
    • 概要のキーワード一致:1件につき+0.3点
    • カテゴリの一致:+1.0点
    • 最高スコア:約3.0
  2. 新近性スコア(20%)

    • 直近30日以内:+3点
    • 30~90日以内:+2点
    • 90~180日以内:+1点
    • 180日超:0点
  3. 人気度スコア(30%)

    • (データが利用可能な場合)引用数が100超:+3点
    • 引用数が50~100:+2点
    • 引用数が50未満:+1点
    • 引用データなし:0点
    • または、投稿日からの経過時間に基づいて推定します(直近7日以内の人気の新着論文):+2点
  4. 品質スコア(10%)

    • 概要から推定します。顕著な新規性:+3点
    • 手法が明確:+2点
    • 一般的な研究:+1点
    • または、既存ノートの品質スコアを読み込みます

最終推薦スコア = 関連性(40%) + 新近性(20%) + 人気度(30%) + 品質(10%)

ステップ4:今日のおすすめノートを生成

4.1 選別結果の読み込み

arxiv_filtered.json から、選別後の論文リストを読み込みます。

  • 高スコアの上位10件を含みます
  • 各論文の完全な情報(ID、タイトル、著者、概要、スコア、一致した分野)を含みます
4.2 おすすめノートファイルの作成
  1. おすすめノートファイルを作成

    • ファイル名(言語設定に基づく):
      • 中国語(language: "zh"):10_Daily/YYYY-MM-DD论文推荐.md
      • 英語(language: "en"):10_Daily/YYYY-MM-DD-paper-recommendations.md
    • 変数 10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md を使用します(NOTE_SUFFIX は言語検出の段階で設定済みです)
    • 以下のプロパティを必ず含めます:
      • keywords:今日おすすめする論文のキーワード(カンマ区切り。論文のタイトルと概要から抽出)
      • tags:["llm-generated", "daily-paper-recommend"]
  2. 論文を詳しく書く価値があるか確認

    • 特に読む価値のある論文:推薦スコア >= 7.5、または特におすすめする論文
    • 一般的なおすすめ論文:その他の論文
  3. 論文の既存ノートを確認

    • 20_Research/Papers/ ディレクトリを検索します
    • その論文の詳細ノートがあるか確認します
    • 既存ノートがある場合:簡潔に記載し、既存ノートを参照します
    • ノートがない場合:
      • 特に読む価値のある論文:おすすめノートに詳しい内容を記載します
      • 一般的なおすすめ論文:基本情報のみ記載します
4.2 おすすめノートの構成

ノートファイルは次の構成にします。

---
keywords: [关键词1, 关键词2, ...]
tags: ["llm-generated", "daily-paper-recommend"]
---

[具体论文推荐列表...]
4.2.1 今日の概要(論文リストの前に配置)

論文リストの前に概要セクションを追加し、今日おすすめする論文全体の傾向をまとめます。

$LANGUAGE の設定に応じて言語を選択します。

英語(language: "en"):

## Today's Overview

Today's {paper_count} recommended papers focus on **{direction1}**, **{direction2}**, and **{direction3}**.

- **Overall Trends**: {summary of research trends}
- **Quality Distribution**: Scores range from {min}-{max}, {quality assessment}.
- **Research Hotspots**:
  - **{hotspot1}**: {description}
  - **{hotspot2}**: {description}
  - **{hotspot3}**: {description}
- **Reading Suggestions**: {reading order recommendations}

中国語(language: "zh"):

## 今日概览

今日推荐的{论文数量}篇论文主要聚焦于**{主要研究方向1}**、**{主要研究方向2}**和**{主要研究方向3}**等前沿方向。

- **总体趋势**:{总结今日论文的整体研究趋势}
- **质量分布**:今日推荐的论文评分在 {最低分}-{最高分} 之间,{整体质量评价}。
- **研究热点**:
  - **{热点1}**:{简要描述}
  - **{热点2}**:{简要描述}
  - **{热点3}**:{简要描述}
- **阅读建议**:{给出阅读顺序建议}

説明:

  • 選別された上位10件の論文のタイトル、概要、スコアに基づいてまとめます
  • 共通する研究テーマと傾向を抽出します
  • 妥当な読む順番を提案します
4.2.2 全論文で統一された形式

すべての論文をスコアの高い順に並べ、統一された形式を使用します。

$LANGUAGE の設定に基づいて、ラベルの言語を選択します:

英語(language: "en"):

### [[Note_Filename|Paper Title as Displayed]]
- **Authors**: [author list]
- **Affiliation**: [institution names, extracted from paper source or arXiv page]
- **Links**: [arXiv](url) | [PDF](url)
- **Source**: arXiv
- **Note**: [[existing_note_path|short title]] or --

**One-line Summary**: [one sentence summarizing the core contribution]

**Core Contributions**:
- [contribution 1]
- [contribution 2]
- [contribution 3]

**Key Results**: [most important results from abstract]

---

中国語(language: "zh"):

### [[Note_Filename|论文标题显示名]]
- **作者**:[作者列表]
- **机构**:[机构名称,从论文源码或 arXiv 页面提取]
- **链接**:[arXiv](链接) | [PDF](链接)
- **来源**:[arXiv]
- **笔记**:[[已有笔记路径|简称]] 或 --

**一句话总结**:[一句话概括论文的核心贡献]

**核心贡献/观点**:
- [贡献点1]
- [贡献点2]
- [贡献点3]

**关键结果**:[从摘要中提取的最重要结果]

---

重要な書式ルール:

  • Wikilink では必ず display alias を使用します:[[File_Name|Display Title]]。bare [[File_Name]] は使用しないでください(アンダースコアがそのまま表示され、読みにくくなります)
  • 画像には Obsidian の wikilink 埋め込み構文を必ず使用します:![[filename.png|600]]。![alt](path%20encoded) 形式の使用は禁止です(URL エンコードは Obsidian で機能しません)
  • 所属機関情報:論文の TeX ソースコードにある \author または \affiliation フィールドから抽出します。arXiv API から取得できない場合は、ダウンロードしたソースパッケージから読み取ります
  • 「データなし」のプレースホルダーとして --- を使用しないでください:代わりに -- を使用します(ハイフン3つは Obsidian に区切り線として解析されます)
4.2.3 上位3本の論文に画像を挿入し、詳細分析を呼び出す

上位3本の論文(スコアが最も高い3本)について:

ステップ0:論文にノートがすでにあるか確認します

# 在 20_Research/Papers/ 目录中搜索已有笔记
# 搜索方式:
# 1. 按论文ID搜索(如 2602.23351)
# 2. 按论文标题搜索(模糊匹配)
# 3. 按论文标题关键词搜索

ステップ1:確認結果に基づいて処理方法を決定します

ノートがすでにある場合:

  • 新しい詳細レポートは生成しません
  • 既存ノートのパスを wikilink として使用します
  • 推薦ノートの「詳細レポート」フィールドで既存ノートを参照します
  • 画像を抽出する必要があるか確認します(images ディレクトリがない、または空の場合)
    • 画像が必要な場合:extract-paper-images を呼び出します
    • 画像がすでにある場合:既存の画像を使用します

ノートがない場合:

  • 画像を抽出するために extract-paper-images を呼び出します
  • 詳細レポートを生成するために paper-analyze を呼び出します
  • 推薦ノートに画像と詳細レポートへのリンクを追加します

ステップ2:推薦ノートに画像とリンクを挿入します

ノートがすでにある場合:

### [[已有论文名称]]
- **作者**:[作者列表]
- **机构**:[机构名称]
- **链接**:[arXiv](链接) | [PDF](链接)
- **来源**:[arXiv]
- **详细报告**:[[已有笔记路径]]
- **笔记**:已有详细分析

**一句话总结**:[一句话概括论文的核心贡献]

![[existing_image_filename.png|600]]

**核心贡献/观点**:
...

ノートがない場合:

### [[Note_Filename|Paper Title Display Name]]
- **作者**:[作者列表]
- **机构**:[机构名称]
- **链接**:[arXiv](链接) | [PDF](链接)
- **来源**:[arXiv]
- **详细报告**:[[20_Research/Papers/[domain]/[note_filename]|Short Title]] (自动生成)

**一句话总结**:[一句话概括论文的核心贡献]

![[paperID_fig1.png|600]]

**核心贡献/观点**:
...

画像形式のルール(重要!):

  • Obsidian の wikilink 埋め込み構文を必ず使用します:![[filename.png|600]]
  • Markdown の画像構文は使用禁止です:![alt](path%20with%20encoding) — URL エンコード(%20、%26)は Obsidian で機能しません
  • 画像ファイル名の例:2603.24124_fig1.png
  • Obsidian は vault 内で一致するファイル名を自動検索するため、完全なパスを書く必要はありません

詳細レポートについて:

  • レポートのパス:20_Research/Papers/[论文分类]/[note_filename].md
  • 重要:JSON の note_filename フィールドを使用して wikilink を組み立てます
  • display alias を必ず使用します:[[20_Research/Papers/[domain]/[note_filename]|Short Title]]
    • 正しい例:[[20_Research/Papers/大模型/Hypothesis-Conditioned_Query_Rewriting|Hypothesis-Conditioned Query Rewriting]]
    • 誤った例:[[20_Research/Papers/大模型/Hypothesis-Conditioned_Query_Rewriting_for_Decision-Useful_Retrieval]](アンダースコアがそのまま表示され、見栄えがよくありません)
  • 詳細レポートは paper-analyze によって自動生成されます

所属機関/Affiliation の抽出:

  • ダウンロードした arXiv ソースパッケージ(.tar.gz)内の .tex ファイルから \author と \affiliation フィールドを抽出します
  • ソースを利用できない場合は、arXiv ページの HTML から抽出します
  • それでも取得できない場合は -- と記載します(ハイフン2つを使用し、Obsidian に区切り線として解析されるハイフン3つ --- は使用しないでください)

ステップ5:キーワードを自動リンクする(任意)

推薦ノートを生成した後、既存ノートへのキーワードリンクを自動で追加します:

# 步骤1:扫描现有笔记
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
  --vault "$OBSIDIAN_VAULT_PATH" \
  --output existing_notes_index.json

# 步骤2:生成推荐笔记(正常流程)
# ... 使用 search_arxiv.py 搜索论文 ...

# 步骤3:链接关键词(新增步骤)
python scripts/link_keywords.py \
  --index existing_notes_index.json \
  --input "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md" \
  --output "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}_linked.md"

注意:

  • キーワードリンクスクリプトは、frontmatter、見出し行、コードブロックを自動でスキップします
  • 一般的な単語(and、for、model、learning など)を除外します
  • 既存の wikilink は変更せずに保持します

重要なルール

  • 検索範囲を拡大:直近1か月の論文と、直近1年間の人気論文を検索します
  • 総合推薦スコア:関連性、新しさ、人気度、品質の4つの観点を組み合わせます
  • 日付をファイル名に含める:10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md の形式を維持します(中国語:论文推荐、英語:paper-recommendations)
  • 今日の概要を追加:推薦ノートの冒頭に「## 今日の概要」セクションを追加し、今日の論文の主な研究分野、全体的な傾向、品質の分布、注目されている研究テーマ、読書の推奨事項をまとめます
  • スコア順に並べる:すべての論文を推薦スコアの高い順に並べます
  • 上位3本の特別な処理:
    • 論文名を wikilink 形式にします:[[论文名字]]
    • 1枚目の画像を自動で抽出して挿入します
    • paper-analyze を自動で呼び出して詳細レポートを生成します
    • 「詳細レポート」フィールドに wikilink を表示して関連付けます
  • その他の論文:基本情報のみを記載し、画像は挿入しません
  • すばやく確認できるようにする:ユーザーが当日の推薦内容をすばやく把握できるようにします
  • 重複を避ける:すでに推薦した論文を確認します
  • キーワードを自動リンク:
    • 推薦ノートの生成後、既存ノートを自動でスキャンします
    • テキスト内のキーワード(BLIP、CLIP など)を wikilink に置き換えます
    • 例:BLIP → [[BLIP]]
    • 既存の wikilink は変更せずに保持します
    • コードブロック内の内容は置き換えません
    • すでに wikilink が存在する内容は置き換えません(重複を防ぐため)

他の skills との違い

start-my-day(本スキル)

  • 目的:広範囲の検索から推薦論文を選び、毎日の推薦ノートを生成します
  • 検索範囲:直近1か月の論文と、直近1年間の人気または高品質の論文
  • 内容:推薦リスト
    • 冒頭に「今日の概要」を含めます:主な研究分野、全体的な傾向、品質の分布、注目されている研究テーマ、読書の推奨事項をまとめます
    • すべての論文で統一された形式を使用します
    • 上位3本を特別に処理します:
      • 論文名を wikilink 形式にします:[[论文名字]]
      • 1枚目の画像を自動で抽出して挿入します
      • paper-analyze を自動で呼び出して詳細レポートを生成します
      • 「詳細レポート」フィールドに wikilink を表示して関連付けます
  • 画像処理:上位3本から1枚目の画像を自動で抽出して挿入します。すべての論文の画像は含めません
  • 詳細レポート:上位3本は自動生成し、その他の論文は生成しません
  • 対象:ユーザーが毎日手動で実行します
  • ノートの参照:論文に既存のノートがある場合は、簡潔に記載して参照します。分析で過去のノートを参照する必要がある場合も、直接参照します

paper-analyze(詳細分析skill)

  • 目的:ユーザーが論文を1本指定し、詳しく調査します
  • 使用場面:ユーザーが読みたい論文があり、AI が整理した推薦リストに含まれていない場合
  • 内容:論文の詳細分析ノート
    • 研究課題、手法の概要、手法のアーキテクチャ、主要なイノベーション、実験結果、詳細分析、関連論文との比較など、すべての重要情報を含みます
    • 画像を豊富に活用:論文内のすべての画像(主要なアーキテクチャ図、手法の図、実験結果の図など)を使用します
  • 対象:ユーザーが論文 ID またはタイトルを指定して paper-analyze を直接呼び出します(Codex では $paper-analyze、Claude Code では /paper-analyze を使用します)
  • 重要な要件:start-my-day が整理した論文であっても、ユーザーが直接確認する論文であっても、画像を豊富に活用します

使用方法

ユーザーが「start my day」と入力したら、以下の手順を実行します:

日付パラメーターのサポート:

  • パラメーターなし:当日の論文推薦ノートを生成します
  • パラメーターあり(YYYY-MM-DD):指定した日付の論文推薦ノートを生成します
    • 例:Codex では $start-my-day 2026-02-27、Claude Code では /start-my-day 2026-02-27 を使用します

自動実行フロー

  1. 対象日付の取得

    • 引数なし:現在の日付を使用(YYYY-MM-DD形式)
    • 引数あり:指定された日付を使用
  2. 既存のノートをスキャンしてインデックスを構築

    # 扫描 vault 中现有的论文笔记
    cd "$SKILL_DIR"
    python scripts/scan_existing_notes.py \
      --vault "$OBSIDIAN_VAULT_PATH" \
      --output existing_notes_index.json
    
    • 20_Research/Papers/ ディレクトリをスキャン
    • ノートのタイトルと tags を抽出
    • キーワードとノートのパスの対応表を構築
  3. arXiv 論文の検索と絞り込み

    # 使用 Python 脚本搜索、解析和筛选 arXiv 论文
    # 首先切换到 skill 目录,然后执行脚本
    # 如果有目标日期参数(如 2026-02-21),传递给 --target-date
    cd "$SKILL_DIR"
    python scripts/search_arxiv.py \
      --config "$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml" \
      --output arxiv_filtered.json \
      --max-results 200 \
      --top-n 10 \
      --categories "cs.AI,cs.LG,cs.CL,cs.CV,cs.MM,cs.MA,cs.RO" \
      --target-date "{目标日期}"  # 如果用户指定了日期,替换为实际日期
    
  4. 絞り込み結果の読み込み

    • arxiv_filtered.json から絞り込み結果を読み込む
    • 評価スコアの高い論文を上位 10 件取得
    • 各論文には、ID、タイトル、著者、要約、スコア、該当分野が含まれます
  5. キーワードリンクを含むおすすめノートの生成

    • 10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md を作成(対象日付を使用し、NOTE_SUFFIX は言語設定に従います)
    • スコア順に並べ替え:すべての論文をおすすめスコアの高い順に並べます
    • 上位 3 件の特別処理:
      • 論文名を wikilink 形式にします:[[论文名字]]
      • 「一文要約」の後に、実際に抽出した 1 枚目の画像を挿入します
      • 「詳細レポート」フィールドに wikilink のリンク先を表示します
    • その他の論文:基本情報のみを記載し、画像は挿入しません
    • キーワードの自動リンク(重要!):
      • ノートの生成後、テキスト内のキーワードをスキャンします
      • existing_notes_index.json を使用して照合します
      • キーワードを BLIP → [[BLIP]] のように wikilink に置き換えます
      • 既存の wikilink は変更せずに保持します
      • コードブロック内の内容は置き換えません
  6. 上位 3 件の論文を詳細に分析

    # 对每篇前三论文执行以下操作
    
    # 步骤1:检查论文是否已有笔记
    # 在 20_Research/Papers/ 目录中搜索
    # - 按论文ID搜索(如 2602.23351)
    # - 按论文标题搜索(模糊匹配)
    # - 按论文标题关键词搜索(如 "Pragmatics", "Reporting Bias")
    
    # 步骤2:根据检查结果决定处理方式
    if 已有笔记:
        # 不生成新的详细报告
        # 使用已有的笔记路径
        # 只提取图片(如果没有图片的话)
    else:
        # 提取第一张图片
        调用 extract-paper-images skill,传入 [论文ID]
    
        # 生成详细分析报告
        调用 paper-analyze skill,传入 [论文ID]
    
    • ノートがすでにある場合:
      • 詳細レポートを重複して生成しません
      • 既存のノートのパスを wikilink として使用します
      • 画像を抽出する必要があるか確認します(images ディレクトリがない、または空の場合)
      • おすすめノートの「詳細レポート」フィールドから既存のノートを参照します
    • ノートがない場合:
      • 1 枚目の画像を抽出して vault に保存します
      • 詳細な論文分析レポートを生成します
      • おすすめノートに画像と詳細レポートへのリンクを追加します

一時ファイルのクリーンアップ

  • 検索中に生成された一時的な XML ファイルと JSON ファイルは削除できます
  • おすすめノートを vault に保存した後は、一時ファイルは不要です

依存関係

  • Python 3.x(検索と絞り込みスクリプトの実行に使用)
  • PyYAML(研究関心の設定ファイルの読み込みに使用)
  • ネットワーク接続(arXiv API へのアクセス)
  • 20_Research/Papers/ ディレクトリ(既存のノートのスキャンと詳細レポートの保存に使用)
  • extract-paper-images スキル(論文の画像抽出に使用)
  • paper-analyze スキル(詳細レポートの生成に使用)

スクリプトの説明

search_arxiv.py

scripts/search_arxiv.py にあり、次の機能を提供します:

  1. arXiv の検索:arXiv API を呼び出して論文を取得します
  2. XML の解析:論文情報(ID、タイトル、著者、要約など)を抽出します
  3. 論文の絞り込み:研究関心の設定ファイルに基づいて論文を絞り込みます
  4. スコアの計算:関連性、新しさ、品質などの観点を総合して評価します
  5. JSON の出力:絞り込んだ結果を arxiv_filtered.json に保存します
scan_existing_notes.py

scripts/scan_existing_notes.py にあり、次の機能を提供します:

  1. ノートディレクトリのスキャン:20_Research/Papers/ 以下のすべての .md ファイルをスキャンします
  2. ノート情報の抽出:
    • ファイルパス
    • ファイル名
    • frontmatter の title フィールド
    • tags フィールド
  3. インデックスの構築:キーワードとノートのパスの対応表を作成します
  4. JSON の出力:インデックスを existing_notes_index.json に保存します

使用方法:

cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
  --vault "$OBSIDIAN_VAULT_PATH" \
  --output existing_notes_index.json

出力形式:

{
  "notes": [
    {
      "path": "20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md",
      "filename": "BLIP_Bootstrapping-Language-Image-Pre-training.md",
      "title": "BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation",
      "title_keywords": ["BLIP", "Bootstrapping", "Language-Image", "Pre-training", "Unified", "Vision-Language", "Understanding", "Generation"],
      "tags": ["Vision-Language-Pre-training", "Multimodal-Encoder-Decoder", "Bootstrapping", "Image-Captioning", "Image-Text-Retrieval", "VQA"]
    }
  ],
  "keyword_to_notes": {
    "blip": ["20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md"],
    "bootstrapping": ["20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md"],
    "vision-language": ["20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md"]
  }
}
link_keywords.py

scripts/link_keywords.py にあり、次の機能を提供します:

  1. テキストの読み込み:処理するテキストを読み込みます
  2. ノートインデックスの読み込み:existing_notes_index.json からノートの対応情報を読み込みます
  3. キーワードの置き換え:テキスト内のキーワードを検索し、wikilink に置き換えます
    • 既存の wikilink(例:[[BLIP]])は置き換えません
    • コードブロック内の内容は置き換えません
    • 照合ルール:
      • タイトルのキーワード全体を優先して照合します
      • 次に tags 内のキーワードを照合します
      • 大文字と小文字を区別せずに照合します
      • 一般的な語(and、for、model、learning など)は除外します
      • frontmatter と見出し行はスキップします
  4. 結果の出力:処理後のテキストを出力します

使用方法:

# 首先切换到 skill 目录,然后执行脚本
cd "$SKILL_DIR"
python scripts/link_keywords.py \
  --index existing_notes_index.json \
  --input "input.txt" \
  --output "output.txt"

照合例:

原始文本:
"这篇论文使用了BLIP和CLIP作为基线方法。"

处理后:
"这篇论文使用了[[BLIP]]和[[CLIP]]作为基线方法。"

使用方法:

# 步骤1:扫描现有笔记
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
  --vault "$OBSIDIAN_VAULT_PATH" \
  --output existing_notes_index.json

# 步骤2:生成推荐笔记(正常流程)
# ... 使用 search_arxiv.py 搜索论文 ...

# 步骤3:链接关键词(新增步骤)
python scripts/link_keywords.py \
  --index existing_notes_index.json \
  --input "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md" \
  --output "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}_linked.md"

主な特長:

  • スマート照合:大文字と小文字を区別せずに照合し、日本語環境に対応します
  • 既存リンクの保護:既存の wikilink は置き換えません
  • コードの汚染を回避:コードブロックとインラインコード内の内容は置き換えません
  • パスのエンコード:UTF-8 エンコードを使用し、日本語のパスを正しく扱います
  • 対象外領域のスキップ:frontmatter、見出し行、コードブロックは処理しません
キーワードリンクの実装(新規!)

機能の概要: 日次おすすめノートの生成後、既存のノートを自動でスキャンし、テキスト内のキーワード(BLIP、CLIP など)を wikilink(例:[[BLIP]])に置き換えます。

実行フロー:

  1. 既存のノートをスキャン:20_Research/Papers/ ディレクトリをスキャンします

    • ノートの frontmatter(title、tags)を抽出します
    • タイトルからキーワードを抽出します(区切り文字と一般的な接辞に基づきます)
    • tags からキーワードを抽出します(ハイフンで分割します)
    • キーワードとノートのパスの対応表を構築します
  2. おすすめノートの生成:通常どおり、おすすめノートの内容を生成します

  3. キーワードのリンク化:生成したノートを処理します

    • テキスト内のキーワードを検索します
    • 見つかったキーワードを wikilink に置き換えます
    • 既存の wikilink は保持します
    • コードブロックとインラインコード内の内容は置き換えません

使用方法:

# 步骤1:扫描现有笔记
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
  --vault "$OBSIDIAN_VAULT_PATH" \
  --output existing_notes_index.json

# 步骤2:生成推荐笔记(正常流程)
# ... 使用 search_arxiv.py 搜索论文 ...

# 步骤3:链接关键词(新增步骤)
python scripts/link_keywords.py \
  --index existing_notes_index.json \
  --input "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md" \
  --output "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}_linked.md"

主な特長:

  • スマート照合:大文字と小文字を区別せずに照合し、日本語環境に対応します
  • 既存リンクの保護:既存の wikilink は置き換えません
  • コードの汚染を回避:コードブロックとインラインコード内の内容は置き換えません
  • パスのエンコード:UTF-8 エンコードを使用し、日本語のパスを正しく扱います

コメント