From c2bed9102a805288cc246c184b829246bef6c69b Mon Sep 17 00:00:00 2001 From: kyu Date: Sat, 6 Jun 2026 15:06:38 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=89=B4=EC=8A=A4=20=EC=86=8C=EC=8A=A4?= =?UTF-8?q?=2027=E2=86=9237=20=ED=99=95=EC=9E=A5=20+=20=EC=A2=85=EB=AA=A9?= =?UTF-8?q?=EB=AA=85=20=EC=98=A4=ED=83=90=20=EB=A7=A5=EB=9D=BD=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [소스 다변화] 라이브 검증(200+한글기사)된 10개 피드 추가: 연합인포맥스(채권·FX)·매경증권·한경 글로벌마켓·연합뉴스 산업·데일리안· ZDNet코리아·테크M·전자신문 반도체·오토헤럴드·철강금속신문. 마켓/FX·IT·반도체·자동차·철강 버티컬로 커버리지 확대. 검증: 37소스 라이브 크롤 360건, fetch 에러 0. [종목 귀속 정확성] extract_stocks의 한글명 부분일치(text.count) 오탐 차단. 일상어와 겹치는 모호 종목명 19개(대상·동양·동서·미래 등)는 본문에 주식 맥락 토큰(주가·실적·영업이익·코스피·㈜·반도체 등)이 있을 때만 인정. 보령·풍산·세방 등 고유명은 제외(누락 방지). 검증: '지원 대상으로'→무매칭, '대상 영업이익 증가'→대상 인정, 삼성전자 영향없음. 두 서비스 재빌드·재기동·라이브검증 완료. Co-Authored-By: Claude Opus 4.8 (1M context) --- bareunaapi/main.py | 18 ++++++++++++++++++ news-collector/main.py | 11 +++++++++++ 2 files changed, 29 insertions(+) diff --git a/bareunaapi/main.py b/bareunaapi/main.py index a798870..38373a6 100644 --- a/bareunaapi/main.py +++ b/bareunaapi/main.py @@ -125,11 +125,29 @@ def extract_morphemes(text): except: return [w for w in text.split() if len(w) >= 2 and w not in STOPWORDS] +# 일상어와 철자가 겹쳐 오탐이 잦은 짧은 종목명 — 본문에 주식 맥락 토큰이 같이 있을 때만 인정. +# (예: "지원 대상으로 선정"→대상㈜ 오탐, "동양적 가치관"→동양 오탐 차단) +# 보령·대덕·풍산·세방처럼 일상어로 거의 안 쓰이는 고유 종목명은 넣지 않음(오히려 누락 유발). +AMBIGUOUS_NAMES = { + "대상", "동양", "동서", "미래", "대한", "고려", "한일", "서울", "부산", + "동국", "유성", "남성", "영원", "태양", "대성", "백산", "신성", "한창", "우성", +} +_STOCK_CTX = ( + "주가", "주식", "증시", "상장", "상폐", "공시", "영업이익", "매출", "순이익", + "실적", "수주", "계약", "배당", "자사주", "유상증자", "무상증자", "목표주가", + "코스피", "코스닥", "급등", "급락", "상한가", "하한가", "㈜", "그룹", "지주", + "전자", "화학", "제약", "바이오", "반도체", "자동차", "건설", "증권", "철강", +) + def extract_stocks(text): + has_ctx = any(m in text for m in _STOCK_CTX) found = {} for name, code in state.stock_map.items(): if len(name) < 2: continue # 1글자 종목명은 오탐 과다 → 제외 + # 모호 종목명은 주식 맥락 토큰이 본문에 있을 때만 인정 (일상어 오탐 차단) + if name in AMBIGUOUS_NAMES and not has_ctx: + continue if name.isascii(): # 영문/숫자 약칭(KT·SK·DB 등)은 단어경계 강제 (SKT·KTX 오탐 차단) pat = rf"(? str: