-
JAVA
-
PHP
-
C++
-
Python
-
Node.js
JSON parsing을 위해 Gson 라이브러리를 사용하여 제공하고 있습니다. Gson 라이브러리에 대한 자세한 설명은 https://github.com/google/gson 에서 확인 하실 수 있습니다.
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
public class WiseNLUExample {
static public class Morpheme {
final String text;
final String type;
Integer count;
public Morpheme (String text, String type, Integer count) {
this.text = text;
this.type = type;
this.count = count;
}
}
static public class NameEntity {
final String text;
final String type;
Integer count;
public NameEntity (String text, String type, Integer count) {
this.text = text;
this.type = type;
this.count = count;
}
}
static public void main(String[] args) {
// 언어 분석 기술 문어/구어 중 한가지만 선택해 사용
// 언어 분석 기술(문어)
String openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU";
// 언어 분석 기술(구어)
String openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU_spoken";
String accessKey = "YOUR_ACCESS_KEY"; // 발급받은 API Key
String analysisCode = "ner"; // 언어 분석 코드
String text = ""; // 분석할 텍스트 데이터
Gson gson = new Gson();
// 언어 분석 기술(문어)
text += "윤동주(尹東柱, 1917년 12월 30일 ~ 1945년 2월 16일)는 한국의 독립운동가, 시인, 작가이다." +
"중국 만저우 지방 지린 성 연변 용정에서 출생하여 명동학교에서 수학하였고, 숭실중학교와 연희전문학교를 졸업하였다. 숭실중학교 때 처음 시를 발표하였고, 1939년 연희전문 2학년 재학 중 소년(少年) 지에 시를 발표하며 정식으로 문단에 데뷔했다." +
"일본 유학 후 도시샤 대학 재학 중 , 1943년 항일운동을 했다는 혐의로 일본 경찰에 체포되어 후쿠오카 형무소(福岡刑務所)에 투옥, 100여 편의 시를 남기고 27세의 나이에 옥중에서 요절하였다. 사인이 일본의 생체실험이라는 견해가 있고 그의 사후 일본군에 의한 마루타, 생체실험설이 제기되었으나 불확실하다. 사후에 그의 시집 《하늘과 바람과 별과 시》가 출간되었다." +
"일제 강점기 후반의 양심적 지식인으로 인정받았으며, 그의 시는 일제와 조선총독부에 대한 비판과 자아성찰 등을 소재로 하였다. 그의 친구이자 사촌인 송몽규 역시 독립운동에 가담하려다가 체포되어 일제의 생체 실험으로 의문의 죽음을 맞는다. 1990년대 후반 이후 그의 창씨개명 '히라누마'가 알려져 논란이 일기도 했다. 본명 외에 윤동주(尹童柱), 윤주(尹柱)라는 필명도 사용하였다.";
// 언어 분석 기술(구어)
text += "네 안녕하세요 홍길동 교숩니다";
Map<String, Object> request = new HashMap<>();
Map<String, String> argument = new HashMap<>();
argument.put("analysis_code", analysisCode);
argument.put("text", text);
request.put("argument", argument);
URL url;
Integer responseCode = null;
String responBodyJson = null;
Map<String, Object> responeBody = null;
try {
url = new URL(openApiURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
con.setRequestProperty("Authorization", accessKey);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.write(gson.toJson(request).getBytes("UTF-8"));
wr.flush();
wr.close();
responseCode = con.getResponseCode();
InputStream is = con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
String inputLine = "";
while ((inputLine = br.readLine()) != null) {
sb.append(inputLine);
}
responBodyJson = sb.toString();
// http 요청 오류 시 처리
if ( responseCode != 200 ) {
// 오류 내용 출력
System.out.println("[error] " + responBodyJson);
return ;
}
responeBody = gson.fromJson(responBodyJson, Map.class);
Integer result = ((Double) responeBody.get("result")).intValue();
Map<String, Object> returnObject;
List<Map> sentences;
// 분석 요청 오류 시 처리
if ( result != 0 ) {
// 오류 내용 출력
System.out.println("[error] " + responeBody.get("result"));
return ;
}
// 분석 결과 활용
returnObject = (Map<String, Object>) responeBody.get("return_object");
sentences = (List<Map>) returnObject.get("sentence");
Map<String, Morpheme> morphemesMap = new HashMap<String, Morpheme>();
Map<String, NameEntity> nameEntitiesMap = new HashMap<String, NameEntity>();
List<Morpheme> morphemes = null;
List<NameEntity> nameEntities = null;
for( Map<String, Object> sentence : sentences ) {
// 형태소 분석기 결과 수집 및 정렬
List<Map<String, Object>> morphologicalAnalysisResult = (List<Map<String, Object>>) sentence.get("morp");
for( Map<String, Object> morphemeInfo : morphologicalAnalysisResult ) {
String lemma = (String) morphemeInfo.get("lemma");
Morpheme morpheme = morphemesMap.get(lemma);
if ( morpheme == null ) {
morpheme = new Morpheme(lemma, (String) morphemeInfo.get("type"), 1);
morphemesMap.put(lemma, morpheme);
} else {
morpheme.count = morpheme.count + 1;
}
}
// 개체명 분석 결과 수집 및 정렬
List<Map<String, Object>> nameEntityRecognitionResult = (List<Map<String, Object>>) sentence.get("NE");
for( Map<String, Object> nameEntityInfo : nameEntityRecognitionResult ) {
String name = (String) nameEntityInfo.get("text");
NameEntity nameEntity = nameEntitiesMap.get(name);
if ( nameEntity == null ) {
nameEntity = new NameEntity(name, (String) nameEntityInfo.get("type"), 1);
nameEntitiesMap.put(name, nameEntity);
} else {
nameEntity.count = nameEntity.count + 1;
}
}
}
if ( 0 < morphemesMap.size() ) {
morphemes = new ArrayList<Morpheme>(morphemesMap.values());
morphemes.sort( (morpheme1, morpheme2) -> {
return morpheme2.count - morpheme1.count;
});
}
if ( 0 < nameEntitiesMap.size() ) {
nameEntities = new ArrayList<NameEntity>(nameEntitiesMap.values());
nameEntities.sort( (nameEntity1, nameEntity2) -> {
return nameEntity2.count - nameEntity1.count;
});
}
// 형태소들 중 명사들에 대해서 많이 노출된 순으로 출력 ( 최대 5개 )
morphemes
.stream()
.filter(morpheme -> {
return morpheme.type.equals("NNG") ||
morpheme.type.equals("NNP") ||
morpheme.type.equals("NNB");
})
.limit(5)
.forEach(morpheme -> {
System.out.println("[명사] " + morpheme.text + " ("+morpheme.count+")" );
});
// 형태소들 중 동사들에 대해서 많이 노출된 순으로 출력 ( 최대 5개 )
System.out.println("");
morphemes
.stream()
.filter(morpheme -> {
return morpheme.type.equals("VV");
})
.limit(5)
.forEach(morpheme -> {
System.out.println("[동사] " + morpheme.text + " ("+morpheme.count+")" );
});
// 인식된 개채명들 많이 노출된 순으로 출력 ( 최대 5개 )
System.out.println("");
nameEntities
.stream()
.limit(5)
.forEach(nameEntity -> {
System.out.println("[개체명] " + nameEntity.text + " ("+nameEntity.count+")" );
});
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
<?php
// 언어 분석 기술 문어/구어 중 한가지만 선택해 사용
// 언어 분석 기술(문어)
$openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU";
// 언어 분석 기술(구어)
$openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU_spoken";
$accessKey = "YOUR_ACCESS_KEY";
$analysisCode = "ANALYSIS_CODE";
$text = "YOUR_SENTENCE";
// 언어 분석 기술(문어)
$text .= "윤동주(尹東柱, 1917년 12월 30일 ~ 1945년 2월 16일)는 한국의 독립운동가, 시인, 작가이다." .
"중국 만저우 지방 지린 성 연변 용정에서 출생하여 명동학교에서 수학하였고, 숭실중학교와 연희전문학교를 졸업하였다. 숭실중학교 때 처음 시를 발표하였고, 1939년 연희전문 2학년 재학 중 소년(少年) 지에 시를 발표하며 정식으로 문단에 데뷔했다." .
"일본 유학 후 도시샤 대학 재학 중 , 1943년 항일운동을 했다는 혐의로 일본 경찰에 체포되어 후쿠오카 형무소(福岡刑務所)에 투옥, 100여 편의 시를 남기고 27세의 나이에 옥중에서 요절하였다. 사인이 일본의 생체실험이라는 견해가 있고 그의 사후 일본군에 의한 마루타, 생체실험설이 제기되었으나 불확실하다. 사후에 그의 시집 《하늘과 바람과 별과 시》가 출간되었다." .
"일제 강점기 후반의 양심적 지식인으로 인정받았으며, 그의 시는 일제와 조선총독부에 대한 비판과 자아성찰 등을 소재로 하였다. 그의 친구이자 사촌인 송몽규 역시 독립운동에 가담하려다가 체포되어 일제의 생체 실험으로 의문의 죽음을 맞는다. 1990년대 후반 이후 그의 창씨개명 '히라누마'가 알려져 논란이 일기도 했다. 본명 외에 윤동주(尹童柱), 윤주(尹柱)라는 필명도 사용하였다.";
// 언어 분석 기술(구어)
$text .= "네 안녕하세요 홍길동 교숩니다".;
$request = array(
"argument" => array (
"analysis_code" => $analysisCode,
"text" => $text
)
);
try {
$server_output = "";
$ch = curl_init();
$header = array(
"Content-Type:application/json; charset=UTF-8",
"Authorization":{$accessKey}
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $openApiURL);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode ( $request) );
$server_output = curl_exec ($ch);
if($server_output === false) {
echo "Error Number:".curl_errno($ch)."\n";
echo "Error String:".curl_error($ch)."\n";
}
curl_close ($ch);
} catch ( Exception $e ) {
echo $e->getMessage ();
}
echo "result = " . var_dump($server_output);
?>
JSON parsing을 위해 jsoncpp 라이브러리를 사용하여 제공하고 있습니다. jsoncpp 라이브러리에 대한 자세한 설명은 https://github.com/open-source-parsers/jsoncpp 에서 확인 하실 수 있습니다.
HTTP 통신을 위해 curl 라이브러리를 사용하여 제공하고 있습니다. curl 라이브러리에 대한 자세한 설명은 https://curl.haxx.se/libcurl 에서 확인 하실 수 있습니다.
컴파일을 위해서는 아래와 같이 추가된 LIB에 대한 옵션을 추가해야 합니다.
g++ (c++파일명) (JSONCPP)/json/json.h (JSONCPP)/json/json-forwards.h (JSONCPP)/jsoncpp.cpp -I(CURL)/include -lcurl
#include <curl/curl.h>
#include <json/json.h>
#include <iostream>
#include <string>
using namespace std;
size_t writeDataFunc(void *ptr, size_t size, size_t nmemb, std::string stream);
int main() {
// 언어 분석 기술 문어/구어 중 한가지만 선택해 사용
// 언어 분석 기술(문어)
char* openApiURL = (char*)http://aiopen.etri.re.kr:8000/WiseNLU";
// 언어 분석 기술(구어)
char* openApiURL = (char*)"http://aiopen.etri.re.kr:8000/WiseNLU_spoken";
string accessKey = "YOUR_ACCESS_KEY";
string analysisCode = "ANALYSIS_CODE";
string text = "YOUR_SENTENCE";
// 언어 분석 기술(문어)
text <<= "윤동주(尹東柱, 1917년 12월 30일 ~ 1945년 2월 16일)는 한국의 독립운동가, 시인, 작가이다." <<
"중국 만저우 지방 지린 성 연변 용정에서 출생하여 명동학교에서 수학하였고, 숭실중학교와 연희전문학교를 졸업하였다. 숭실중학교 때 처음 시를 발표하였고, 1939년 연희전문 2학년 재학 중 소년(少年) 지에 시를 발표하며 정식으로 문단에 데뷔했다." <<
"일본 유학 후 도시샤 대학 재학 중 , 1943년 항일운동을 했다는 혐의로 일본 경찰에 체포되어 후쿠오카 형무소(福岡刑務所)에 투옥, 100여 편의 시를 남기고 27세의 나이에 옥중에서 요절하였다. 사인이 일본의 생체실험이라는 견해가 있고 그의 사후 일본군에 의한 마루타, 생체실험설이 제기되었으나 불확실하다. 사후에 그의 시집 《하늘과 바람과 별과 시》가 출간되었다." <<
"일제 강점기 후반의 양심적 지식인으로 인정받았으며, 그의 시는 일제와 조선총독부에 대한 비판과 자아성찰 등을 소재로 하였다. 그의 친구이자 사촌인 송몽규 역시 독립운동에 가담하려다가 체포되어 일제의 생체 실험으로 의문의 죽음을 맞는다. 1990년대 후반 이후 그의 창씨개명 '히라누마'가 알려져 논란이 일기도 했다. 본명 외에 윤동주(尹童柱), 윤주(尹柱)라는 필명도 사용하였다.";
// 언어 분석 기술(구어)
text <<= "네 안녕하세요 홍길동 교숩니다"<<;
Json::Value request;
Json::Value argument;
argument["text"] = text;
argument["analysis_code"] = analysisCode;
request["argument"] = argument;
CURL *curl;
curl_slist* responseHeaders = NULL;
curl = curl_easy_init();
if( curl == NULL ) {
cout << "Unable to initialize cURL interface" << endl ;
} else {
responseHeaders = curl_slist_append( responseHeaders , "Content-Type: application/json; charset=UTF-8" ) ;
responseHeaders = curl_slist_append( responseHeaders , ("Authorization: " + accessKey).c_str() ) ;
string requestJson = request.toStyledString();
long statusCode;
string response;
curl_easy_setopt(curl, CURLOPT_URL, openApiURL);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, responseHeaders ) ;
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestJson.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeDataFunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_perform(curl);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &statusCode);
curl_easy_cleanup(curl);
cout << "[responseCode] " << statusCode << endl;
cout << "[responBody]" << endl;
cout << response << endl;
}
return 0;
}
size_t writeDataFunc(void *ptr, size_t size, size_t nmemb, std::string stream) {
size_t realsize = size * nmemb;
std::string temp(static_cast<const char*>(ptr), realsize);
stream.append(temp);
return realsize;
}
python 3.0을 기준으로 작성되었습니다.
HTTP 통신을 위해 urllib3 라이브러리를 사용하여 제공하고 있습니다. Python 3.0 이하의 버전에서 예제를 실행하기 위해서는 별도로 urllib3의 설치가 필요합니다. 설치에 대한 설명은 https://pypi.python.org/pypi/urllib3 를 참고하시기 바랍니다.
urllib3 라이브러리에 대한 자세한 설명은 https://urllib3.readthedocs.io/en/latest/ 에서 확인 하실 수 있습니다.
#-*- coding:utf-8 -*-
import urllib3
import json
// 언어 분석 기술 문어/구어 중 한가지만 선택해 사용
// 언어 분석 기술(문어)
openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU"
// 언어 분석 기술(구어)
openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU_spoken"
accessKey = "YOUR_ACCESS_KEY"
analysisCode = "ANALYSIS_CODE"
text = "YOUR_SENTENCE"
// 언어 분석 기술(문어)
text += "윤동주(尹東柱, 1917년 12월 30일 ~ 1945년 2월 16일)는 한국의 독립운동가, 시인, 작가이다." +
"중국 만저우 지방 지린 성 연변 용정에서 출생하여 명동학교에서 수학하였고, 숭실중학교와 연희전문학교를 졸업하였다. 숭실중학교 때 처음 시를 발표하였고, 1939년 연희전문 2학년 재학 중 소년(少年) 지에 시를 발표하며 정식으로 문단에 데뷔했다." +
"일본 유학 후 도시샤 대학 재학 중 , 1943년 항일운동을 했다는 혐의로 일본 경찰에 체포되어 후쿠오카 형무소(福岡刑務所)에 투옥, 100여 편의 시를 남기고 27세의 나이에 옥중에서 요절하였다. 사인이 일본의 생체실험이라는 견해가 있고 그의 사후 일본군에 의한 마루타, 생체실험설이 제기되었으나 불확실하다. 사후에 그의 시집 《하늘과 바람과 별과 시》가 출간되었다." +
"일제 강점기 후반의 양심적 지식인으로 인정받았으며, 그의 시는 일제와 조선총독부에 대한 비판과 자아성찰 등을 소재로 하였다. 그의 친구이자 사촌인 송몽규 역시 독립운동에 가담하려다가 체포되어 일제의 생체 실험으로 의문의 죽음을 맞는다. 1990년대 후반 이후 그의 창씨개명 '히라누마'가 알려져 논란이 일기도 했다. 본명 외에 윤동주(尹童柱), 윤주(尹柱)라는 필명도 사용하였다.";
// 언어 분석 기술(구어)
text += "네 안녕하세요 홍길동 교숩니다";
requestJson = {
"argument": {
"text": text,
"analysis_code": analysisCode
}
}
http = urllib3.PoolManager()
response = http.request(
"POST",
openApiURL,
headers={"Content-Type": "application/json; charset=UTF-8", "Authorization" : accessKey},
body=json.dumps(requestJson)
)
print("[responseCode] " + str(response.status))
print("[responBody]")
print(str(response.data,"utf-8"))
// 언어 분석 기술 문어/구어 중 한가지만 선택해 사용
// 언어 분석 기술(문어)
var openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU";
// 언어 분석 기술(구어)
var openApiURL = "http://aiopen.etri.re.kr:8000/WiseNLU_spoken";
var access_key = 'YOUR_ACCESS_KEY';
var analysisCode = 'ANALYSIS_CODE';
var text = 'YOUR_SENTENCE';
// 언어 분석 기술(문어)
text += "윤동주(尹東柱, 1917년 12월 30일 ~ 1945년 2월 16일)는 한국의 독립운동가, 시인, 작가이다." +
"중국 만저우 지방 지린 성 연변 용정에서 출생하여 명동학교에서 수학하였고, 숭실중학교와 연희전문학교를 졸업하였다. 숭실중학교 때 처음 시를 발표하였고, 1939년 연희전문 2학년 재학 중 소년(少年) 지에 시를 발표하며 정식으로 문단에 데뷔했다." +
"일본 유학 후 도시샤 대학 재학 중 , 1943년 항일운동을 했다는 혐의로 일본 경찰에 체포되어 후쿠오카 형무소(福岡刑務所)에 투옥, 100여 편의 시를 남기고 27세의 나이에 옥중에서 요절하였다. 사인이 일본의 생체실험이라는 견해가 있고 그의 사후 일본군에 의한 마루타, 생체실험설이 제기되었으나 불확실하다. 사후에 그의 시집 《하늘과 바람과 별과 시》가 출간되었다." +
"일제 강점기 후반의 양심적 지식인으로 인정받았으며, 그의 시는 일제와 조선총독부에 대한 비판과 자아성찰 등을 소재로 하였다. 그의 친구이자 사촌인 송몽규 역시 독립운동에 가담하려다가 체포되어 일제의 생체 실험으로 의문의 죽음을 맞는다. 1990년대 후반 이후 그의 창씨개명 '히라누마'가 알려져 논란이 일기도 했다. 본명 외에 윤동주(尹童柱), 윤주(尹柱)라는 필명도 사용하였다.";
// 언어 분석 기술(구어)
text += "네 안녕하세요 홍길동 교숩니다";
var requestJson = {
'argument': {
'text': text,
'analysis_code': analysisCode
}
};
var request = require('request');
var options = {
url: openApiURL,
body: JSON.stringify(requestJson),
headers: {'Content-Type':'application/json','Authorization':access_key}
};
request.post(options, function (error, response, body) {
console.log('responseCode = ' + response.statusCode);
console.log('responseBody = ' + body);
});