[PYTHON] AWS Translate를 사용하여 문장 간단히 번역

0. INTRO

  • 최근 AWS 자격증 준비를 하면서 Dump문제들을 많이 풀어보고 있는데 대부분이 영어로 되어있다. 문제 풀 때 크게 지장이 있진 않지만 가끔 문제가 복잡하거나 그에 대한 설명을 한글로 후딱 읽고 싶을땐 번역이 필요하다. 영어 문제 text들을 쭉 긁어와서 문제에 해당하는 영역만 뽑아내어 List 형태로 가지고 있을 때, 일반 번역 사이트를 이용하여 이 문제들을 하나하나 번역하기 위해선 수십번의 복붙이 필요하게된다.
  • AWS에서 제공하는 Translate 서비스를 Python SDK인 BOTO3를 이용하여 불러와 간단히 번역을 수행해보자!

1. 본문

  • 아래는 최종적으로 완성된 코드이다. 필요 변수들은 아래와 같다. (번역만을 위한 함수이기 때문에 text_list에 넣기 전 추출한 문장에 대해 개행문자, 여백 등은 미리 조금 정제를 해주는게 좋다.)
    • text_list : 번역이 필요한 문장 (list or string 형태)
    • source_language_code : 번역 전 언어
    • target_language_code : 번역 후 언어
    • save_file (Otional) : 파일 저장 여부(파일명 입력)
import boto3, re

def aws_translate(text_list, source_language_code, target_language_code, save_file:bool=False):
    
    # boto3를 이용하여 translate 서비스 연결
    translate_client = boto3.client('translate')
    
    # 우선 입력된 text의 형태 파악 후 list로 감싼다.
    text_list_bool = isinstance(text_list, list)
    text_list = [text_list] if text_list_bool != True else text_list
    
    # 번역을 수행해주는 inner function
    def trans_(text):
        response = translate_client.translate_text(
            Text=text,
            SourceLanguageCode=source_language_code,
            TargetLanguageCode=target_language_code
        )
        translated_text = response['TranslatedText']
        return translated_text

    # 번역 결과를 파일형태로 저장하고 싶다면 save_file 변수에 파일명 입력
    if save_file:
        with open(save_file, 'w') as file:
            for i, text in enumerate(text_list):
                translated_text = trans_(text)
                # Customize the writing format
                file.write(f'{i+1}. {translated_text}\n')

    # 파일형태의 저장이 아니라면 번역 결과를 text로 return.
    # input이 list면 list형으로, string형이면 string으로 return.
    else: 
        if text_list_bool :
            translated_text = [trans_(text) for text in text_list]
            return translated_text
        else: return trans_(text_list[0])
  • 예시
text = """
A company wants to improve the performance of its popular API service 
that offers unauthenticated read access to daily updated statistical information 
via Amazon API Gateway and AWS Lambda. What measures can the company take?
"""
source_language_code = 'en'
target_language_code = 'ko'

print(aws_translate(text, source_language_code, target_language_code))

> 인기 있는 API 서비스의 성능을 개선하려는 회사가 있습니다. 
> 매일 업데이트되는 통계 정보에 대한 인증되지 않은 읽기 액세스를 제공합니다. 
> 아마존 API 게이트웨이와 AWS 람다를 통해회사는 어떤 조치를 취할  있습니까?
  • 문장 추출 관련 코드
# word_a와 word_b 사이의 문장을 추출하는 함수
def extract_text_between_keywords(word_a, word_b, text):

    pattern = r"{}(.*?){}".format(word_a, word_b)
    matches = re.findall(pattern, text, re.DOTALL)
    return matches

Leave a comment