package kr.co.shineware.komoran.tutorials;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
public class ShinTest2 {
public static void main(String[] args) throws Exception {
String input = "“당근”, ‘양파sdfgs’, 오4535이’s, 2345수dfgsv박!@#%@$^, /참$%^외^&*/"; // 컴마로 구분된 전처리 전 입력 변수 input
String[] str = input.split(",");
// 컴마 기준으로 나누어서 배열 str 생성
String[] modifdStr = new String[str.length];
// 전처리 결과를 담을 배열 modifdStr 생성
int i = 0;
for (String e : str) {
modifdStr[i] = StringReplace(e);
// 특수문자 제거
modifdStr[i] = modifdStr[i].trim();
// 공백문자 제거
i++;
}
for (int j = 0; j < modifdStr.length; j++) {
try {
String url = "https://stdict.korean.go.kr/api/search.do?certkey_no=1572&key
=14F296AB6ADF1D06A38A8F1B1BF75207&mehtod=include&type_search
=search&q=" + modifdStr[j];
// API 참조 url
DocumentBuilderFactory dbFactoty = DocumentBuilderFactory.newInstance();
// DocumentBuilderFactory: DocumentBuilder(DOM파서)를 생성시키는 Factory class
DocumentBuilder dBuilder = dbFactoty.newDocumentBuilder();
// DocumentBuilder : DOM 파서 객체의 클래스
Document doc = dBuilder.parse(url)
// url에서 파싱하여 변수 doc로 담기
doc.getDocumentElement().normalize();
// 태그 안의 공백 제거
String result = "word,pos,definition,type";
NodeList nList = doc.getElementsByTagName("item");
// item 태그의 노드 리스트 생성
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
// item 리스트 순서대로 노드 처리
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
// 노드 형식이 엘리멘트일 때의 조건
Element eElement = (Element) nNode;
// 처리 중인 item 노드의 엘리멘트 형 변환
result = result + "\n" + (getTagValue("word", eElement).trim() + ","
+ getTagValue("pos", eElement).trim() + "," +
StringReplace2(getTagValue("definition", eElement).trim())
+ "," + getTagValue("type", eElement).trim());
} // if end
} // for end
BufferedOutputStream bs = null;
try {
bs = new BufferedOutputStream(new FileOutputStream("/home/ehdrud1129/
다운로드/20200624_국립국어원_결과" + (j+1) + "_노동경.csv"));
bs.write(result.getBytes());
// Byte형으로만 넣을 수 있음
} catch (Exception e) {
e.getStackTrace();
// TODO: handle exception
} finally {
bs.close();
}
} catch (
Exception e) {
e.printStackTrace();
} // try~catch end
}
}
public static String StringReplace(String str) {
// 한글이 아닌 문자열 제거
String match = "[^\uAC00-\uD7A3\\s]";
str = str.replaceAll(match, "");
return str;
}
public static String StringReplace2(String str) {
// 한글, 점이 아닌 문자열 제거
String match = "[^\uAC00-\uD7A3.\\s]";
str = str.replaceAll(match, "");
return str;
}
private static String getTagValue(String tag, Element eElement) {
// tag값의 정보를 가져오는 메소드
NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes();
// 엘리멘트에서 찾는 이름의 태그로부터 0번째 배열의 자식노드 리스트 생성
Node nValue = (Node) nlList.item(0);
// 노드 리스트 0번 째 노드
if (nValue == null)
return null;
return nValue.getNodeValue();
}
}