컴언

네이버 기계번역 API 예제 - Java

공부/Java

NAVER Developers 에서 네이버 기계번역 API 를 시범서비스 중이다. 지원되는 번역 방향은 한국어 <-> 일본어, 중국어, 영어 인데, 이 중 한국어 <-> 일본어 번역이 (특히 문법적으로) 꽤 자연스러운 것 같아 진짜 놀라웠다는. 여담으로 네이버 기계번역에서 영어 문장을 한국어로 번역하면 어조가 어색한 경우가 많더라. 아쉽게도 일일 사용제한량으로 10,000 자 제한이 있으니 주의해야한다. 처음 공개했을 때는 1,000 자 였다니깐 감사히 써야지...


자세한 개발 가이드는 https://developers.naver.com/docs/labs/translator 에서 확인할 수 있고, 아래는 Apache HttpClient(다운로드 페이지로 이동) 로 HTTP Request 를 보내서 얻은 JSON 출력을 json-simple(다운로드 페이지로 이동) 로 처리하는 Java 로 된 예제이다. 


import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;

import org.json.simple.*;
import org.json.simple.parser.JSONParser;


public class Translate {
	private String apiClientId;
	private String apiSecret;
	private String text; // text to be translated
	private String sourceLang; // original language of text
	private String targetLang; // target language for translation
	
	public Translate(String apiClientId, String apiSecret){
		// provide the api key info for Naver Open API Translator here
		this.apiClientId = apiClientId;
		this.apiSecret = apiSecret;
	}
	
	public String translateText(String text, String sourceLang, String targetLang){
		
		/* Method: POST
		 * Request URL: https://openapi.naver.com/v1/language/translate
		 * Return type: JSON
		 * Required Parameters (1) source
		 *					   (2) target
		 *					   (3) text
		 */
		
		
		try{
			String url = "https://openapi.naver.com/v1/language/translate";
			
			HttpClient client = HttpClientBuilder.create().build();
			HttpPost post = new HttpPost(url);
			
			// Set headers for API key authorization 
			post.addHeader("X-Naver-Client-Id", apiClientId);
			post.addHeader("X-Naver-Client-Secret",apiSecret);
			
			// Add parameters for POST
			List<NameValuePair> urlParams = new ArrayList<NameValuePair>();
			urlParams.add(new BasicNameValuePair("source", sourceLang));
			urlParams.add(new BasicNameValuePair("target", targetLang));
			urlParams.add(new BasicNameValuePair("text", text));
			
			// 한국어 일본어 중국어 깨짐 방지!
			post.setEntity(new UrlEncodedFormEntity(urlParams, "UTF-8"));
			
			// Response received after POST. The type of the output is JSON.
			HttpResponse response = client.execute(post);

			BufferedReader rd = new BufferedReader(
			        new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
	
			StringBuffer result = new StringBuffer();
			String line = "";
			while ((line = rd.readLine()) != null) {
				result.append(line);
			}


			// Using json-simple to manipulate the JSON response
			String resultText = result.toString();
			Charset.forName("UTF-8").encode(resultText);
			JSONParser parser = new JSONParser();
			JSONObject obj = (JSONObject) parser.parse(resultText);
			JSONObject message = (JSONObject) obj.get("message");
			
			JSONObject res = (JSONObject) message.get("result");

			String translatedText = (String) res.get("translatedText");
			
			return translatedText;
			
			
			
		}catch(Exception e){
			e.printStackTrace();
		}
	
		
	}
}


'공부 > Java' 카테고리의 다른 글

네이버 기계번역 API 예제 - Java  (2) 2016.06.16