Files
2026-08-15 23:43:07 +09:00

4.3 KiB

Paper Monitor → Joplin

자동차 레이더 관련 신규 논문을 IEEE Xplore, Semantic Scholar, Crossref, Google Scholar Alert에서 수집하고 DOI/제목 기준으로 중복 제거한 뒤 Markdown 표와 Joplin note로 만드는 프로젝트입니다.

빠른 시작

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 .

환경변수에 필요한 키를 설정합니다.

IEEE_API_KEY=...
SEMANTIC_SCHOLAR_API_KEY=...
CROSSREF_MAILTO=you@example.com
JOPLIN_TOKEN=...

실행:

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로 켜고 아래 변수를 설정합니다.

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을 발급한 뒤:

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입니다.

ai:
  enabled: true
  api_key_env: OPENAI_API_KEY
  model: gpt-5-mini
  max_papers_per_run: 30

AI 호출이 실패해도 keyword 기반 결과로 계속 진행됩니다.

Docker / Synology Container Manager

cp config.example.yaml config.yaml
cp .env.example .env
docker compose build
docker compose run --rm paper-monitor

매일 06:00 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로 확인하세요.

결과 형식

| 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를 확인하는 것을 권장합니다.

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 등을 사용하세요.