pemistahl/linguaby Pigbrain

Intro

소프트웨어 개발에서 언어 감지(Language Detection)는 사용자 입력의 언어를 파악하거나, 다국어 텍스트를 처리할 때 자주 마주치는 문제입니다.

어떤 라이브러리를 사용해야 할지 고민해 보신 적이 있으실 겁니다.

pemistahl/lingua는 이러한 고민을 해결해 줄 강력하고 정확한 JVM 기반 언어 감지 라이브러리입니다.


pemistahl/lingua이란 무엇인가?

pemistahl/lingua는 Apache 2.0 라이선스하에 개발된 오픈 소스 언어 감지 라이브러리입니다.

주로 코틀린(Kotlin)으로 작성되었으며, Java, Scala, Groovy 등 JVM 언어 환경에서 뛰어난 성능을 발휘합니다.

  • pemistahl/lingua-rs: Rust 구현 버전
  • pemistahl/lingua-go: Go 구현 버전
  • pemistahl/lingua-py: Python 구현 버전

100개가 넘는 언어를 지원하며, 높은 정확성과 빠른 처리 속도를 자랑합니다.


pemistahl/lingua을 왜 사용하는가?

  • 높은 정확성
    • pemistahl/lingua는 통계적 모델과 n-그램(n-gram) 분석을 기반으로 매우 높은 정확도를 보여줍니다.
    • 짧은 텍스트에서도 신뢰할 수 있는 결과를 제공하며, 다른 라이브러리보다 뛰어난 성능을 자랑합니다.
  • 빠른 속도
    • JVM 기반 라이브러리임에도 불구하고 효율적인 구현으로 빠른 처리 속도를 제공합니다.
    • 대량의 텍스트를 처리해야 하는 애플리케이션에 적합합니다.
  • 다양한 언어 지원
    • 100개 이상의 언어를 지원하여 전 세계 다양한 언어 환경에 대응할 수 있습니다.
  • 쉬운 사용법
    • 코틀린 친화적인 직관적인 API를 제공하여 JVM 개발자가 쉽게 통합하고 사용할 수 있습니다.
  • 강력한 기능
    • 단순히 언어를 감지하는 것을 넘어, 신뢰도 점수(confidence score)를 제공하고, 특정 언어를 필터링하거나 선호하는 언어를 지정하는 등 유연한 기능을 제공합니다.


pemistahl/lingu 동작 방식

pemistahl/lingua의 핵심은 n-그램 빈도(n-gram frequency)를 기반으로 한 통계적 모델에 있습니다. 라이브러리는 각 지원 언어에 대한 방대한 텍스트 코퍼스(corpus)로부터 1-그램(단일 문자)부터 5-그램(5개 문자)까지의 빈도 분포를 학습합니다. 이 학습된 데이터는 각 언어의 fingerprint 역할을 합니다.

언어 감지 과정은 다음과 같이 진행됩니다.

  • 입력 텍스트 정규화
    • 입력된 텍스트에서 불필요한 문자(예: 숫자, 특수 기호)를 제거하고 소문자로 변환하는 등의 전처리 과정을 거칩니다.
  • n-그램 추출
    • 정규화된 텍스트에서 1-그램부터 5-그램까지의 n-그램을 추출합니다.
    • 예를 들어, “hello”라는 텍스트에서 2-그램은 “he”, “el”, “ll”, “lo”가 됩니다.
  • 확률 계산 (베이즈 정리 기반)
    • 추출된 각 n-그램 g에 대해, 각 후보 언어 L에서 해당 n-그램이 나타날 조건부 확률 P(g∣L)을 미리 학습된 모델에서 가져옵니다.
    • 이때, 베이즈 정리(Bayes’ Theorem)와 유사한 방식으로 각 언어의 사후 확률(posterior probability)을 계산합니다.
  • 확률 집계 및 언어 결정
    • 모든 n-그램에 대한 확률을 합산하여 각 후보 언어에 대한 “점수”를 계산합니다.
    • 가장 높은 점수를 받은 언어가 감지된 언어로 결정됩니다.
    • 이때, 각 언어에 대한 점수를 기반으로 신뢰도 점수(confidence score)도 함께 제공됩니다.
    • 예를 들어, 점수 분포의 표준편차나 최대 점수와 다음 점수 간의 차이를 이용하여 신뢰도를 추정할 수 있습니다.
  • 예측 불가능한 경우 처리
    • 모든 n-그램에 대한 점수가 특정 임계값 미만이거나, 여러 언어의 점수 차이가 미미하여 명확한 판단이 어려운 경우 Language.UNKNOWN을 반환하여 잘못된 예측을 최소화합니다.


참고

  • https://github.com/pemistahl/lingua
Published 07 June 2025