package itn.let.komoran; import java.util.ArrayList; import java.util.List; import itn.com.cmm.util.MJUtil; import kr.co.shineware.nlp.komoran.constant.DEFAULT_MODEL; import kr.co.shineware.nlp.komoran.core.Komoran; import kr.co.shineware.nlp.komoran.model.KomoranResult; import kr.co.shineware.nlp.komoran.model.Token; public class KomoranUtils { public List parseKomoranTextByList(String ocrText, String filePath) throws Exception { Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); /* * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. * Ex) 톡줘 NNP * */ komoran.setUserDic(filePath + "komoran/dic.user"); String strToAnalyze = ocrText; KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 String resultText = analyzeResultList.getPlainText(); //형태소 분석 각 단어별 토큰화 시킴 List tokenList = analyzeResultList.getTokenList(); List resultTokenList = new ArrayList(); String[] split = resultText.split("\n"); //String[] split = resultText.split(System.getProperty("line.separator").toString()); /*for(String text : split) { //text = text.replace(System.getProperty("line.separator").toString(), ""); text = text.replace("\r", ""); text = text.replaceAll("/SW ", ""); resultTokenList.add(text); }*/ for (Token token : tokenList) { //System.out.format("(%2d, %2d) %s/%s\n", token.getBeginIndex(), token.getEndIndex(), token.getMorph(), token.getPos()); String pos = token.getPos(); //형태소 종류 String mor = token.getMorph(); //분석 단어 /* NNG 일반명사 * NNP 고유명사 * NNB 의존명사 * NP 대명사 * NR 수사 * VV 동사 * VA 형용사 * SL 외국어 * SH 한자 * NF 명사추정범주 * */ if(pos.contains("NNG") || pos.contains("NNP") || pos.contains("NP") || pos.contains("VV") || pos.contains("VA") || pos.contains("SL") || pos.contains("SH") || pos.contains("NF")) { resultTokenList.add(mor); } } //토큰 단어에서 중복 단어는 제거 후 리턴 return MJUtil.getDuplicateList(resultTokenList); } public List parseKomoranTextTypeNNGByList(String ocrText, String filePath) throws Exception { Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); /* * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. * Ex) 톡줘 NNP * */ komoran.setUserDic(filePath + "komoran/dic.user"); String strToAnalyze = ocrText; KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 String resultText = analyzeResultList.getPlainText(); //형태소 분석 각 단어별 토큰화 시킴 List tokenList = analyzeResultList.getTokenList(); List resultTokenList = new ArrayList(); String[] split = resultText.split("\n"); //String[] split = resultText.split(System.getProperty("line.separator").toString()); for(String text : split) { //text = text.replace(System.getProperty("line.separator").toString(), ""); /* text = text.replace("\r", ""); text = text.replaceAll("/SW ", ""); resultTokenList.add(text);*/ } for (Token token : tokenList) { //System.out.format("(%2d, %2d) %s/%s\n", token.getBeginIndex(), token.getEndIndex(), token.getMorph(), token.getPos()); String pos = token.getPos(); //형태소 종류 String mor = token.getMorph(); //분석 단어 /* NNG 일반명사 * NNP 고유명사 * NNB 의존명사 * NP 대명사 * NR 수사 * VV 동사 * VA 형용사 * SL 외국어 * SH 한자 * NF 명사추정범주 * */ if(pos.contains("NNG") || pos.contains("NNP") || pos.contains("NP") || pos.contains("SL") || pos.contains("NF")) { resultTokenList.add(mor); } } //토큰 단어에서 중복 단어는 제거 후 리턴 return MJUtil.getDuplicateList(resultTokenList); } public String parseKomoranTextByString(String ocrText, String filePath) throws Exception { Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); /* * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. * Ex) 톡줘 NNP * */ komoran.setUserDic(filePath + "komoran/dic.user"); String strToAnalyze = ocrText; KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 String resultText = analyzeResultList.getPlainText(); //형태소 분석 각 단어별 토큰화 시킴 List tokenList = analyzeResultList.getTokenList(); List resultTokenList = new ArrayList(); String[] split = resultText.split("\n"); for(String text : split) { text = text.replace("\r", ""); text = text.replaceAll("/SW ", ""); resultText = text; } //System.out.println(resultText); return resultText; } public List parseKomoranWordCloudNNGByList(String ocrText, String filePath) throws Exception { List resultTokenList = new ArrayList(); try { Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); /* * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. * Ex) 톡줘 NNP * */ komoran.setUserDic(filePath + "komoran/dic.user"); String strToAnalyze = ocrText; KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 String resultText = analyzeResultList.getPlainText(); //System.out.println("=============start===================="); //System.out.println(strToAnalyze); //System.out.println("+++++++++"); //System.out.println(resultText); //System.out.println("==============end====================="); //형태소 분석 각 단어별 토큰화 시킴 List tokenList = analyzeResultList.getTokenList(); for (Token token : tokenList) { String pos = token.getPos(); //형태소 종류 String mor = token.getMorph(); //분석 단어 /* NNG 일반명사 * NNP 고유명사 * NNB 의존명사 * NP 대명사 * NR 수사 * VV 동사 * VA 형용사 * SL 외국어 * SH 한자 * NF 명사추정범주 * */ if(mor.length() > 1 && (pos.contains("NNG") || pos.contains("NNP") || pos.contains("NNB") || pos.contains("NP") || pos.contains("SL") || pos.contains("VV") || pos.contains("VA") || pos.contains("NF"))) { resultTokenList.add(mor); } } } catch (Exception e) { System.out.println("+++++++++++++++ parseKomoranWordCloudNNGByList Error !!! " + e); } //토큰 단어에서 중복 단어는 제거 후 리턴 return resultTokenList; } }