본문 바로가기

BLOG/오픈소스 리뷰기

[오픈소스 리뷰기] 번역 API 이용하기(1) - Google 번역

오프소스 리뷰 : 슬기로운 오픈소스 사용법 리뷰해드립니다!
#5 번역 API 이용하기(1) - Google 번역

 

 

안녕하세요. 디노랩스입니다!

최근 딥러닝 기술의 발달로 구글, 파파고 등 다양한 번역 서비스의 품질의 크게 향상함에 따라, 해외여행 시 스마트폰 속 번역기는 이제 필수품이 되었다고 할 수 있습니다.

그래서 이번에는 구글, 파파고, 카카오에서 제공하는 번역 API를 활용하여 손쉽게 번역기능을 활용할 수 있는 방법을 알아볼건데요. 오늘은 그 중에서 먼저 구글 번역기 API를 이용하는 법! 먼저 알려드릴게요~!

 

 

 

 

google image

구글에서는 크게 2가지의 번역 API를 제공합니다

  1. googletrans (무료)
  2. Google Cloud Translation (유료) 물론 자주 사용하지 않는 경우에는 간단한 무료 API를 사용하면 되지만, 이는 유료에 비해 기능제한 또는 에러발생 가능성이 있으므로 여기서는 두 가지 경우 모두를 살펴보겠습니다.

 

01. Googletrans

googletrans 는 PIPY에서 개인이 오픈소스로 만들어서 배포하는 API입니다. 때문에 별도의 key 없이도 무료로 사용이 가능하지만 정식적인 Google Cloud 서비스를 사용하는 것은 아니므로 버전에 따라 에러가 발생할 수 있습니다.

따라서 상업용 서비스를 개발한다면 무료보다는 정식적인 Google Cloud에서 제공하는 API를 사용을 고려해보는 것이 좋을 것 같습니다.

googletrans : https://pypi.org/project/googletrans/

 

googletrans

Free Google Translate API for Python. Translates totally free of charge.

pypi.org

 

 

 

우선 googletrans 모듈을 설치합니다.
공식문서의 예제를 보면 pip install googletrans로 설치하지만 구버전으로 설치되어 에러가 발생할 수 있습니다. 그래서 pip uninstall googletrans 를 한 후 알파버전으로 설치합니다.

 

 

!pip install googletrans==3.1.0a0
Requirement already satisfied: googletrans==3.1.0a0 in /usr/local/lib/python3.7/dist-packages (3.1.0a0)
Requirement already satisfied: httpx==0.13.3 in /usr/local/lib/python3.7/dist-packages (from googletrans==3.1.0a0) (0.13.3)
Requirement already satisfied: sniffio in /usr/local/lib/python3.7/dist-packages (from httpx==0.13.3->googletrans==3.1.0a0) (1.2.0)
Requirement already satisfied: rfc3986<2,>=1.3 in /usr/local/lib/python3.7/dist-packages (from httpx==0.13.3->googletrans==3.1.0a0) (1.5.0)
Requirement already satisfied: certifi in /usr/local/lib/python3.7/dist-packages (from httpx==0.13.3->googletrans==3.1.0a0) (2021.5.30)
Requirement already satisfied: idna==2.* in /usr/local/lib/python3.7/dist-packages (from httpx==0.13.3->googletrans==3.1.0a0) (2.10)
Requirement already satisfied: chardet==3.* in /usr/local/lib/python3.7/dist-packages (from httpx==0.13.3->googletrans==3.1.0a0) (3.0.4)
Requirement already satisfied: hstspreload in /usr/local/lib/python3.7/dist-packages (from httpx==0.13.3->googletrans==3.1.0a0) (2021.9.1)
Requirement already satisfied: httpcore==0.9.* in /usr/local/lib/python3.7/dist-packages (from httpx==0.13.3->googletrans==3.1.0a0) (0.9.1)
Requirement already satisfied: h11<0.10,>=0.8 in /usr/local/lib/python3.7/dist-packages (from httpcore==0.9.*->httpx==0.13.3->googletrans==3.1.0a0) (0.9.0)
Requirement already satisfied: h2==3.* in /usr/local/lib/python3.7/dist-packages (from httpcore==0.9.*->httpx==0.13.3->googletrans==3.1.0a0) (3.2.0)
Requirement already satisfied: hpack<4,>=3.0 in /usr/local/lib/python3.7/dist-packages (from h2==3.*->httpcore==0.9.*->httpx==0.13.3->googletrans==3.1.0a0) (3.0.0)
Requirement already satisfied: hyperframe<6,>=5.2.0 in /usr/local/lib/python3.7/dist-packages (from h2==3.*->httpcore==0.9.*->httpx==0.13.3->googletrans==3.1.0a0) (5.2.0)

 

 

 

