avro-phonetic-go: Go에서 Avro 스타일 Banglish를 বাংলা로 전사
Source: Dev.to

Bengali 사용자를 대상으로 작업한다면 이미 이 문제를 알고 있을 것입니다.
사람들은 라틴 문자로 Bangla를 입력합니다. 조심하지도 않고, 일관성도 없이. 그럼에도 불구하고 애플리케이션이 이를 이해하기를 기대합니다.
Avro Phonetic 키보드는 이 문제가 문법 기반 접근법—패턴 매칭과 로컬 컨텍스트 규칙을 결합—으로 해결될 수 있음을 보여주었습니다.
이 글에서는 avro-phonetic-go 라는 Go 라이브러리를 소개합니다. 이 라이브러리는 Avro‑style 음성 변환 엔진을 깔끔하고 프로덕션 수준의 API로 구현합니다.
Design goals
이 라이브러리는 다음 원칙을 바탕으로 제작되었습니다:
- 하드코딩이 아닌 문법 기반
- 최장 매치 스캔을 이용한 결정적 출력
- 명시적인 규칙 평가(접두사·접미사 제약)
- Strict 모드에서는 마법 같은 휴리스틱 배제
- 현대 방글라데시식 입력 단축키를 위한 선택적 BD 모드
전체 아이디어는 Avro Phonetic 키보드에 기인합니다. 내부 설계는 PHP 레퍼런스 구현에 크게 영향을 받았습니다.
Quick example
Strict mode
fmt.Println(avrophonetic.To("ami bangla gan gai"))
// আমি বাংলা গান গাই
BD mode (opt‑in)
fmt.Println(avrophonetic.ToBD("tmi valo"))
// তুমি ভালো
How it works
엔진은 크게 네 단계로 동작합니다:
- 패턴과 규칙으로 구성된 문법 로드
- 빠른 최장 매치를 위한 트라이 구축
- 입력을 좌측에서 우측으로 스캔
- 로컬 컨텍스트 규칙을 이용해 후보 패턴 검증
규칙은 인접한 이웃에 대해서만 평가됩니다. 백트래킹이 없기 때문에 알고리즘이 예측 가능하고 빠릅니다.
Strict mode vs BD mode
- Strict mode: 순수 Avro‑style 기준을 그대로 제공합니다. 정확한 Avro 동작이 필요할 때 사용합니다.
- BD mode: Strict 문법 위에 소수의 추가 패턴을 겹쳐, 실제 방글라데시 사용자들의 입력 습관을 반영하면서 기본 문법을 오염시키지 않습니다.
이러한 구분 덕분에 호환성 중심과 사용자 경험 중심 두 종류의 애플리케이션 모두에 엔진을 활용할 수 있습니다.
Custom grammar support
엔진은 완전히 문법 기반입니다. 원하는 문법과 동일하게 동작하도록 전체 문법 JSON 파일을 로드할 수 있습니다:
g, _ := avrophonetic.FromGrammarFile("grammar.json")
a := avrophonetic.New(avrophonetic.WithGrammar(g))
fmt.Println(a.Parse("ami"))
이 덕분에 검색 인덱싱, 채팅 처리, 폼 정규화, NLP 파이프라인 등에 라이브러리를 적용하기 적합합니다.
Credits
- Avro Phonetic 키보드: 원 아이디어와 문법 개념
- PHP 레퍼런스 구현:
이 프로젝트는 독립적인 Go 구현이며 원 Avro 프로젝트와는 제휴 관계가 없습니다.
Closing thoughts
음성 변환은 작은 기능이지만 그 영향력은 매우 큽니다. 제품이 방글라어 사용자 입력을 다룬다면, 이를 제대로 구현하는 것은 선택 사항이 아닙니다.
Repository:
Documentation and examples are available in the README.