[색인어 코딩] 꼬꼬마 형태소 분석기 - 형태소 분석에서 용언과 체언 뽑아내기

     



지난 포스팅에서 꼬꼬마 형태소 분석기를 이용하여 형태소 분석과 색인어 추출하는 예제코드를 실행해 보았다. 


예제코드는 String 형태의 문자열에서 형태소와 색인어를 추출했지만, 코드를 조금 수정하면 텍스트파일을 읽어와서 형태소 분석과 색인어를 추출할 수 있다.


하지만 예제코드에서는 명사형태의 색인어만 추출하기 때문에 용언까지 색인할 수 없는 단점이 있다. 이를 개선하기 위해 형태서 분석 결과값을 가지고 색인어를 직접 추출하는 코드를 만들어야 했다.


지난 포스팅에 올렸듯이 형태소 분석의 결과값은 다음과 같은 String 리스트로 출력된다.





형태소 분석후, 용언과 체언을 뽑아내기 위해 약자 NN과 V로 시작하는 단어만 추출하는 코드를 만들어야 했다. 


자바에서 문자열을 추출하는 알고리즘은 여러가지가 있지만 나는 split메소드를 이용하여 문자열을 나누고 추출했다.


split("/")를 사용하여 문자열을 나눈다음 체언과 용언에 해당하는 약자를 가진 문자 단위 바로 앞 문자를 저장하는 코드를 만들었다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  for(int i=0;i< vocList.size();i++){
            String str1 = vocList.get(i);
            String[] spStr = str1.split("\\+");
 
            for(int j=0;j<spStr.length;j++){
                String[] spStr2 = spStr[j].split("/");
                for(int k=0; k<spStr2.length;k++){
                    if(spStr2[k].equals("NNG") || spStr2[k].equals("NNG]")
                            || spStr2[k].equals("NNP") || spStr2[k].equals("NNP]")
                            || spStr2[k].equals("NNB") || spStr2[k].equals("NNB]")
                            || spStr2[k].equals("NR") || spStr2[k].equals("NR]")
                            || spStr2[k].equals("NNG") || spStr2[k].equals("NNG]")
                            || spStr2[k].equals("VV") || spStr2[k].equals("VV]")
                            || spStr2[k].equals("VA") || spStr2[k].equals("VA]")
                            || spStr2[k].equals("VX") || spStr2[k].equals("VX]")
                            || spStr2[k].equals("VCP") || spStr2[k].equals("VCP]")
                            || spStr2[k].equals("VCN") || spStr2[k].equals("VCN]")){
                        resultVoc.add(spStr2[k-1]);
                    }
 
                }
            }
 
        }



예를 들면 


"사진이 => [1346/사진/NNG + 1348/이/JKS]" 라는 형태소 분석 결과를 +로 먼저 나눈다.


"사진이 => [1346/사진/NNG" , "1348/이/JKS]" 라는 두개의 문자열이 생성된다. 이제 이 문자열을 "/"로 split한다.


"사진이 =>" , "1346" , "사진" , "NNG" , "1348" , "이" , "JKS]" 라는 문자열들이 생성된다. 여기서 if문을 통해 약자가 용언이나 체언일경우 바로 앞 문자를 저장하는 코드를 만든다. 


즉 NNG라고 써있는 문자 바로 앞 문자를 저장한다. 위에서는 "사진" , "NNG" 순서로 되어있기 때문에 "NNG" 바로 앞 문자인 "사진"을 색인어로 저장하게 된다. 


이 알고리즘으로 문장을 분석하게 되면 용언과 체언만 추출되어 특정 리스트에 저장된다.




반응형

댓글

Designed by JB FACTORY