task(A4-step0): synthetic korean fixture for trigram tests
도그푸딩 실 한국어 위키 문서 (hash-table.md, 4512줄 mediawiki HTML, CC-BY-SA) 는 크기·라이선스 부담으로 직접 commit 회피. 대신 도그푸딩 query 들 (해시 충돌·충돌은·시 충·해시충·충돌) 을 모두 cover 하는 합성 fixture 작성. trigram tokenizer 의 정확한 매칭 동작 (3자 substring hit, 2자 0-hit, raw vs quoted phrase) 검증용. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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 통합)
|
- Modify: `crates/kebab-app/tests/search_korean.rs` (회귀 핀 + multi-token assert + fixture 통합)
|
||||||
- Update: lexical BM25 snapshot (A1 Step 3 위치)
|
- 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 검증 기준 동작:
|
- [ ] **Step 1: 한국어 trigram 매칭 테스트 (실패 확인)** — fixture chunk text `"해시 충돌은 키와 값을 매핑할 때 발생한다"` (V007 적용 store). Codex sqlite 3.45.1 검증 기준 동작:
|
||||||
- raw `MATCH '충돌은'` (공백 없는 3자 연속 substring) → hit. ✓
|
- raw `MATCH '충돌은'` (공백 없는 3자 연속 substring) → hit. ✓
|
||||||
|
|||||||
27
fixtures/search/korean/hash-table.md
Normal file
27
fixtures/search/korean/hash-table.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# 해시 테이블
|
||||||
|
|
||||||
|
해시 테이블은 키와 값을 매핑하는 자료 구조다. 해시 함수로 키를 인덱스로
|
||||||
|
변환해 평균 상수 시간에 조회·삽입·삭제한다.
|
||||||
|
|
||||||
|
## 해시 충돌
|
||||||
|
|
||||||
|
두 개 이상의 서로 다른 키가 같은 인덱스로 매핑될 때 해시 충돌이 발생한다.
|
||||||
|
해시 충돌은 잘 설계된 해시 함수에서도 피할 수 없으며, 적재율이 올라갈수록
|
||||||
|
충돌 빈도가 증가한다.
|
||||||
|
|
||||||
|
### 해시 충돌 해결법
|
||||||
|
|
||||||
|
- **체이닝**: 같은 버킷에 연결 리스트로 충돌한 항목들을 묶는다. 구현이
|
||||||
|
단순하고 적재율이 1을 넘어도 동작한다.
|
||||||
|
- **개방 주소법**: 빈 버킷을 찾아 다음 위치에 저장한다. 선형 탐사, 제곱
|
||||||
|
탐사, 이중 해싱이 있다.
|
||||||
|
|
||||||
|
## 적재율과 재해싱
|
||||||
|
|
||||||
|
적재율은 저장된 항목 수를 버킷 수로 나눈 값이다. 임계 적재율을 넘으면
|
||||||
|
테이블을 키워 재해싱한다 — 모든 항목을 새 테이블에 다시 매핑한다.
|
||||||
|
|
||||||
|
## 응용
|
||||||
|
|
||||||
|
캐시, 색인, 중복 제거, 데이터베이스 인덱스, 컴파일러의 심볼 테이블 등
|
||||||
|
광범위하게 쓰인다.
|
||||||
Reference in New Issue
Block a user