ai-coding-mines목차GitHub

한글/CJK 부분일치는 짧은 단어가 긴 단어를 삼킨다

Python · DB

증상

필터에 등록한 짧은 한글 토큰이 무관한 긴 단어를 삼킨다.

마블마블링 · 쇼핑 · 코브라 ⊂ 완구 상품명.

원인 (트레이드오프)

해법 (예외 방식)

경계 규칙을 바꾸지 않고 정탐 보호 예외를 둔다: term의 모든 출현이 예외 단어 span 안에 갇히면 무시, 예외 밖에도 있으면 진짜 히트. 연접 정탐(몽클레르패딩)은 그대로 살아남는다.

예외 추가는 목록에 한 줄이면 되고, 매칭 규칙 자체는 건드리지 않는다.

첫 매치 우선 규칙표에서는 일반 패턴이 복합어를 삼킨다

영문 상품명에서 품목을 뽑아 한글 종류어를 붙이는 규칙표를 돌렸다. pen → 만년필Tactical Pen을 먹어 택티컬펜이 만년필이 됐고, mount → 거치대Rail-mounted를 먹어 레일 장착형 제품이 거치대가 됐다. 같은 삼킴이 방향만 다르다 — 위는 짧은 토큰이 긴 단어를, 여기는 일반 패턴이 복합어를 삼킨다.

구체적 패턴을 일반 패턴 앞에 둔다. 첫 매치가 이기는 표에서는 순서가 곧 우선순위다. 표에 항목을 추가할 때 "이 패턴이 삼키는 기존 항목이 있나"를 먼저 본다.