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

발행: (2025년 12월 30일 오전 06:23 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

avro-phonetic-go의 표지 이미지: Go에서 Avro 스타일 Banglish → বাংলা 변환

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

엔진은 크게 네 단계로 동작합니다:

  1. 패턴과 규칙으로 구성된 문법 로드
  2. 빠른 최장 매치를 위한 트라이 구축
  3. 입력을 좌측에서 우측으로 스캔
  4. 로컬 컨텍스트 규칙을 이용해 후보 패턴 검증

규칙은 인접한 이웃에 대해서만 평가됩니다. 백트래킹이 없기 때문에 알고리즘이 예측 가능하고 빠릅니다.

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.

Back to Blog

관련 글

더 보기 »