달나라 노트

Python googletrans 본문

Python/Python googletrans

Python googletrans

CosmosProject 2020. 12. 21. 18:34
728x90
반응형

 

 

 

Python에선 googletrans라는 번역 기능을 가진 library를 제공합니다.

 

 

googletrans 설치

pip install googletrans==4.0.0-rc1

 

 

일반적인 설치법으로 pip install googletrans를 하게되면 가끔

 

AttributeError: 'NoneType' object has no attribute 'group'

 

위와 같은 에러가 지속적으로 뜨는 경우가 있습니다.

이럴 경우에는 위 커맨드로 해당 버전을 설치해줍시다.

(참고 : github.com/ssut/py-googletrans/issues/234)

 

 

 

 

from googletrans import Translator

translator = Translator()
translated_obj = translator.translate('사과')
print(translated_obj.origin)
print(translated_obj.src, '\n')

print(translated_obj.text)
print(translated_obj.dest, '\n')


- Output
사과
ko 

Apple
en 

위처럼 코드를 적어봅시다.

먼저 googletrans의 Translator를 import한 후,

해당 class를 이용하여 '사과'라는 글자를 번역합니다.

 

위 코드에선 '사과'라는 글자(source text)가 어떤 언어인지 명시하지 않았습니다.

이런 경우 googletrans는 자동으로 source text의 언어를 감지합니다.

 

또한 어떤 언어로 번역할 것인지에 대한 정보도 없습니다.

이 경우 영어로 자동 번역됨을 알 수 있습니다.

 

또한 translate('사과')를 통한 번역의 결과로는 번역된 object를 제공하는데 여기에는 여러 속성이 있습니다.

origin -> Source text 정보를 담고 있습니다.(위 예시에선 '사과'가 되겠지요.)

src -> Source text의 언어 종류를 담고 있습니다.(위 예시에선 한글 ko입니다.)

text -> 번역된 후의 text를 담고 있습니다.(위 예시에선 'Apple'입니다.)

dest -> 번역된 후의 언어 종류입니다.(위 예시에선 영어 en 입니다.)

 

 

 

 

 

 

from googletrans import Translator

translator = Translator()
translated_obj = translator.translate('사과', src='ko', dest='en')
print(translated_obj.origin)
print(translated_obj.src, '\n')

print(translated_obj.text)
print(translated_obj.dest, '\n')


- Output
사과
ko 

Apple
en 

위 예시에서처럼 source text의 언어 종류(src='ko')와 어떤 언어로 번역할지(dest='en')에 대한 정보를 줄 수 있습니다.

 

결과는 동일합니다.

 

 

 

from googletrans import Translator

translator = Translator()
translated_obj = translator.translate('사과', dest='en')
print(translated_obj.origin)
print(translated_obj.src, '\n')

print(translated_obj.text)
print(translated_obj.dest, '\n')


- Output
사과
ko 

Apple
en 

위 예시에서처럼 source text의 언어 종류(src=)는 생략한 후 어떤 언어로 번역할지(dest='en')에 대한 정보만 줄 수도 있습니다.

 

결과는 동일합니다.

 

 

 

 

 

 

from googletrans import Translator

translator = Translator(
    service_urls=[
      'translate.google.com',
      'translate.google.co.kr',
    ]
)
translated_obj = translator.translate('사과', dest='en')
print(translated_obj.origin)
print(translated_obj.src, '\n')

print(translated_obj.text)
print(translated_obj.dest, '\n')


- Output
사과
ko 

Apple
en 

Translator class를 불러올 때 위처럼 service url을 설정할 수 있습니다.

위 예시에선 총 2개의 url을 제시했는데 이 경우 두 url중 하나로 랜덤 선택되어 translation을 진행합니다.

 

 

 

 

translator = Translator(
    service_urls=[
      'translate.google.com',
      'translate.google.co.kr',
    ]
)

list_to_trans = ['사과', '포도', '복숭아']
for trans_text in list_to_trans:
    translated_objs = translator.translate(trans_text, dest='en')
    print(translated_objs.origin, '->', translated_objs.text)
    print(translated_objs.src, '->', translated_objs.dest, '\n')

for trans_text in list_to_trans:
    translated_objs = translator.translate(trans_text, dest='ja')
    print(translated_objs.origin, '->', translated_objs.text)
    print(translated_objs.src, '->', translated_objs.dest, '\n')

for trans_text in list_to_trans:
    translated_objs = translator.translate(trans_text, dest='la')
    print(translated_objs.origin, '->', translated_objs.text)
    print(translated_objs.src, '->', translated_objs.dest, '\n')

for trans_text in list_to_trans:
    translated_objs = translator.translate(trans_text, dest='fr')
    print(translated_objs.origin, '->', translated_objs.text)
    print(translated_objs.src, '->', translated_objs.dest, '\n')





- Output
사과 -> Apple
ko -> en 

포도 -> grape
ko -> en 

복숭아 -> peach
ko -> en 

사과 -> リンゴ
ko -> ja 

포도 -> ブドウ
ko -> ja 

복숭아 -> 桃
ko -> ja 

사과 -> Lacus
ko -> la 

포도 -> uva
ko -> la 

복숭아 -> persici
ko -> la 

사과 -> Pomme
ko -> fr 

포도 -> grain de raisin
ko -> fr 

복숭아 -> pêche
ko -> fr 

위처럼 반복문을 통하여 여러 글자를 동시에 번역할 수 있습니다.

또한 dest에서 언어를 달리하여 번역되어 나올 언어를 바꿀 수도 있죠.

 

 

아래 내용은 번역될 언어들의 기호입니다.

(참고: py-googletrans.readthedocs.io/en/latest/)

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',

 

 

 

 

 

from googletrans import Translator
translator = Translator(
    service_urls=[
      'translate.google.com',
      'translate.google.co.kr',
    ]
)
text_detect_obj = translator.detect('이 문장은 한글로 쓰여졌습니다.')
print(text_detect_obj.lang)

text_detect_obj = translator.detect('This sentence is written in English.')
print(text_detect_obj.lang)

text_detect_obj = translator.detect('この文章は日本語で書かれました。')
print(text_detect_obj.lang)

text_detect_obj = translator.detect('Tiu frazo estas skribita en Esperanto.')
print(text_detect_obj.lang)


- Output
ko
en
ja
eo

translator의 detect method를 사용하면 인자로 주어진 언어가 어떤 언어인지도 알 수 있습니다.

(참고 : pypi.org/project/googletrans/)

 

 

 

 

 

 

728x90
반응형
Comments