모듈을 설치한 이후 사용법은 매우 간단합니다.
우선, googletrans 모듈의 Translator 클래스로 translator 객체를 생성합니다.
이후 아래와 같이 번역하고자하는 텍스트를 translator.translate() 메서드에 입력한 뒤, dest 파라미터로 번역 후 언어를 추가하면 됩니다.

 

import googletrans

translator = googletrans.Translator()

text1 = '안녕하세요. 저는 한국인입니다.'
text2 = '한국어를 영어로 번역합니다.'
text3 = 'I like burger'

result1 = translator.translate(text1, dest='en')
result2 = translator.translate(text2, dest='en')
result3 = translator.translate(text3, dest='ko')

print(result1)
print(result2)
print(result3)
Translated(src=ko, dest=en, text=Hello. I'm a Korean., pronunciation=None, extra_data="{'translat...")
Translated(src=ko, dest=en, text=Translate Korean to English., pronunciation=None, extra_data="{'translat...")
Translated(src=en, dest=ko, text=나는 버거를 좋아한다, pronunciation=naneun beogeoleul joh-ahanda, extra_data="{'translat...")

 

from googletrans import Translator

def google_bt(text, target_language='en', **kwargs):
    assert isinstance(text, str), "Source input should be string"
    source_language = "ko"
    forward = translator.translate(text, src=source_language, dest=target_language)
    print(forward.text)
    backward = translator.translate(forward.text, src=target_language, dest=source_language)
    print(backward.text)
    return backward.text

translator = Translator()

 

translator.translate( )의 결과물은 Translated라는 클래스의 객체입니다.
이 안에는 크게 src, dest, text, pronunciation 이라는 요소를 가지고 있습니다.

  • src : 번역 전 언어
  • dest : 번역 후 언어
  • text : 번역 결과
  • pronunciation : 번역 결과의 발음 (영어로 표기, dest가 영어인 경우 None)

따라서, translator.translate()의 결과물에서 번역 결과만을 가져오고 싶다면 아래와 같이 text 만 사용하면 됩니다.

 

print(result1.text)
print(result2.text)
print(result3.text)
Hello.I'm a Korean.
Translate Korean in English.
나는 햄버거를 좋아해

 

 

pronunciation 을 활용하면 다음과 같이 읽기 어려운 언어를 영어로 표기된 발음으로 확인할 수 있습니다.

 

text4 = '안녕하세요. 저는 서울에 살고 있습니다.'
text5 = '한국어를 중국어로 번역합니다.'

result4 = translator.translate(text1, dest='zh-cn')
result5 = translator.translate(text2, dest='zh-cn')

print(result4.text, '/', result4.pronunciation)
print(result5.text, '/', result5.pronunciation)
你好。我是韩国人。 / Nǐ hǎo. Wǒ shì hánguó rén.
用英语翻译韩语。 / Yòng yīngyǔ fānyì hányǔ.

 

translate 메서드를 사용할때 번역 후 언어는 dest 파라미터로 입력했지만 번역전 언어는 입력하지 않았습니다.
이는 translate 메서드 자체적으로 입력받은 텍스트의 언어를 감지하기 때문인데 더욱 정확한 결과를 위해서는 번역 전 언어는 src 파라미터로 번역 후 언어는 dest 파라미터로 지정해주는 것이 좋습니다.

 

detect 메서드는 해당 텍스트가 어떤 언어인지 탐지한 결과를 lang 요소를 통해 리턴합니다.

 

 

print(translator.detect('이 문장은 한글로 쓰여졌습니다.'))              # 한국어
print(translator.detect('この文章は日本語で書かれました。'))            # 일본어
print(translator.detect('This sentence is written in English.'))        # 영어
print(translator.detect('Dieser Satz wurde auf Deutsch verfasst.'))     # 독일어
print(translator.detect('Esta frase fue escrita en alemán.'))           # 스페인어
Detected(lang=ko, confidence=None)
Detected(lang=ja, confidence=None)
Detected(lang=en, confidence=None)
Detected(lang=de, confidence=None)
Detected(lang=es, confidence=None)

 

 

(참고) 번역가능한 언어와 키
아래에서 번역가능한 언어와 그에 해당되는 키를 확인할 수 있습니다.

 

print(googletrans.LANGUAGES)
{'af': 'afrikaans', 'sq': 'albanian', 'am': 'amharic', 'ar': 'arabic', 'hy': 'armenian', 'az': 'azerbaijani', 'eu': 'basque', 'be': 'belarusian', 'bn': 'bengali', 'bs': 'bosnian', 'bg': 'bulgarian', 'ca': 'catalan', 'ceb': 'cebuano', 'ny': 'chichewa', 'zh-cn': 'chinese (simplified)', 'zh-tw': 'chinese (traditional)', 'co': 'corsican', 'hr': 'croatian', 'cs': 'czech', 'da': 'danish', 'nl': 'dutch', 'en': 'english', 'eo': 'esperanto', 'et': 'estonian', 'tl': 'filipino', 'fi': 'finnish', 'fr': 'french', 'fy': 'frisian', 'gl': 'galician', 'ka': 'georgian', 'de': 'german', 'el': 'greek', 'gu': 'gujarati', 'ht': 'haitian creole', 'ha': 'hausa', 'haw': 'hawaiian', 'iw': 'hebrew', 'he': 'hebrew', 'hi': 'hindi', 'hmn': 'hmong', 'hu': 'hungarian', 'is': 'icelandic', 'ig': 'igbo', 'id': 'indonesian', 'ga': 'irish', 'it': 'italian', 'ja': 'japanese', 'jw': 'javanese', 'kn': 'kannada', 'kk': 'kazakh', 'km': 'khmer', 'ko': 'korean', 'ku': 'kurdish (kurmanji)', 'ky': 'kyrgyz', 'lo': 'lao', 'la': 'latin', 'lv': 'latvian', 'lt': 'lithuanian', 'lb': 'luxembourgish', 'mk': 'macedonian', 'mg': 'malagasy', 'ms': 'malay', 'ml': 'malayalam', 'mt': 'maltese', 'mi': 'maori', 'mr': 'marathi', 'mn': 'mongolian', 'my': 'myanmar (burmese)', 'ne': 'nepali', 'no': 'norwegian', 'or': 'odia', 'ps': 'pashto', 'fa': 'persian', 'pl': 'polish', 'pt': 'portuguese', 'pa': 'punjabi', 'ro': 'romanian', 'ru': 'russian', 'sm': 'samoan', 'gd': 'scots gaelic', 'sr': 'serbian', 'st': 'sesotho', 'sn': 'shona', 'sd': 'sindhi', 'si': 'sinhala', 'sk': 'slovak', 'sl': 'slovenian', 'so': 'somali', 'es': 'spanish', 'su': 'sundanese', 'sw': 'swahili', 'sv': 'swedish', 'tg': 'tajik', 'ta': 'tamil', 'te': 'telugu', 'th': 'thai', 'tr': 'turkish', 'uk': 'ukrainian', 'ur': 'urdu', 'ug': 'uyghur', 'uz': 'uzbek', 'vi': 'vietnamese', 'cy': 'welsh', 'xh': 'xhosa', 'yi': 'yiddish', 'yo': 'yoruba', 'zu': 'zulu'}

 

 

 

02. Google Cloud Translation

 

Cloud Translation은 다음 두 버전으로 제공됩니다.

  • Cloud Translation - Basic(v2)
  • Cloud Translation - Advanced(v3)

여기서는 Basic 버전에 대한 사용법을 알아보겠습니다.


(참고) Basic과 Advanced 버전 비교

 

Basic과 Advanced 비교  |  Cloud Translation  |  Google Cloud

의견 보내기 Basic과 Advanced 비교 Cloud Translation은 Basic과 Advanced 두 가지 버전 중에서 선택할 수 있습니다. 사용할 버전은 사용 중인 클라이언트 라이브러리 또는 서비스 엔드포인트의 버전에 따라

cloud.google.com

 

 

Google Cloud 에서 제공하는 번역 API의 경우 유료버전이므로 Cloud Translation API가 사용 설정된 프로젝트를 생성하여 API 활용 key를 발급받아야 합니다.

 

가장 먼저 구글 계정으로 로그인하여 구글 클라우드 플랫폼에서 아래 예시와 같이 새 프로젝트를 생성해주세요.
구글 클라우드 플랫폼 바로가기

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

 

 

프로젝트 생성 후 'API 및 서비스 사용 설정'을 클릭하면 활성화(enable)할 수 있는 모든 API를 볼 수 있습니다. translation 을 검색하여 Cloud Translation API 를 선택하고 사용 버튼을 클릭해주세요.

 

 

 

이후 서비스 사용을 위한 서비스 계정과 key를 발급받아야 합니다.
아래 링크를 클릭하여 서비스 계정 만들기 페이지로 이동해 이전에 생성한 프로젝트를 선택합니다.
서비스 계정 만들기

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

 

아래와 같이 서비스 계정 이름 필드에 이름을 입력한 뒤 가입 완료 및 계속완료 버튼을 클릭하여 서비스 계정가입을 완료합니다.

 

 

이후 생성된 서비스 계정을 선택하여  탭을 클릭한 뒤 키 추가 버튼을 클릭하여 JSON 파일 형태의 key를 다운로드합니다.

 

 

 

이제 API를 사용하기 위해 필요한 인증키를 발급받았습니다.
다음으로는 클라이언트 라이브러리를 설치한 뒤 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 다운받은 인증키 json 파일의 경로로 설정합니다. (colab을 사용하는 경우 colab환경에 key파일을 업로드하여 경로를 설정합니다.)

 

!pip install --upgrade google-cloud-translate
import os

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '인증키가 있는 KEY_PATH를 입력하세요'
# 아래 코드를 실행했을때 에러가 발생하지 않으면 성공적으로 설정이 완료되었습니다.
!gcloud auth application-default print-access-token
ya29.c.Kp8BEQhXNXWdcWIP5Pu0e7po8tLZEaCeiUPQFdwZHTeGeGtc3u02gDiLvaCSuw0U5DGisNgd6_NnRhNIm4Y2qTA1y7PD72Ajl5WY8PpjDcWRG9ffL0dU3LKsJuMkGOwuVg8aCWNrSJhhFxetC5fxWePVnTThh0SMvWDSDnItZs5ncw34Wn27BQ0psSfuyv3iqQSo0DOMeMqE1OmLvp_lufap...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

 

 

 

Google Cloud 에서 제공하는 번역 API를 사용하기 위한 모든 준비를 마쳤습니다.
이제 아래 코드와 같이 client 객체를 생성한 뒤 translate 메서드에 번역하고자 하는 text와 번역 후 언어 target_language를 입력하면 API 기능을 활용할 수 있습니다.

 

from google.cloud import translate_v2 as translate

client = translate.Client()

text = '안녕하세요. 나는 한국인입니다.'
result = client.translate(text, target_language='ja')
print(result)
print(u"Text: {}".format(result["input"]))
print(u"Translation: {}".format(result["translatedText"]))
print(u"Detected source language: {}".format(result["detectedSourceLanguage"]))
{'translatedText': 'こんにちは。私は韓国人です。', 'detectedSourceLanguage': 'ko', 'input': '안녕하세요. 나는 한국인입니다.'}
Text: 안녕하세요. 나는 한국인입니다.
Translation: こんにちは。私は韓国人です。
Detected source language: ko

 

 

Google Cloud API의 translate 메서드는 딕셔너리 타입의 결과값을 return합니다.

  • translatedText : 번역 결과
  • detectedSourceLanguage : 번역 전 언어
  • input : 번역 전 텍스트

 

 

Cloud Translation API(v2)를 사용하여 지원되는 언어는 다음과 같이 확인할 수 있습니다.

 

results = client.get_languages()

for language in results:
    print(u"{name} ({language})".format(**language))

 

 

여기까지 잘 따라오셨나요? :D

이렇게 오늘 구글의 두가지 번역 API를 이용해보았는데요. 이제는 번역도 API를 이용해 보다 쉽게 사용할 수 있습니다~

이어서 다음 포스팅에서는 네이버 파파고 번역과 카카오 번역의 API 이용법 소개해드리겠습니다!!