2026년 4월 11일 · 수집 품질 개선 · 지역 태그 · YouTube 감성 정확도 향상
경로에 숫자가 없고 슬래시로 끝나는 URL → 기사 ID 없는 목록 페이지로 판단하여 차단
기존: Naver/Kakao API description만으로 기사나열 탐지 (description이 깨끗하면 통과)
변경: 크롤링 본문에서도 isAggregationPost() 재확인
탐지 기준 (기존과 동일):
\d+개의 관련뉴스 패턴 2회 이상 → 네이버 뉴스 나열형/news/cate/ · articleList · ?cid= · &cid= ·
/section/ · type=list · 숫자없는 2단계+ 경로/
· namu.wiki · wikipedia.org · 우만위키 제목 패턴
광역 단위(대전시, 전남) 제외. 시·군 단위만 포함.
충남 (15개)
광주전남 (23개)
대전 (2개)
오늘의 뉴스 섹션 하단 → 📍 지역별 반응 (최근 14일) 패널
GET /api/region-stats?candidateId=N&days=14영상: "이병학 후보, 전교조 교육감이 8년간 망친 충남교육을 살리겠다"
→ KNU가 "망친" 키워드로 -0.8 판정. 하지만 이는 후보 자신의 공약 발언입니다.
뉴스/블로그와 분리된 YouTube 전용 판단 기준 적용
caption 없는 영상: ±0.7 미만이면 KNU 단독 판단 대신 Gemini 2차 검토로 전환
| 파일 | 변경 |
|---|---|
| collector/RegionDictionary.kt | 신규 — 시·군 지역 사전 |
| db/migration/V14__add_region_tag.sql | 신규 — region_tag 컬럼 |
| collector/CollectorNoiseFilter.kt | 카테고리 URL 휴리스틱 추가 |
| collector/Naver·KakaoBlogCollector.kt | post-crawl 기사나열 재탐지 + region 태그 |
| collector/Naver·KakaoNewsCollector.kt | region 태그 |
| collector/Naver·KakaoCafeCollector.kt | region 태그 |
| vo/NewsArticle·BlogPost·CafePost.kt | regionTag 필드 추가 |
| analysis/SentimentPipeline.kt | YouTube 임계값 확대 (±0.7) |
| analysis/ClaudeSentimentService.kt | YouTube 전용 Gemini 프롬프트 추가 |
| controller/DashboardController.kt | /api/region-stats 엔드포인트 추가 |
| templates/dashboard.html | 지역별 반응 패널 + 오늘의 뉴스 5개 제한 해제 + 부정 댓글 표시 |