[색인어 코딩] 꼬꼬마 색인어 분석기 활용 - 예제 코드 실행 및 분석

     

논문을 쓰기위해 필요한 형태소 분석기를 생각하던 중, 인터넷에서 꼬꼬마 형태소 분석기를 찾았다. java 코드로 만들어진 이 형태소 분석기는 오픈소스로 되어있어서 API만 추가하면 사용할 수 있다.


http://kkma.snu.ac.kr/


기본 예제코드가 적혀있는데 문자열을 분석해 형태소를 반환하는 것과 해당 문자열에서 색인어를 추출하는 기능이 있었다. 


색인어를 추출하는 기능을 실행해 보았더니 명사로 되어있는 키워드만 색인하는 것을 알 수 있었다. 내가 필요로 하는 것은 용언과 명사를 색인하는 것이기 때문에 코드를 수정할 필요가 있다고 생각했다.




위 그림은 형태소를 분석했을 때 나오는 결과화면이다. 


꼬꼬마 한국어 형태소 분석기는 형태소를 "체언,용언,관형사,부사,감탄사,조사,선어말 어미,어말어미,접두사,접미사,어근,부호,분석불능,한글이외"로 나누어 표현하고 각각 형태소 안에 세부 분류를 두어 알파벳으로 표기한다. 



대분류세종 품사 태그심광섭 품사 태그KKMA 단일 태그 V 1.0
태그설명Class설명묶음1묶음2태그설명확률태그저장사전
체언NNG일반 명사NN명사NNNNNG보통 명사NNAnoun.dic
NNP고유 명사NNP고유 명사
NNB의존 명사NX의존 명사NNB일반 의존 명사NNBsimple.dic
UM단위 명사NNM단위 의존 명사
NR수사NU수사NRNR수사NR
NP대명사NP대명사NPNP대명사NP
용언VV동사VV동사VVVVV동사VVverb.dic
VA형용사AJ형용사VAVA형용사VA
VX보조 용언VX보조 동사VXVXV보조 동사VX
AX보조 형용사VXA보조 형용사
VCP긍정 지정사CP서술격 조사 '이다'VCVCP긍정 지정사, 서술격 조사 '이다'VCPraw.dic
VCN부정 지정사VCN부정 지정사, 형용사 '아니다'VCN
관형사MM관형사DT일반 관형사MMDMDT일반 관형사MDsimple.dic
DN수 관형사MDN수 관형사
부사MAG일반 부사AD부사MAMAG일반 부사MAG
MAJ접속 부사MAC접속 부사MAC
감탄사IC감탄사EX감탄사IICIC감탄사IC
조사JKS주격 조사JO조사JJKJKS주격 조사JKSraw.dic
JKC보격 조사JKC보격 조사JKC
JKG관형격 조사JKG관형격 조사JKG
JKO목적격 조사JKO목적격 조사JKO
JKB부사격 조사JKM부사격 조사JKM
JKV호격 조사JKI호격 조사JKI
JKQ인용격 조사JKQ인용격 조사JKQ
JX보조사JXJX보조사JX
JC접속 조사JCJC접속 조사JC
선어말 어미EP선어말 어미EP선어말 어미EEPEPH존칭 선어말 어미EP
EPT시제 선어말 어미
EPP공손 선어말 어미
어말 어미EF종결 어미EM어말 어미EFEFN평서형 종결 어미EF
EFQ의문형 종결 어미
EFO명령형 종결 어미
EFA청유형 종결 어미
EFI감탄형 종결 어미
EFR존칭형 종결 어미
EC연결 어미ECECE대등 연결 어미EC
ECD의존적 연결 어미
ECS보조적 연결 어미
ETN명사형 전성 어미ETETN명사형 전성 어미ETN
ETM관형형 전성 어미ETD관형형 전성 어미ETD
접두사XPN체언 접두사PF접두사XXPXPN체언 접두사XPNsimple.dic
XPV용언 접두사XPV
접미사XSN명사 파생 접미사SN명사화 접미사XSXSN명사 파생 접미사XSN
XSV동사 파생 접미사SV동사화 접미사XSV동사 파생 접미사XSV
XSA형용사 파생 접미사SJ형용사화 접미사XSA형용사 파생 접미사XSA
SA부사화 접미사XSM부사 파생 접미사XSM
SF기타 접미사XSO기타 접미사XSO
어근XR어근XRXRXR어근XR
부호SF마침표물음표,느낌표SY부호 외래어SSFSF마침표물음표,느낌표SFSymbol class
SP쉼표,가운뎃점,콜론,빗금SPSP쉼표,가운뎃점,콜론,빗금SP
SS따옴표,괄호표,줄표SSSS따옴표,괄호표,줄표SS
SE줄임표SESE줄임표SE
SO붙임표(물결,숨김,빠짐)SOSO붙임표(물결,숨김,빠짐)SO
SW기타기호 (논리수학기호,화폐기호)SWSW기타기호 (논리수학기호,화폐기호)SW
분석 불능NF명사추정범주NR미등록어UUNUN명사추정범주NNAN/A
NV용언추정범주UVUV용언추정범주N/A
NA분석불능범주UEUE분석불능범주N/A
한글 이외SL외국어OOLOL외국어NNA
SH한자OHOH한자NNA
SN숫자ONON숫자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에 들어있는 문자중에서 용언과 체언인 문자만 뽑아내면 문서에서 용언과 체언만 색인할 수 있게 된다. 

반응형

댓글

Designed by JB FACTORY