Documentation
¶
Overview ¶
Package glossary는 위키가 소유한 용어 사전을 읽어 전사에 적용한다.
**사전은 위키의 것이고 이 패키지는 읽기만 한다**(ADR 0079). 사람이 오탈자를 고치면 그 교정이 사전에 쌓이고 git 이 추적하며 다음 전사가 개선된다. 그 되먹임이 여정 2의 핵심이며, 사전이 도구 안에 있으면 끊긴다. 위키마다 용어가 달라 도구가 들고 다닐 수도 없다.
인식 유도는 하지 못한다 ¶
upstream 은 사전을 두 자리에 쓴다. 전사 전에 whisper 의 initial_prompt 로 넣어 인식을 유도하고, 전사 후에 자동 교정 항목을 치환한다.
**앞의 것을 여기서는 못 한다.** sherpa-onnx 의 whisper 설정에 프롬프트 자리가 없다. C API 의 SherpaOnnxOfflineWhisperModelConfig 에 encoder, decoder, language, task, tail_paddings, 타임스탬프 플래그뿐이다. hotwords 는 있으나 transducer 계열의 빔 탐색을 건드리는 것이라 whisper 의 greedy 디코딩에 닿지 않는다.
그래서 이 패키지는 후처리 치환만 한다. 그 절반은 오히려 결정론적이라 되먹임 고리에는 더 낫다. 같은 사전에 같은 전사를 넣으면 늘 같은 결과가 나온다.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrNotFound = errors.New("용어 사전 없음")
ErrNotFound는 위키에 사전이 없을 때의 오류다. 없는 것은 정상이므로 호출자가 이것을 보고 조용히 넘어갈 수 있다.
Functions ¶
func TotalReplacements ¶
TotalReplacements는 치환 횟수의 합이다.
Types ¶
type Glossary ¶
type Glossary struct {
// Path는 읽은 파일 경로다. 사용자에게 어느 사전을 썼는지 알린다.
Path string
// Rules는 치환 규칙이다. 긴 변형이 앞에 온다.
Rules []Rule
// Reviewed는 자동 교정 대상이 아닌 항목 수다. 사전에 있으나
// 쓰지 않은 것이 얼마나 되는지 알린다.
Reviewed int
}
Glossary는 읽어 들인 사전이다.
func Parse ¶
Parse는 사전 본문에서 치환 규칙을 뽑는다.
형식은 마크다운 표이고 칸 넷이다. 첫째가 정규형, 둘째가 변형 목록, 셋째가 자동 교정 여부, 넷째가 설명이다. 칸 이름이 아니라 위치로 읽는다. upstream 파일이 절 여럿에 표를 나눠 두고 머리 행이 여러 번 나오기 때문이다.
**자동 교정은 셋째 칸이 yes 로 시작하는 것만 한다.** review 와 conditional 은 사람이 보라는 표시이므로 건드리지 않는다. "yes when 무엇무엇" 처럼 조건이 붙은 것은 yes 로 친다. 조건 판단은 도구가 할 수 없고, 그 항목을 넣은 사람이 대체로 맞다고 본 것이다.
func (*Glossary) Apply ¶
Apply는 텍스트에 치환을 적용하고 무엇을 몇 번 바꿨는지 함께 낸다.
무엇을 바꿨는지 반드시 알린다. 조용히 바꾸면 사람이 전사를 검수할 때 도구가 손댄 자리를 모른다. 사전이 틀렸을 때 그것을 발견할 길이 그 목록뿐이다.
**한 번 바꾼 자리를 다시 보지 않는다.** 규칙마다 ReplaceAll 을 돌리면 앞 규칙이 낸 정규형을 뒤 규칙이 다시 잡는다. 실측으로 `임계을`이 `임계값`이 된 뒤 `임계` 규칙에 다시 걸려 `임계값값`이 됐다. 그래서 왼쪽에서 오른쪽으로 한 번만 훑고 맞은 만큼 건너뛴다.
규칙은 이미 긴 변형이 앞에 오도록 정렬되어 있으므로 앞에서부터 처음 맞는 것이 가장 긴 것이다.