빈도 기반 오타 교정
빈도 기반 오타 교정 — 빈도단어 사전이 어떻게 쓰이나
바른은 자주 발생하는 오탈자를 빠르게 잡아냅니다.
바른의 빈도 기반 오타 교정은 자주 나오는 오타 매핑 테이블과
단어 빈도 사전(word-freq.gob), 그리고 BK-tree 유사어 검색을 함께 사용합니다.
자주 나오는 오타는 매핑 테이블로 바로 고친다
흔한 오타는 굳이 모델이나 LLM을 부를 필요 없이, 미리 정리해 둔 매핑으로 즉시 교정합니다.
| 오타 | 교정 | 설명 |
|---|---|---|
스빈다 |
습니다 |
자판 인접·오입력으로 흔한 종결어미 오타 |
마싯 |
맛있 |
받침·음절 뒤바뀜 오타 |
RevisionCategory의 TYPO(오탈자) 범주로 분류되며, 가장 가볍고 빠른 교정 경로입니다.
매핑에 없으면 유사어 후보를 찾는다
매핑 테이블로 잡히지 않는 오타는, 사전에 있는 비슷한 단어 중에서 후보를 찾아 교정합니다. 이때 두 가지 자료구조가 협력합니다.
graph TD
A[교정 대상 어절] --> B{빈도 오타<br>매핑에 있나?};
B -- 예 --> C[매핑대로 교정<br>예: 스빈다 → 습니다];
B -- 아니오 --> D[BK-tree 유사어 검색<br>자모 바이그램·편집거리];
D --> E[유사어 후보들];
E --> F[word-freq.gob<br>빈도 순위로 후보 정렬];
F --> G[가장 그럴듯한 후보 선택];
- BK-tree 유사어 검색: 자모 바이그램과 편집거리를 기준으로, 입력 어절과 가까운 단어 후보를 사전에서 빠르게 찾아냅니다. 우리말샘을 기반으로 만든 트리이며, gob 캐싱으로 서버 재시작을 빠르게 합니다.
- 단어 빈도 사전(
word-freq.gob): 후보가 여럿일 때 실제로 더 자주 쓰이는 단어를 우선합니다. 편집거리가 같은 후보라도 빈도가 높은 쪽이 오타의 의도일 가능성이 크기 때문입니다.
왜 빈도까지 보나요?
오타에서 한두 글자 떨어진 단어는 보통 여러 개입니다. 편집거리만으로는 어느 것이 정답인지 가릴 수 없습니다. 사람은 더 흔한 단어를 쓰려다 오타를 냈을 확률이 높으므로, 빈도 사전으로 후보의 우선순위를 매기면 교정 정확도가 올라갑니다.
word-freq.gob 은 별도 산출물
단어 빈도 사전(word-freq.gob)은 빌드에 10시간 이상 걸리는 별도 과정으로 만들어집니다.
맞춤법 검사 기능이 포함된 빌드에만 포함되는 리소스입니다.
과교정을 막는 안전장치
빈도가 높다고 무조건 바꾸지는 않습니다. 입력과 후보의 자모 편집거리가 충분히 가까울 때만 교정 후보로 채택합니다. 원문에서 너무 멀리 떨어진 단어로 바꾸면 의미가 달라질 수 있기 때문입니다.
오타 교정을 끄려면
오타 교정이 불필요하거나 원문 표기를 그대로 유지하고 싶다면 RevisionConfig의 disable_typo_correction 옵션을 켜세요(기본값 false).
자주 묻는 질문
Q. 스빈다처럼 흔한 오타는 어떻게 그렇게 빨리 고치나요?
자주 발생하는 오타는 미리 정리한 매핑 테이블로 즉시 교정합니다.
스빈다 → 습니다 처럼 매핑에 있는 오타는 모델이나 LLM을 거치지 않고 바로 바뀝니다.
Q. 단어 빈도 사전은 어디에 쓰이나요?
매핑에 없는 오타를 BK-tree로 유사어 후보를 찾은 뒤, 후보가 여럿일 때 word-freq.gob의 빈도 순위로
더 자주 쓰이는 단어를 우선 선택하는 데 씁니다.
Q. 오타 교정을 끌 수 있나요?
네. RevisionConfig의 disable_typo_correction을 true로 설정하면 빈도 기반 오타 교정이 비활성화됩니다.
기본값은 false입니다.
Q. 빈도가 높다고 무조건 다른 단어로 바꾸지는 않나요?
네. 빈도가 높아도 입력과 후보의 자모 편집거리가 충분히 가까울 때만 교정 후보로 채택합니다. 원문에서 너무 멀리 떨어진 단어로 바꾸면 의미가 달라질 수 있어, 가까운 후보만 허용해 과교정을 막습니다.
도움이 되었나요?