NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Web 3부 - 네이버 기계 번역 API 사용하기. (NAVER Translator API)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오늘은 네이버 기계 번역에 대해서 알아보겠습니다. 이전 시간에 알아본 MS Bing 번역기보다는 예제를 따라하기가 쉽습니다^^; 우선 아래 경로로 이동하여 "오픈 API 이용 신청"을 작성하세요.

    네이버 번역 API 신청하기 ]

     

    네이버 기계 번역 서비스를 이요하기 위한 개발자 페이지입니다. 이곳에서 서비스 이용 신청을 해야 합니다.

    CzC3FKn.png

     

     

    필수 정보를 모두 입력한 후 등록하기를 클릭하면 ClientID와 ClientSecret 키가 발급됩니다. 프로그램에서 번역 서비스를 호출할 때 필요하므로 꼭 메모 해두세요^^

    NW8fqSO.png

     

     

    기계 번역에 대한 자세한 내용은 아래 링크를 통해 확인할 수 있습니다.

    네이버 기계 번역 개발 가이드. ]

     

    네이버 개발 가이드를 참고하여 C# 윈폼에서 번역 기능을 구현하려면 몇가지 추가적인 사항이 필요합니다. 아래는 네이버 번역기를 사용하는 전체 소스입니다.

    NaverTranslator.cs

    using System.IO;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    namespace NGMASTERSubtitleConverter.Behaviors
    {
        public class NaverTranslator : ITranslator
        {
            string clientID; string clientSecret; public NaverTranslator(string clientID, string clientSecret) { this.clientID = clientID; this.clientSecret = clientSecret; }
            public string Translate(string text, string from, string to)
            {
                string result;
                ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
                WebRequest request = WebRequest.Create("https://openapi.naver.com/v1/language/translate");
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.Headers.Add("cache-control", "no-cache");
                request.Headers.Add("charset", "UTF-8");
                request.Headers.Add("X-Naver-Client-Id", clientID);
                request.Headers.Add("X-Naver-Client-Secret", clientSecret);
     
                // Parameters
                string parameters = string.Format("source={0}&target={1}&text={2}", from.Substring(0, 2), to.Substring(0, 2), text);
                byte[] bytes = Encoding.UTF8.GetBytes(parameters);
                request.ContentLength = bytes.Length;
                Stream writeStream = request.GetRequestStream();
                writeStream.Write(bytes, 0, bytes.Length);
                writeStream.Close();
                WebResponse response = request.GetResponse();
                using (Stream readStream = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(readStream, Encoding.UTF8); result = reader.ReadToEnd();
                }
     
                string resultText = "translatedText";
                int startIndex = result.IndexOf(resultText) + resultText.Length + 3;
                int endIndex = result.LastIndexOf('"');
     
                if (result.Length > startIndex && result.Length > endIndex)
                    result = result.Substring(startIndex, endIndex - startIndex);
                else
                    result = string.Format("ERROR: {0}", "번역을 정상적으로 완료하지 못했습니다.");
     
                return result;
            }
            public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
            {
                return true;
            }
        }
    }

     

     

    이 코드에서 추가로 처리해야 하는 사항은 2가지입니다. 첫번째는 네이버 번역 서비스를 호출할 때 HTTPS(HyperText Transfer Protocol over Secure socket layer)를 사용해야 합니다. 두번째는 서비스를 호출하고 반환받은 값을 적절히 파싱할 수 있어야 합니다. 이는 Json 형석을 파싱할 수 있는 별도의 라이브러리가 필요하다는 뜻입니다. 라인 4와 63~66은 웹서비스를 호출(HTTPS)할 때 서버 인증서의 유효성을 통과한 것으로 처리합니다. 51~53은 번역 서비스를 호출하고 반환받은 Json 값입니다. 여기에서 필요한 값은 TranslatedText에 있는 Value입니다. 사실 정해진 규칙을 가지고 있으므로 네이버 개발자 사이트에서 구조를 파악한 후 파서를 직접 제작해도 됩니다. 하지만, 그리 복잡한 구조가 아닌데다 나머지 정보들은 불필요하므로 파서를 만들지는 않았습니다.

    tVoKLcX.jpg

     

     

    이렇게 해서 무료 번역 서비스를 제공하고 있는 네이버와 마이크로소프트의 API에 대해 알아보았습니다. 구글도 해보려고 했으나... 유료인 관계로 구글은 처리하지 않았습니다-_-;

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.