Initial commit

This commit is contained in:
2026-07-30 10:51:43 +09:00
commit 9e3b3ddc29
23 changed files with 4705 additions and 0 deletions
+237
View File
@@ -0,0 +1,237 @@
# 論文データベース共通処理
## 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`を推測で生成すること