티스토리 뷰

0. 주저리주저리

네이버의 몇 API를 살펴보던 중 파파고가 그나마 괜찮을 것 같아서 한번 써봤다. 이전에 검색 API를 사용해봤는데 활용법을 잘 모르겠어서, 그나마 활용해볼 수 있는(?) 번역 API를 사용해봤다. 사용법은 정말 간단하고 네이버 홈페이지에 아주 잘 나와있다.

 

1. 사용

우선,

developers.naver.com/

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음

developers.naver.com

이곳으로 이동해서 번역(파파고) 애플리케이션을 하나 만들어서 client키와 secret을 발급받자, 그러면 사용할 준비 끝.

 

 

developers.naver.com/docs/papago/papago-nmt-api-reference.md

 

Papago 번역 API 레퍼런스 - Papago API

Papago 번역 API 레퍼런스 인공 신경망 기반 기계 번역 설명 인공 신경망 기반의 기계 번역(NMT, Neural Machine Translation) 결과를 반환합니다. 요청 URL https://openapi.naver.com/v1/papago/n2mt 프로토콜 HTTPS HTTP 메

developers.naver.com

위의 링크를 들어가면 파파고 api를 쓸 때, 주의해야 할 점 및 데이터의 구조 등을 알 수 있다. 명세라고 보면 될 것 같다.

 

이 레퍼런스에 있는 내용들을 코드와 함께 하나씩 살펴보겠다. (예제 코드도 잘 나와있음)

 

파파고 번역 API는 '인공 신경망 기반의 기계 번역(NMT, Neuural Machine Translation) 결과를 반환합니다.'라고 설명하고 있다. 머신 러닝(Machine Learning)을 사용해서 학습하는 듯하다.

 

그다음, 요청 URL에 대해서 설명하고 있다. 이 부분은 C# 코드에서 HTTPWebRequest의 url을 연결할 때, 매개변수로 들어가야 하는 값이다.

출처 https://developers.naver.com/docs/papago/papago-nmt-api-reference.md

string url = "https://openapi.naver.com/v1/papago/n2mt";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

 

프로토콜이 나온다. HTTPS를 사용하고, Method는 POST형식을 사용한다.

그래서 코드에서도 POST를 사용한다는 것을 명시해주어야 한다.

// Client ID, Secret을 Header에 add하고,
//Method 지정
request.Method = "POST";

Method를 지정하기 전에 http header에 client id와 secret을 넣어야 한다.

 

파라미터도 소개하고 있는데, 

source, target, text이 3개만 있다. 그렇게 복잡하지도 않다.

한국어에서 영어로 안녕하세요를 번역하고자 한다면 source는 한국어, target은 영어, text는 안녕하세요가 된다.

여기서, 한국어, 영어는 사전에 정해진 코드가 있다. 그래서 API를 사용할 때는 이 레퍼런스를 꼭 보면서 개발을 이어나가야 한다.

 

출처 https://developers.naver.com/docs/papago/papago-nmt-api-reference.md
출처 https://developers.naver.com/docs/papago/papago-nmt-api-reference.md

번역할 수 있는 언어들의 조합도 정해져 있다. 지원하는 언어는 더 많다. (사진이 너무 커져서 앞에 몇 개만 가져왔습니다.) 이미지의 밑에 출처를 달아놓았으니 링크로 들어가시면 보실 수 있습니다.

//source ko, target en 한->영 query문장을 번역.
byte[] byteDataParams = Encoding.UTF8.GetBytes("source=ko&target=en&text=" + query);

source에 한국어 코드, target에 영어 코드를 넣어 '한국어인 query를 영어로 번역하겠다.'를 의미.

 

그래서 요청하는 데이터의 모습은,

보내기 전에 ContentType도 위와 같이 설정해주어야 한다.

 request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteDataParams.Length;

 

 

위와 같은 절차를 거쳐서 요청을 하면 응답은 JSON의 형태로 돌아온다.

출처 https://developers.naver.com/docs/papago/papago-nmt-api-reference.md

message 객체 안에 type, service, version, result가 있고, result 객체 안에 srcLangType, targetLangType, translateText가 들어있습니다. key값들만 봐도 저게 다 무엇을 의미하는지 다 유추가 되실 겁니다.

그래서 필요에 따라서 다른 key들을 사용해서 값들을 얻고 대부분 번역 API에서 얻고자 하는 것은 translatedText이기 때문에 추가적인 코드를 넣어 value에 해당하는 번역된 string을 얻어보는 과정까지 한번 코드로 짜 보겠습니다.

 

추가적으로 넣은 코드는 몇 줄이 채 안됩니다.

네이버에서 예제 코드를 제공하고 있고, 그것만으로도 잘 동작하며, 어떠한 '번역'의 역할을 하는 모듈을 만드는데 80% 정도 제공한다고 생각합니다.(나머지 20%는 Json파싱 후 필요한 부분에 사용하기 위해 재 가공하는 등..)

 

2. 코드

 private void btn_translate_Click(object sender, EventArgs e)
        {
            //요청 url 설정
            string url = "https://openapi.naver.com/v1/papago/n2mt";

            //url을 사용해서 httprequest생성
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            //Header에 정보 추가
            request.Headers.Add("X-Naver-Client-Id", "ID값");
            request.Headers.Add("X-Naver-Client-Secret", "Secret값");
            request.Method = "POST";
            string query = text_input.Text; //번역하고자 하는 문장.

            //source ko, target en 한->영 query문장을 번역.
            byte[] byteDataParams = Encoding.UTF8.GetBytes("source=ko&target=en&text=" + query);

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteDataParams.Length;

            //request
            Stream rqstream = request.GetRequestStream();
            rqstream.Write(byteDataParams, 0, byteDataParams.Length);
            rqstream.Close();

            //response
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream rpstream = response.GetResponseStream();
            StreamReader reader = new StreamReader(rpstream, Encoding.UTF8);

            string text = reader.ReadToEnd();
            response.Close();
            rpstream.Close();
            reader.Close();

            text_result.Text = text;

            //Json parsing
            JObject ret = JObject.Parse(text);
            text_parsed.Text = ret["message"]["result"]["translatedText"].ToString();

        }

추가적으로 JSON을 파싱 하기 위해 Newtonsoft패키지를 다운로드하고 참조시켰다. C#의 JSON파싱이나 XML 파싱은 다음에 간단히 업로드해야겠다.

 

응답 예를 보면 message객체 안, result객체 안의 translatedText키에 번역된 결과가 나오기 때문에 다음과 같이 접근하도록 했다.

 

눈에 잘 보이도록 C# winform(아주 간단히)을 사용해서 결과를 확인해보자

 

잘 동작하는 것을 볼 수 있다.

위는 JSON을 파싱 하기 전, 밑은 파싱 한 결과를 나타내고 있다. 위 json형식에서 필요한 부분이 있다면 단순히 접근해서 사용하면 된다.

 

유용한 api가 있으면 또 사용해봐야겠다. :)

 

'개발 > C#' 카테고리의 다른 글

[C#/JSON] JSON parser 구현  (0) 2021.01.02
[C#/ XML] XML parser 구현  (0) 2021.01.01
[C#/API] 네이버 API 사용해보기 (검색 API / naver API)  (0) 2020.12.11
[C# / Collection] Queue<T> 분석  (0) 2020.09.27
[C# / Collection] List<T> 분석  (0) 2020.09.15
댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday