diff --git a/docs/superpowers/plans/2026-05-22-korean-trigram-tokenizer.md b/docs/superpowers/plans/2026-05-22-korean-trigram-tokenizer.md index 55bca25..70b5690 100644 --- a/docs/superpowers/plans/2026-05-22-korean-trigram-tokenizer.md +++ b/docs/superpowers/plans/2026-05-22-korean-trigram-tokenizer.md @@ -142,7 +142,13 @@ INSERT INTO chunks_fts(chunk_id, doc_id, heading_path, text) - Modify: `crates/kebab-app/tests/search_korean.rs` (회귀 핀 + multi-token assert + fixture 통합) - Update: lexical BM25 snapshot (A1 Step 3 위치) -- [ ] **Step 0: 한국어 fixture 도입 (Gemini round 3 medium)** — 도그푸딩에 사용한 `/build/cache/dogfood-p10b/` 한국어 위키 문서 중 대표적인 것 (예: `hash-table.md`) 을 `fixtures/search/korean/` 으로 복사 + git add. 위키 문서가 CC-BY 등 외부 라이선스라면 `fixtures/search/korean/LICENSE` 에 출처·라이선스 표기 같이 commit. 통합 테스트가 이 fixture 를 ingest 해 재현성 확보. +- [x] **Step 0: 한국어 fixture 도입 (Gemini round 3 medium)** — 도그푸딩 실 문서 (`/build/cache/dogfood-p10b/workspace/docs/hash-table.md`, 한국어 위키 mediawiki HTML 출력 4512줄, CC-BY-SA) 는 크기·라이선스 부담으로 직접 commit 회피. 대신 도그푸딩 query 들 (`충돌은`/`해시 충돌`/`시 충`/`해시충`/`충돌`) 을 모두 cover 하는 **합성 fixture** `fixtures/search/korean/hash-table.md` 작성 + commit. 검증 query 별 기대 동작: + - raw `MATCH '충돌은'` → hit (`해시 충돌은 발생한다` 가 원문에 있음) + - quoted `MATCH '"해시 충돌"'` → hit (whole phrase) + - quoted `MATCH '"시 충"'` → hit (phrase) + - raw `MATCH '해시충'` → 0-hit (원문에 공백 없는 `해시충` 연속 없음) + - raw `MATCH '충돌'` (2자) → 0-hit (trigram 구조) + 실 위키 문서 fixture 가 필요한 후속 검증은 별도 task 로 deferral. - [ ] **Step 1: 한국어 trigram 매칭 테스트 (실패 확인)** — fixture chunk text `"해시 충돌은 키와 값을 매핑할 때 발생한다"` (V007 적용 store). Codex sqlite 3.45.1 검증 기준 동작: - raw `MATCH '충돌은'` (공백 없는 3자 연속 substring) → hit. ✓ diff --git a/fixtures/search/korean/hash-table.md b/fixtures/search/korean/hash-table.md new file mode 100644 index 0000000..b546fec --- /dev/null +++ b/fixtures/search/korean/hash-table.md @@ -0,0 +1,27 @@ +# 해시 테이블 + +해시 테이블은 키와 값을 매핑하는 자료 구조다. 해시 함수로 키를 인덱스로 +변환해 평균 상수 시간에 조회·삽입·삭제한다. + +## 해시 충돌 + +두 개 이상의 서로 다른 키가 같은 인덱스로 매핑될 때 해시 충돌이 발생한다. +해시 충돌은 잘 설계된 해시 함수에서도 피할 수 없으며, 적재율이 올라갈수록 +충돌 빈도가 증가한다. + +### 해시 충돌 해결법 + +- **체이닝**: 같은 버킷에 연결 리스트로 충돌한 항목들을 묶는다. 구현이 + 단순하고 적재율이 1을 넘어도 동작한다. +- **개방 주소법**: 빈 버킷을 찾아 다음 위치에 저장한다. 선형 탐사, 제곱 + 탐사, 이중 해싱이 있다. + +## 적재율과 재해싱 + +적재율은 저장된 항목 수를 버킷 수로 나눈 값이다. 임계 적재율을 넘으면 +테이블을 키워 재해싱한다 — 모든 항목을 새 테이블에 다시 매핑한다. + +## 응용 + +캐시, 색인, 중복 제거, 데이터베이스 인덱스, 컴파일러의 심볼 테이블 등 +광범위하게 쓰인다.