[색인어 코딩] 꼬꼬마 색인어 분석기 활용 - 예제 코드 실행 및 분석
- Study/IT 실전 지식
- 2014. 5. 12. 02:48
논문을 쓰기위해 필요한 형태소 분석기를 생각하던 중, 인터넷에서 꼬꼬마 형태소 분석기를 찾았다. java 코드로 만들어진 이 형태소 분석기는 오픈소스로 되어있어서 API만 추가하면 사용할 수 있다.
http://kkma.snu.ac.kr/
기본 예제코드가 적혀있는데 문자열을 분석해 형태소를 반환하는 것과 해당 문자열에서 색인어를 추출하는 기능이 있었다.
색인어를 추출하는 기능을 실행해 보았더니 명사로 되어있는 키워드만 색인하는 것을 알 수 있었다. 내가 필요로 하는 것은 용언과 명사를 색인하는 것이기 때문에 코드를 수정할 필요가 있다고 생각했다.
위 그림은 형태소를 분석했을 때 나오는 결과화면이다.
꼬꼬마 한국어 형태소 분석기는 형태소를 "체언,용언,관형사,부사,감탄사,조사,선어말 어미,어말어미,접두사,접미사,어근,부호,분석불능,한글이외"로 나누어 표현하고 각각 형태소 안에 세부 분류를 두어 알파벳으로 표기한다.
대분류 | 세종 품사 태그 | 심광섭 품사 태그 | KKMA 단일 태그 V 1.0 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
태그 | 설명 | Class | 설명 | 묶음1 | 묶음2 | 태그 | 설명 | 확률태그 | 저장사전 | |
체언 | NNG | 일반 명사 | NN | 명사 | N | NN | NNG | 보통 명사 | NNA | noun.dic |
NNP | 고유 명사 | NNP | 고유 명사 | |||||||
NNB | 의존 명사 | NX | 의존 명사 | NNB | 일반 의존 명사 | NNB | simple.dic | |||
UM | 단위 명사 | NNM | 단위 의존 명사 | |||||||
NR | 수사 | NU | 수사 | NR | NR | 수사 | NR | |||
NP | 대명사 | NP | 대명사 | NP | NP | 대명사 | NP | |||
용언 | VV | 동사 | VV | 동사 | V | VV | VV | 동사 | VV | verb.dic |
VA | 형용사 | AJ | 형용사 | VA | VA | 형용사 | VA | |||
VX | 보조 용언 | VX | 보조 동사 | VX | VXV | 보조 동사 | VX | |||
AX | 보조 형용사 | VXA | 보조 형용사 | |||||||
VCP | 긍정 지정사 | CP | 서술격 조사 '이다' | VC | VCP | 긍정 지정사, 서술격 조사 '이다' | VCP | raw.dic | ||
VCN | 부정 지정사 | VCN | 부정 지정사, 형용사 '아니다' | VCN | ||||||
관형사 | MM | 관형사 | DT | 일반 관형사 | M | MD | MDT | 일반 관형사 | MD | simple.dic |
DN | 수 관형사 | MDN | 수 관형사 | |||||||
부사 | MAG | 일반 부사 | AD | 부사 | MA | MAG | 일반 부사 | MAG | ||
MAJ | 접속 부사 | MAC | 접속 부사 | MAC | ||||||
감탄사 | IC | 감탄사 | EX | 감탄사 | I | IC | IC | 감탄사 | IC | |
조사 | JKS | 주격 조사 | JO | 조사 | J | JK | JKS | 주격 조사 | JKS | raw.dic |
JKC | 보격 조사 | JKC | 보격 조사 | JKC | ||||||
JKG | 관형격 조사 | JKG | 관형격 조사 | JKG | ||||||
JKO | 목적격 조사 | JKO | 목적격 조사 | JKO | ||||||
JKB | 부사격 조사 | JKM | 부사격 조사 | JKM | ||||||
JKV | 호격 조사 | JKI | 호격 조사 | JKI | ||||||
JKQ | 인용격 조사 | JKQ | 인용격 조사 | JKQ | ||||||
JX | 보조사 | JX | JX | 보조사 | JX | |||||
JC | 접속 조사 | JC | JC | 접속 조사 | JC | |||||
선어말 어미 | EP | 선어말 어미 | EP | 선어말 어미 | E | EP | EPH | 존칭 선어말 어미 | EP | |
EPT | 시제 선어말 어미 | |||||||||
EPP | 공손 선어말 어미 | |||||||||
어말 어미 | EF | 종결 어미 | EM | 어말 어미 | EF | EFN | 평서형 종결 어미 | EF | ||
EFQ | 의문형 종결 어미 | |||||||||
EFO | 명령형 종결 어미 | |||||||||
EFA | 청유형 종결 어미 | |||||||||
EFI | 감탄형 종결 어미 | |||||||||
EFR | 존칭형 종결 어미 | |||||||||
EC | 연결 어미 | EC | ECE | 대등 연결 어미 | EC | |||||
ECD | 의존적 연결 어미 | |||||||||
ECS | 보조적 연결 어미 | |||||||||
ETN | 명사형 전성 어미 | ET | ETN | 명사형 전성 어미 | ETN | |||||
ETM | 관형형 전성 어미 | ETD | 관형형 전성 어미 | ETD | ||||||
접두사 | XPN | 체언 접두사 | PF | 접두사 | X | XP | XPN | 체언 접두사 | XPN | simple.dic |
XPV | 용언 접두사 | XPV | ||||||||
접미사 | XSN | 명사 파생 접미사 | SN | 명사화 접미사 | XS | XSN | 명사 파생 접미사 | XSN | ||
XSV | 동사 파생 접미사 | SV | 동사화 접미사 | XSV | 동사 파생 접미사 | XSV | ||||
XSA | 형용사 파생 접미사 | SJ | 형용사화 접미사 | XSA | 형용사 파생 접미사 | XSA | ||||
SA | 부사화 접미사 | XSM | 부사 파생 접미사 | XSM | ||||||
SF | 기타 접미사 | XSO | 기타 접미사 | XSO | ||||||
어근 | XR | 어근 | XR | XR | XR | 어근 | XR | |||
부호 | SF | 마침표물음표,느낌표 | SY | 부호 외래어 | S | SF | SF | 마침표물음표,느낌표 | SF | Symbol class |
SP | 쉼표,가운뎃점,콜론,빗금 | SP | SP | 쉼표,가운뎃점,콜론,빗금 | SP | |||||
SS | 따옴표,괄호표,줄표 | SS | SS | 따옴표,괄호표,줄표 | SS | |||||
SE | 줄임표 | SE | SE | 줄임표 | SE | |||||
SO | 붙임표(물결,숨김,빠짐) | SO | SO | 붙임표(물결,숨김,빠짐) | SO | |||||
SW | 기타기호 (논리수학기호,화폐기호) | SW | SW | 기타기호 (논리수학기호,화폐기호) | SW | |||||
분석 불능 | NF | 명사추정범주 | NR | 미등록어 | U | UN | UN | 명사추정범주 | NNA | N/A |
NV | 용언추정범주 | UV | UV | 용언추정범주 | N/A | |||||
NA | 분석불능범주 | UE | UE | 분석불능범주 | N/A | |||||
한글 이외 | SL | 외국어 | O | OL | OL | 외국어 | NNA | |||
SH | 한자 | OH | OH | 한자 | NNA | |||||
SN | 숫자 | ON | ON | 숫자 | NR |
색인어 추출 코드를 실행할 경우 위에 형태소에서 체언인 부분만 골라내 개수와 함께 나타낸다. 내부API에 의해 체언만 골라내어 추출하기 때문에 코드로 용언까지 색인할 수는 없어서 형태소 분석을 한 결과를 처리하여 용언과 체언이 동시에 색인 되도록 바꾸어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public static ArrayList<String> maTest(String fileName) { String str = readFile(fileName); ArrayList<String> vocList = new ArrayList<String>(); try { MorphemeAnalyzer ma = new MorphemeAnalyzer(); ma.createLogger(null); Timer timer = new Timer(); timer.start(); List<MExpression> ret = ma.analyze(str); timer.stop(); timer.printMsg("Time"); ret = ma.postProcess(ret); ret = ma.leaveJustBest(ret); List<Sentence> stl = ma.divideToSentences(ret); for( int i = 0; i < stl.size(); i++ ) { Sentence st = stl.get(i); //System.out.println("============================================= " + st.getSentence()); for( int j = 0; j < st.size(); j++ ) { //System.out.println(st.get(j)); vocList.add(String.valueOf(st.get(j))); } } //ma.closeLogger(); } catch (Exception e) { e.printStackTrace(); } return vocList; } |
위 코드는 형태소 분석 코드를 약간 수정한 코드이다.
주석처리한 부분은 원래 형태소 분석을 하고 문장과 어절을 출력하는 부분이다.
리스트 stl에는 문장단위로 구성된 문자열이 들어있다. Sentence st는 문장 리스트에서 하나의 문장을 가져오고, st.get(index)라는 메소드를 통해 문장에 있는 어절단위로 문자열을 받아올 수 있다.
원래 예제프로그램에 있던 출력코드 부분을 주석처리하고 대신 어절단위로 분리된 형태소 분석 정보들을 ArrayList<String>인 vocList에 담았다. 이제 vocList에 들어있는 문자중에서 용언과 체언인 문자만 뽑아내면 문서에서 용언과 체언만 색인할 수 있게 된다.
'Study > IT 실전 지식' 카테고리의 다른 글
node.js 시작하기 (0) | 2014.12.11 |
---|---|
포인터에 대한 기본적인 지식 (0) | 2014.12.10 |
java, c++ 캡슐화, encapsulation (0) | 2014.12.06 |
빅 오 표기법 (0) | 2014.11.26 |
[색인어 코딩] 꼬꼬마 형태소 분석기 - 형태소 분석에서 용언과 체언 뽑아내기 (2) | 2014.05.13 |