# 論文データベース共通処理 ## 1. 役割 このプロジェクトはPDFファイルそのものを保持しない。 PDFは`config.py`の`CONFIG.path.pdf_root`で指定された外部ディレクトリに 保存されている。 `papers.db`を唯一のマスターデータベースとする。 `papers.org`は閲覧・検索・レビュー用であり、マスターデータではない。 分野名、カテゴリ、要約観点、relevance基準は`config.py`の `CONFIG.domain`を唯一の定義元とする。 ## 2. 処理前に必ず行うこと 1. プロジェクトの`config.py`を読む。 2. `CONFIG`を読み、処理条件と分野設定を確認する。 3. 処理対象は`publish.py`が`tmp/text/`へ準備する。 4. `tmp/text/`にない論文は処理しない。 5. 設定不足や存在しないパスがあれば処理を開始しない。 ## 3. TASK=process_new_papers AIが行う処理は、`tmp/text/`の解析とJSON生成までとする。 1. `tmp/text/paper-*.txt`だけを処理対象とする。 2. 各テキスト先頭の`PDF_PATH`をJSONの`pdf_path`に使用する。 3. 書誌情報、要約、キーワード、分類、Webリンクを抽出する。 4. 各論文について`tmp/paper-*.json`を生成する。 5. 作成したJSONファイルと処理結果を報告する。 原則として元PDFは直接読まない。次の場合のみ、`PDF_PATH`に 記載された1ファイルを参照してよい。 - `PDF_TEXT_EMPTY`が`yes` - `TEXT_INSUFFICIENT`が`yes` - テキストが文字化けしている - タイトル、著者、発行年、要約を確認できない 他のPDFやディレクトリは探索しない。 AIは次を実行しない。 - DB登録スクリプト - DB検証スクリプト - Org出力スクリプト - `papers.db`の直接更新 JSON生成後のDB登録、検証、Org出力は`publish.py`が実行する。 ## 4. PDFパス `papers.db`の`pdf_path`には、`CONFIG.path.pdf_root`からの 相対パスだけを保存する。 絶対パスは保存しない。PDFは削除、移動、改名しない。 ## 5. 抽出項目 必須: - title - authors - first_author - year - journal - doi - pdf_path 可能なら: - volume - issue - pages - publisher - article_type - language - abstract - ORCID - affiliation AIが付与: - summary_ja - keywords - category - relevance - priority ## 6. JSONフォーマット ```json { "doi": null, "title": "", "authors": [ { "name": "", "orcid": null, "affiliation": null, "is_corresponding": false } ], "first_author": "", "year": null, "journal": "", "volume": null, "issue": null, "pages": null, "publisher": null, "article_type": "journal article", "language": "en", "abstract": null, "summary_ja": "", "keywords": [], "category": "Other", "relevance": 3, "priority": "C", "pdf_path": "", "source": "local PDF", "landing_url": null, "pdf_url": null, "url_source": "unknown", "access_status": "unknown", "url_checked_at": null } ``` ### authors `authors`は必ず配列とする。複数著者は論文中の順番で並べる。 取得できない場合は、`name`を`unknown`とした要素を1件入れる。 ### first_author `authors`配列の先頭の`name`と一致させる。 著者不明の場合は`unknown`とする。 ### keywords 必ず文字列の配列とする。取得できない場合は空配列とする。 ### category `config.py`の`CONFIG.domain.categories`から、最も適切なものを 1つ選択する。該当するカテゴリがない場合は `CONFIG.domain.default_category`を使用する。 ### DOI - 推測しない。 - 小文字化する。 - `https://doi.org/`などの接頭辞を除去する。 - 不明な場合は`null`とする。 ### year 整数または`null`とする。 ### article_type 例: - journal article - review - report - conference paper - book chapter - other ## 7. Web上の論文リンク DOIがある場合、`landing_url`は`https://doi.org/{doi}`とする。 PDF URLは推測しない。実際に公開されていることを確認できた場合のみ `pdf_url`へ保存する。 `url_source`の例: - doi - crossref - unpaywall - publisher - institutional_repository - government_repository - manual - unknown `access_status`: - open - restricted - unknown ## 8. 日本語要約 `CONFIG.domain.summary_length_ja`を目安とする。 `CONFIG.domain.summary_focus`に記載された観点を優先する。 本文から確認できないことは推測しない。 ## 9. RelevanceとPriority `relevance`は0から5の整数とする。 判断基準は`CONFIG.domain.relevance_criteria`を使用する。 Priorityは次の対応に固定する。 - A: relevance=5 - B: relevance=4 - C: relevance=3 - D: relevance=0から2 ## 10. JSONの妥当性 次を厳守する。 - `authors`: 空でない配列 - `keywords`: 配列 - `year`: 整数または`null` - `doi`: 文字列または`null` - `category`: `CONFIG.domain.categories`のいずれか - `relevance`: 0から5の整数 - `priority`: A、B、C、Dのいずれか - `is_corresponding`: 真偽値 - `pdf_path`: PDFルートからの相対パス ## 11. 禁止事項 - `papers.db`の削除 - 場当たり的なスキーマ変更 - PDFの削除、移動、改名 - DOIや論文内容の推測 - Orgをマスターとして扱う - 人が入力したメモの削除 - `authors`や`keywords`を文字列として出力すること - `pdf_url`を推測で生成すること