상세 컨텐츠

본문 제목

파이썬으로 파파고 API 연동하여 번역하기

코딩

by 땡감 2023. 2. 27. 15:18

본문

반응형

이번 포스팅에서는 파이썬으로 파파고 API를 연동하여

번역하는 프로그램을 만들어 보자.

파이썬과 파파고 API에 대한 블로그 포스팅이 많이 있으나 굳이 다시 포스팅을 하는 이유는

파파고 번역 API 유료 버젼에 대한 내용과 문서 번역에 대한 내용을 찾을 수 없었기 때문이다.

따라서 작성자와 같은 설정을 한다면 유료 결제가 발생할 수 있으므로 유의해야 한다.

 

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

먼저 파이썬과 파파고를 연동하기 위해서는

네이버 클라우드 플랫폼에서 어플리케이션을 등록해야 한다.

자신이 가지고 있는 네이버 아이디로 몇번의 동의만 한다면 별도의 가입없이 이용할 수 있다.

더불어 결제 정보도 등록해야지 어플리케이션 등록이 가능하다.

 

네이버 클라우드 플랫폼 로그인이 완료되었다면

상단의 서비스 카테고리를 클릭하자.

그 후 다시 Papago Translation을 찾아야하는데 

제공되는 서비스가 많이 있으므로 papago로 검색을 해서 찾는것을 권장한다.

 

그럼 이제 이용신청하기 버튼을 눌러 어플리케이션을 등록하자.

참고로 파파고는 백만자당 2만원의 요금이 발생하며 부가세는 별도이므로 

불필요한 번역을 진행하지 않도록 유의해야한다.

 

어플리케이션 등록 버튼을 누르면 이제 어플리케이션을 등록할 수 있다.

작성자의 경우 미리 테스트를 위해 등록된 어플리케이션이 확인된다.

 

파파고 API의 경우 크게 4가지로 나뉜다.

텍스트 번역, 웹사이트 번역, 문서파일 번역, 그리고 언어 감지 API이다.

먼저 가장 간단한 텍스트 번역의 어플리케이션을 등록하도록 하자.

 

어플리케이션이 등록되면 자신만의 고유한 키가 발급된다.

발급된 키는 client id, client secret으로 무료 버젼과 발급되는 키 종류는 동일하다.

하지만 무료버젼과 유료버젼 차이를 두기 위해서 그런지 그 길이에서는 차이가 났다.

 

네이버 클라우드 플랫폼에서는 등록된 어플리케이션 종류와

현재까지의 당일 사용량, 당월 사용량등이 확인 가능하므로

미리 요금이 얼마나 발생할지에 대한 예측이 가능하다.

 

 

Papago Text Translation 개요

 

api.ncloud-docs.com

파파고 API에 대한 자세한 설명은 위의 링크에서 확인이 가능하다.

자신이 등록한 어플리케이션 종류에 따라 API를 호출하는 방법도 상이하므로 

자신이 어떤 종류의 어플리케이션을 등록했는지도 잘 확인해야 한다.

 

