Python의 언어 감지
우리는 인간으로서 몇 가지 언어를 알고 있지만 언어가 혼합된 데이터셋을 다룰 때는 텍스트나 문서에서 사용되는 언어를 식별해야 프로세스를 진행하기 때문에 충분하지 않습니다. 그렇기 때문에 언어 감지 방법에 적응하는 것이 이러한 상황에 도움이 됩니다.
언어를 감지하기 위해 Python에는 다양한 언어 감지 라이브러리가 있습니다. 언어 감지에 사용되는 Python 라이브러리는 표현 중 문자와 콘텐츠에서 일반적으로 사용되는 단어를 인식하므로 가장 적합한 것을 선택할 수 있습니다.
자연어 처리 또는 기계 학습을 사용하여 언어 및 Python 라이브러리를 감지하는 모델을 구축할 수 있습니다. 예를 들어 Chrome은 웹페이지의 콘텐츠가 영어가 아님을 감지하면 번역 버튼이 있는 상자를 표시합니다.
이 시나리오의 기본 아이디어는 Chrome이 모델을 사용하여 웹페이지에서 사용되는 텍스트 언어를 예측한다는 것입니다.
Python에서 언어 감지를 위해 라이브러리 및 API 사용
Python에서 언어를 감지하기 위해 사용한 첫 번째 방법은 라이브러리 또는 API입니다. Python에서 언어 감지에 사용할 수 있는 가장 많이 사용되는 라이브러리를 살펴보겠습니다.
langdetect
langdetect
는 표준 유틸리티 모듈과 함께 제공되지 않기 때문에 이전 모듈로 설치해야 하는 Google의 언어 감지 라이브러리이기도 합니다.
이 API는 텍스트 처리 및 언어학에 유용하며 55개 언어를 지원합니다.
이 API를 사용하려면 Python 버전이 2.7 또는 3.4 이상이어야 합니다. 아래와 같이 langdetect
API를 설치할 수 있습니다.
$ pip install langdetect
detect
모듈을 가져온 후 langdetect
API를 사용하여 언어를 감지할 수 있습니다. 그런 다음 코드는 주어진 문장의 감지된 언어를 인쇄합니다.
여기서는 세 문장을 예시로 제공했으며 각각 영어 (en)
, 이탈리아어 (pt)
, 중국어 (ko)
로 언어를 표시합니다.
암호:
from langdetect import detect
print(detect("Hello World!"))
print(detect("Ciao mondoe!"))
print(detect("你好世界!"))
출력:
느린
langid
는 최소한의 종속성으로 언어 이름을 감지하는 데 사용되는 또 다른 API입니다. 또한 97개 언어를 감지할 수 있는 독립형 언어 식별 도구입니다.
설치하려면 터미널에 아래 명령을 입력해야 합니다.
$ pip install langid
아래 방법을 사용하여 langid
라이브러리를 사용하여 언어를 감지할 수 있습니다. TextBlob
에서와 같이 루핑하는 동안 세 문장의 언어를 보고 각 문장의 존경받는 언어를 영어 (it)
, 이탈리아어 (gl)
및 중국어 (zh)
로 출력합니다.
암호:
import langid
T = ["Hello World!", "Ciao mondoe!", "你好世界!"]
for i in T:
print(langid.classify(i))
출력:
텍스트블롭
textblob
은 Google Translate의 언어 감지기를 사용하여 텍스트 데이터에서 수행하는 또 다른 API입니다. Python의 거인으로 간주되는 NLTK
(Natural Language Toolkit) 및 pattern
모듈의 도움으로 잘 작동합니다.
이 간단한 API는 언어를 감지하는 대신 감성 분석, 명사구 추출, 품사 태깅, 분류 등을 수행합니다.
이 API를 사용하려면 Python 버전이 2.7 또는 3.5 이상이어야 하며 인터넷 연결이 필요합니다.
pip
명령으로 패키지를 설치해야 합니다.
$ pip install textblob
그런 다음 TextBlob
모듈을 가져와서 언어를 감지할 수 있습니다. 여기에서는 "T"
라는 배열에 서로 다른 언어로 된 세 개의 문장을 할당했습니다.
for
루프를 돌면서 세 문장의 단어를 감지하고 출력합니다.
암호:
from textblob import TextBlob
T = ["Hello World!", "Bonjour le monde!", "你好世界!"]
for i in T:
lang = TextBlob(i)
print(lang.detect_language())
textblob
라이브러리는 이미 사용되지 않으므로 위의 코드는 정확한 출력 대신 오류를 표시합니다. 따라서 이 방법을 사용하는 것은 권장되지 않습니다. 대신 Google Translate API를 사용할 수 있습니다.
TextBlob
여기에 대해 자세히 알아보세요.
위의 API 및 라이브러리 외에도 googletrans
, FastText
, Spacy
, polyglot
, pycld
, chardet
, guess language
등이 있습니다. 유스 케이스에 따라 사용할 수도 있습니다.
그 중 polyglot
과 FastText
는 정확도가 높은 긴 텍스트를 위한 최고의 라이브러리입니다. 또한 polyglot
및 pycld
는 텍스트에서 여러 언어를 감지할 수 있습니다.
googletrans
는 무제한 요청을 할 수 있는 무료 Python 라이브러리입니다. 언어를 자동 감지할 수 있으며 빠르고 안정적입니다.
‘FastText’는 176개 언어를 인식할 수 있고 더 빠르고 정확한 출력을 제공하는 텍스트 분류기입니다. Facebook에서 사용하는 언어 감지 라이브러리는 ‘FastText’입니다.
라이브러리나 API를 사용하는 것 외에도 언어 모델이나 교차 세트를 사용하여 언어를 감지할 수 있습니다.
Python에서 언어 감지를 위한 언어 모델 사용
여기서 모델은 일련의 단어에 대한 확률을 제공하며 가장 높은 점수를 받은 각 언어에 대해 N
언어 모델을 사용할 수 있습니다.
이러한 언어 모델을 사용하면 텍스트에 다양한 언어 집합이 포함되어 있어도 텍스트의 언어를 감지할 수 있습니다.
Python에서 언어 감지를 위해 교차 집합 사용
언어를 감지할 수 있는 다음 방법은 교차 집합을 사용하는 것입니다. 여기서 우리는 각 언어에서 가장 빈번한 단어로 N
세트를 준비하고 각 세트와 텍스트를 교차시킵니다.
그런 다음 감지된 언어는 교차점이 더 많은 집합입니다.
결론
전반적으로 언어를 감지하는 Python의 체계적인 방법은 라이브러리와 API를 사용합니다. 그러나 정확도, 언어 적용 범위, 속도 및 메모리 소비로 인해 다릅니다.
사용 사례에 따라 적절한 라이브러리를 선택하고 모델을 구축할 수 있습니다.
모델이 한 언어에만 의존하는 경우 다른 언어는 노이즈로 간주될 수 있습니다. 언어 감지는 데이터 정리의 한 단계입니다. 따라서 언어를 감지하여 노이즈 없는 데이터를 얻을 수 있습니다.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.