> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# Clean 스테이지

> 데이터가 인덱스에 닿기 전 PII를 지우고, 중복을 없애고, 잡음을 걷습니다

**Clean** 단계는 Source와 Normalize 사이에 있습니다. 저장하고 싶지 않은 것들을 걷어 냅니다. 실수로 든 PII, 보일러플레이트, 거의 같은 중복, 워크스페이스를 벗어나면 안 되는 콘텐츠 같은 것들이죠.

## Clean 블록

### PII 지우기

자동으로 찾아 바꿉니다.

* **이메일** → `[email]`
* **전화번호** → `[phone]`(US, EU, JP, KR 형식)
* **신용카드 번호** → `[cc]`
* **국가 ID**(SSN, 주민등록번호, MyKad) → `[id]`
* **이름** 선택, 기본 꺼짐. NER과 작은 온디바이스 모델을 씁니다.
* **커스텀 regex** 여러분 패턴을 더합니다.

문서 안에서 치환은 일관됩니다(같은 이메일은 같은 자리표시자로). 그래서 뜻이 보존됩니다.

### 보일러플레이트 걷기

흔한 잡음을 걷습니다.

* 이메일 헤더와 서명.
* HTML 태그와 스타일.
* 목차, 페이지 번호, 머리글/바닥글.
* 법적 바닥글과 면책 문구.
* 쿠키 고지와 내비게이션(웹 콘텐츠).

### 언어 필터

원치 않는 언어의 항목을 버립니다. 허용 목록을 정합니다(예: `en, ko, ja`). 나머지는 걸러지고 로그에 남습니다.

### 콘텐츠 필터

**거부 목록**에 걸리는 콘텐츠를 버립니다. 패턴, 키워드, 또는 여러분이 준 작은 분류기로요. 테스트 데이터나 내부 전용 콘텐츠를 공개 에이전트 지식에서 빼는 데 좋습니다.

### 근접 중복 감지기

이미 넣은 것과 95% 넘게 비슷한 항목을 걷습니다. MinHash 스케치를 써서 빠르고, 다시 임베딩할 필요가 없습니다.

임계값을 조정할 수 있습니다. 높게(99% 초과) 두면 거의 똑같은 사본만, 낮게(85%쯤) 두면 공격적으로 걷습니다.

### 커스텀 변환(인라인)

항목마다 작은 JS/Python 함수를 돌립니다. `content`, `metadata`, 그리고 헬퍼 라이브러리(`re`, `bs4`, `markdown-it`)를 다 씁니다. 바꾼 항목을 돌려주거나, `null`을 돌려 버립니다.

## 순서가 중요합니다

Clean 블록은 이은 순서대로 돕니다. 흔한 레시피는 이렇습니다.

1. 언어 필터(일찍 버립니다, 쌉니다).
2. 보일러플레이트 걷기(구조를 다듬습니다).
3. PII 지우기(깨끗해진 텍스트에 적용).
4. 근접 중복 감지기(다른 것들이 잡음을 정리한 뒤 중복을 걷습니다).

## 무엇을 걷었는지 로깅

실행 로그가 항목마다 정리 작업을 남깁니다. PII 몇 건, 무엇을 걷었는지, 항목을 버렸는지. 정리 전 데이터를 보관하지 않고도 감사할 수 있습니다.

## 되돌리기

지우기는 설계상 **되돌릴 수 없습니다.** 되살려야 하면 다시 소싱해서 다시 돌려야 합니다.

원본이 감사용으로 필요하면 원래 저장소에 그대로 두세요. Nora는 파이프라인이 만든 파생 사본만 지웁니다.