// 네이버 Papago Text Translation API 예제
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
encText = urllib.parse.quote("번역할 문장을 입력하세요")
data = "source=ko&target=en&text=" + encText
url = "https://naveropenapi.apigw.ntruss.com/nmt/v1/translation"
request = urllib.request.Request(url)
request.add_header("X-NCP-APIGW-API-KEY-ID",client_id)
request.add_header("X-NCP-APIGW-API-KEY",client_secret)
response = urllib.request.urlopen(request, data=data.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
    response_body = response.read()
    print(response_body.decode('utf-8'))
else:
    print("Error Code:" + rescode)

파이썬에서 파파고 텍스트 번역 API를 사용하는 방법은 위와 같다.

위 소스는 파파고 API 설명 링크에서도 확인이 가능하다.

그럼 이제 예제 소스를 조금 변경하여 실제  파이썬 코드로 작성해 테스트 해보자.

 

import requests

def translateText(client_id, client_secret, eng_text):
    # print("translateTitle 함수 호출")
    ko_text =""
    url = "https://naveropenapi.apigw.ntruss.com/nmt/v1/translation"
    data = eng_text
    req_header = {"X-NCP-APIGW-API-KEY-ID": client_id, "X-NCP-APIGW-API-KEY": client_secret}
    req_param = {"source": "en", "target": "ko", "text": data}
    res = requests.post(url, headers=req_header, data=req_param)
    if res.ok:
        ko_text = res.json()['message']['result']['translatedText']
        print(ko_text)
    else:
        print('error code', res.status_code)
    return ko_text


translateText("클라이언트 ID", "클라이언트 시크릿", "번역할 내용")

유의해야할 점은 파파고 API에 텍스트 번역으로 등록을 하였다면

한번에 번역할 수 있는 글자수가 5000자 이내여야한다는 점이다.

더불어 번역할 언어가 영어 -> 한글인 경우 source 값이 en, target 값이 ko가 되며

그 반대의 경우에는 source 값이 ko, target 값이 en이 된다.

 

위의 소스를 바탕으로 "Hello World"를 번역해봤다.

간단한 텍스트라 문제없이 정상적으로 잘 번역되고

그 응답속도도 준수하다.

 

두번째로 문서 번역을 해보자.

텍스트 번역과 유사하지만 문서 번역의 경우

문서가 번역되는 그 과정을 확인하고 완료가 된 경우 다시 파일로 받아야한다.

즉 문서 번역을 요청 -> 번역 진행도 확인 -> 번역된 파일로 다운.

3가지 과정이 하나의 세트로 진행된다.

지원되는 문서의 형태는 MS Office 파일들과 한글 파일정도이며

요금도 백만자당 3만원으로 텍스트 번역보다 만원이 더 비싸다.

파파고 문서 번역에 대한 자세한 내용은 아래 링크를 참조하자.

 

Papago Doc Translation 개요

 

api.ncloud-docs.com

 

 

문서 번역 테스트를 위해 간단하게 워드 파일을 작성했다.

이제 이 문서를 파파고 문서 어플리케이션 API를 통해 번역해보자.

 

import requests
from requests_toolbelt import MultipartEncoder
import uuid
import urllib
import time


def docTrnaslate(file_name, client_id,  client_secret):
    """문서 번역 요청"""
    data = {
      'source': 'en',
      'target': 'ko',
      'file': (file_name, open(file_name, 'rb'), 'application/octet-stream', {'Content-Transfer-Encoding': 'binary'})
    }
    m = MultipartEncoder(data, boundary=uuid.uuid4())

    headers = {
      "Content-Type": m.content_type,
      "X-NCP-APIGW-API-KEY-ID": client_id,
      "X-NCP-APIGW-API-KEY": client_secret
    }

    url = "https://naveropenapi.apigw.ntruss.com/doc-trans/v1/translate"
    res = requests.post(url, headers=headers, data=m.to_string()).json()
    request_id = res['data']['requestId']
    print(request_id)
    return request_id


def getStatus(request_id, client_id, client_secret):
    """문서 번역 상태 확인"""
    headers = {
        "X-NCP-APIGW-API-KEY-ID": client_id,
        "X-NCP-APIGW-API-KEY": client_secret
    }

    url = "https://naveropenapi.apigw.ntruss.com/doc-trans/v1/status?requestId=" + request_id
    res = requests.get(url, headers=headers).json()
    status = res['data']['status']
    print(status)
    return status


def downFile(request_id, client_id, client_secret, file_name):
    """번역 완료된 문서 다운"""
    url = "https://naveropenapi.apigw.ntruss.com/doc-trans/v1/download?requestId=" + request_id
    opener = urllib.request.build_opener()
    opener.addheaders = [('X-NCP-APIGW-API-KEY-ID', client_id), ('X-NCP-APIGW-API-KEY', client_secret)]
    urllib.request.install_opener(opener)
    urllib.request.urlretrieve(url, file_name)



request_id = docTrnaslate(번역대상 파일명, 클라이언트 ID, 클라이언트 secret)

while True:
    status = getStatus(request_id, 클라이언트 ID, 클라이언트 secret) #상태가 COMPLETE 일 경우 다운로드 진행
    if status == "COMPLETE":
        downFile(request_id, 클라이언트 ID, 클라이언트 secret, 번역후 다운받을 파일명)
        break
    time.sleep(1)

전체 소스는 위와 같다. (파파고 자체에서 제공되는 API 샘플도 위의 링크에서 확인 가능하다)

언급한것처럼 총 3단계로 문서 번역은 진행되며

텍스트와는 달리 status 값을 확인 후 번역된 문서를 다운 받아야 한다.

status 값을 확인하기 위해 while 구문을 처리했고

상태값이 COMPLETE 가 되면 번역된 문서를 다운로드 한 후 프로그램은 종료한다.

 

아주 간단한 내용이더라도 문서 번역의 경우 7초 가량 소요된다.

아마 문서를 업로드 하고 그 문서의 내용을 파싱하고 다시 번역하는 과정등

텍스트 번역에 비하면 부가적인 과정들이 포함되어 있기때문이 아닐까 싶다.

그럼에도 불구하고 텍스트 번역에서 제한된 5000자 이상의 번역이 필요한 경우에는

파파고 문서 번역을 이용해야 한다.

 

문서 번역 역시 시간은 더 소요되지만 잘 번역되고 있다.

좀 더 복잡한 내용의 번역도 테스트해보고 싶으나 비용이 발생할 수 있으므로 

여기까지 맛보기만 해보기로 하자.

 

추가로 작성자가 테스트를 하며 가장 많이 만났던 에러코드가 429 코드이다.

유료버젼을 사용하기전 무료버젼에서 테스트를 진행했을 경우

하루에 번역할 수 있는 양이 제한되어 있기 때문에 발생했던 에러 코드이다.

유료버젼 경우에도 하루에 번역할 수 있는 양은 제한되어 있다.

반응형

관련글 더보기

댓글 영역