First Commit
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
# Paper Monitor → Joplin
|
||||
|
||||
자동차 레이더 관련 신규 논문을 IEEE Xplore, Semantic Scholar, Crossref, Google Scholar Alert에서 수집하고 DOI/제목 기준으로 중복 제거한 뒤 Markdown 표와 Joplin note로 만드는 프로젝트입니다.
|
||||
|
||||
## 빠른 시작
|
||||
|
||||
```bash
|
||||
cd paper-monitor
|
||||
cp config.example.yaml config.yaml
|
||||
cp .env.example .env
|
||||
python -m venv .venv
|
||||
# Linux/macOS: source .venv/bin/activate
|
||||
# Windows: .venv\Scripts\activate
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
환경변수에 필요한 키를 설정합니다.
|
||||
|
||||
```text
|
||||
IEEE_API_KEY=...
|
||||
SEMANTIC_SCHOLAR_API_KEY=...
|
||||
CROSSREF_MAILTO=you@example.com
|
||||
JOPLIN_TOKEN=...
|
||||
```
|
||||
|
||||
실행:
|
||||
|
||||
```bash
|
||||
python -m paper_monitor --config config.yaml --dry-run
|
||||
python -m paper_monitor --config config.yaml
|
||||
```
|
||||
|
||||
`--dry-run`은 Joplin 쓰기만 생략합니다. SQLite와 Markdown 생성은 수행합니다.
|
||||
|
||||
## 동작
|
||||
|
||||
1. `config.yaml`의 각 검색어를 소스별로 조회
|
||||
2. 최근 `lookback_days` 필터
|
||||
3. DOI 우선, DOI 없으면 normalized-title hash로 중복 제거
|
||||
4. category와 relevance 1~5 계산
|
||||
5. 선택적으로 OpenAI API로 한국어 요약/relevance/category 보강
|
||||
6. `data/papers.db`에 이미 본 논문 저장
|
||||
7. 처음 발견한 논문만 `data/outbox/*.md`에 출력
|
||||
8. Joplin Data API가 사용 가능하면 `Research/Radar Papers` note 자동 생성/갱신
|
||||
|
||||
## Google Scholar
|
||||
|
||||
Scholar 검색 결과 HTML을 직접 scraping하지 않습니다. Google Scholar Alert를 Gmail로 받은 뒤 IMAP으로 읽습니다. `google_scholar_alert.enabled: true`로 켜고 아래 변수를 설정합니다.
|
||||
|
||||
```text
|
||||
GMAIL_ADDRESS=...
|
||||
GMAIL_APP_PASSWORD=...
|
||||
```
|
||||
|
||||
Google은 일반 계정 비밀번호를 IMAP 클라이언트에 직접 공유하는 방식을 권장하지 않습니다. 개인 계정에서 사용할 수 있는 경우 2단계 인증 + App Password를 쓰거나, 장기 운영에서는 Gmail OAuth/Gmail API로 collector를 교체하는 편이 좋습니다.
|
||||
|
||||
## Joplin
|
||||
|
||||
기본 출력은 Joplin Data API입니다. Joplin Desktop에서 Web Clipper service를 켜고 token을 발급한 뒤:
|
||||
|
||||
```yaml
|
||||
joplin:
|
||||
enabled: true
|
||||
base_url: http://127.0.0.1:41184
|
||||
token_env: JOPLIN_TOKEN
|
||||
```
|
||||
|
||||
Joplin API가 실패해도 Markdown은 항상 `data/outbox`에 남습니다.
|
||||
|
||||
### NAS에서 주의
|
||||
|
||||
NAS Docker 내부의 `127.0.0.1:41184`는 Windows PC가 아니라 NAS 컨테이너 자신입니다. 따라서 가장 간단한 1차 구성은 **Windows Task Scheduler + Joplin Desktop/Web Clipper + 이 프로그램**입니다. 논문 수집만 NAS에서 돌리고 Markdown을 NAS에 보관하는 것도 가능합니다.
|
||||
|
||||
Joplin 공식 Terminal 앱은 WebDAV sync와 cron 실행을 지원하므로, 향후 완전 NAS-only 구성으로 바꿀 때 사용할 수 있습니다.
|
||||
|
||||
## AI 요약
|
||||
|
||||
기본은 off입니다.
|
||||
|
||||
```yaml
|
||||
ai:
|
||||
enabled: true
|
||||
api_key_env: OPENAI_API_KEY
|
||||
model: gpt-5-mini
|
||||
max_papers_per_run: 30
|
||||
```
|
||||
|
||||
AI 호출이 실패해도 keyword 기반 결과로 계속 진행됩니다.
|
||||
|
||||
## Docker / Synology Container Manager
|
||||
|
||||
```bash
|
||||
cp config.example.yaml config.yaml
|
||||
cp .env.example .env
|
||||
docker compose build
|
||||
docker compose run --rm paper-monitor
|
||||
```
|
||||
|
||||
매일 06:00 cron 예:
|
||||
|
||||
```cron
|
||||
0 6 * * * cd /volume1/docker/paper-monitor && /usr/bin/docker compose run --rm paper-monitor >> ./data/cron.log 2>&1
|
||||
```
|
||||
|
||||
Synology Task Scheduler에서도 같은 명령을 User-defined script로 등록할 수 있습니다. 실제 docker 경로는 NAS에서 `which docker`로 확인하세요.
|
||||
|
||||
## 결과 형식
|
||||
|
||||
```markdown
|
||||
| Relevance | Category | Paper | Authors | Venue | Date | Citations | Source |
|
||||
|---|---|---|---|---|---|---:|---|
|
||||
| ★★★★★ | Imaging Radar, MIMO | [Paper title](...) | ... | IEEE TAP | 2026-08-11 | 2 | IEEE Xplore |
|
||||
```
|
||||
|
||||
표 아래에 논문별 DOI, 링크, abstract excerpt 또는 AI summary가 추가됩니다.
|
||||
|
||||
## 권장 초기 설정
|
||||
|
||||
처음 1~2주는 AI와 Scholar Alert를 끄고 IEEE + Semantic Scholar + Crossref만 사용해 noise를 확인하는 것을 권장합니다.
|
||||
|
||||
```yaml
|
||||
app:
|
||||
lookback_days: 14
|
||||
min_relevance: 2
|
||||
ai:
|
||||
enabled: false
|
||||
sources:
|
||||
google_scholar_alert:
|
||||
enabled: false
|
||||
```
|
||||
|
||||
그 후 `queries`, `categories`, `relevance_terms`를 본인 관심 분야에 맞게 조정하면 됩니다.
|
||||
|
||||
## 보안
|
||||
|
||||
API key, Gmail App Password, Joplin token은 Git에 커밋하지 마세요. 환경변수/Docker secret 등을 사용하세요.
|
||||
Reference in New Issue
Block a user