fix: 수집 필터 완화 — 영문 RSS 살리기 + 코너 자동배정 + 클릭베이트 완화
- 영문 RSS(카테고리 지정됨)에 한국관련성 기본 10점 부여 (즉시폐기 방지) - korean_relevance 키워드에 AI/GPT/Apple/Netflix 등 글로벌 키워드 추가 - 키워드 매칭을 case-insensitive로 변경 - RSS 카테고리를 corner로 직접 배정 (쉬운세상 대신 실제 라벨) - 클릭베이트 필터에서 충격/대박/레전드/역대급 제거 (TV뉴스 과다 필터링) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -95,7 +95,7 @@ def calc_freshness_score(published_at: datetime | None, max_score: int = 20) ->
|
||||
return int(max_score * ratio)
|
||||
|
||||
|
||||
def calc_korean_relevance(text: str, rules: dict) -> int:
|
||||
def calc_korean_relevance(text: str, rules: dict, rss_category: str = '') -> int:
|
||||
"""한국 독자 관련성 점수"""
|
||||
max_score = rules['scoring']['korean_relevance']['max']
|
||||
keywords = rules['scoring']['korean_relevance']['keywords']
|
||||
@@ -107,11 +107,14 @@ def calc_korean_relevance(text: str, rules: dict) -> int:
|
||||
base = 15 # 한국어 텍스트면 기본 15점
|
||||
elif korean_ratio >= 0.05:
|
||||
base = 8
|
||||
elif rss_category:
|
||||
# RSS 카테고리가 지정된 영문 소스는 큐레이션된 것이므로 기본점수 부여
|
||||
base = 10
|
||||
else:
|
||||
base = 0
|
||||
|
||||
# 브랜드/지역 키워드 보너스
|
||||
matched = sum(1 for kw in keywords if kw in text)
|
||||
matched = sum(1 for kw in keywords if kw.lower() in text.lower())
|
||||
bonus = min(matched * 5, max_score - base)
|
||||
|
||||
return min(base + bonus, max_score)
|
||||
@@ -199,7 +202,11 @@ def apply_discard_rules(item: dict, rules: dict, published_titles: list[str]) ->
|
||||
|
||||
|
||||
def assign_corner(item: dict, topic_type: str) -> str:
|
||||
"""글감에 코너 배정"""
|
||||
"""글감에 코너 배정 — RSS 카테고리가 있으면 우선 사용"""
|
||||
rss_cat = item.get('_rss_category', '')
|
||||
if rss_cat:
|
||||
return rss_cat
|
||||
|
||||
title = item.get('topic', '').lower()
|
||||
source = item.get('source', 'rss').lower()
|
||||
|
||||
@@ -227,7 +234,7 @@ def calculate_quality_score(item: dict, rules: dict) -> int:
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
kr_score = calc_korean_relevance(text, rules)
|
||||
kr_score = calc_korean_relevance(text, rules, rss_category=item.get('_rss_category', ''))
|
||||
fresh_score = calc_freshness_score(pub_at)
|
||||
# search_demand: pytrends 연동 후 실제값 사용 (RSS 기본값 12)
|
||||
search_score = item.get('search_demand_score', 12)
|
||||
@@ -389,6 +396,7 @@ def collect_rss_feeds(sources_cfg: dict) -> list[dict]:
|
||||
'search_demand_score': 8,
|
||||
'topic_type': 'trending',
|
||||
'_trust_override': trust,
|
||||
'_rss_category': feed_cfg.get('category', ''),
|
||||
})
|
||||
except Exception as e:
|
||||
logger.warning(f"RSS 수집 실패 ({url}): {e}")
|
||||
|
||||
Reference in New Issue
Block a user