feat: 뉴스 소스 27→37 확장 + 종목명 오탐 맥락게이트
[소스 다변화] 라이브 검증(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) <noreply@anthropic.com>
This commit is contained in:
@@ -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"(?<![A-Za-z0-9]){re.escape(name)}(?![A-Za-z0-9])"
|
||||
|
||||
Reference in New Issue
Block a user