[NLP] 코모란(Komoran) 사용자사전 만들기

    자연어처리에서 가장 많은 시간을 소요하는 것이 무엇일까? 현업이라면 아마 이런 말을 하지 않을까 싶다.

     

    바로 사전을 만드는 작업이다.

     

    자연어처리는 사전을 만들면 만들수록 품질이 좋아지게 되는데 이는 현재 존재하는 오픈 품사 사전이 매우 적으며, 개체명과 신조어 같은 것들이 포함이 되어 있지 않기 때문이다. 

     

    일반적으로 상용 검색엔진에서 제공하는 사전은 약 100만개 이상의 품사를 지원하고 활용하게 되는데 이는 이전 포스팅에서 작성한 형태소 분석 확인 사이트에서 엑소브레인(Exobrain)과 코모란(Komoran)의 형태소 분석 품질을 보면 쉽게 알 수 있다.

     

    오픈소스를 활용해서 구축해야 하는 경우 일반적으로 사용자사전을 상황에 따라 많이 구축하게 되며, 이를 별도로 맡는 분들이 따로 계신다. 마치 딥러닝에서 라벨링을 하는 분들과 유사하다 생각을 하면 되며 대게 국문학과와 같이 언어를 전공한 분들이 품사 사전을 전담하는 경우가 많다.

     

    코모란(Komoran) 사용자사전 만들기


    코모란 사용자 사전 만들기

    코모란에서는 매우 쉽게 사용자 사전을 만들 수 있게 지원을 하고 있다. 사용 방법은 분석을 시작하기 전에 사용자 사전을 읽는 메소드를 호출하면 되는 것이고, 인자값으로 사용자 사전 전체 경로를 추가하면 된다.

     

    기존 내용

    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;
    
    public class NLP {
        public void action() {
            Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);
            String document = "놀면 뭐하니 유재석을 보면 참 부캐들이 많은 것 같아서 재미있어요.";
    
            KomoranResult analyzeResultList = komoran.analyze(document);
            System.out.println(analyzeResultList.getPlainText());
        }
    }

    코모란에서 위 내용의 품사 결과는 아래와 같다.

     

    놀/VV 면/EC 뭐/NNG 하/XSV 니/EC 유재석/NNP 을/JKO 보/VV 면/EC 참/MAG 부/NNG 캐/VV 들/XSN 이/JKS 많/VA 은/ETM 것/NNB 같/VA 아서/EC 재미있/VA 어요/EF ./SF

     

    품사가 워낙 복잡해서 뭔가 어지럽지만 일단 부캐라는 것에 대해서 인지를 못하는 것은 확실히 알 수 있다. 부캐라는 것은 부+캐릭터라는 말이 합쳐진 보통명사이기 때문에 NNG로 등록을 해야 된다. 물론 같은 명사이기 때문에 NNP(고유명사)로 등록해도 형태소 분석을 하는데에 지장은 없다.

     

     

    사전 등록법

    형태소 <탭> 품사

    사전은 원하는 형태소와 등록하고 싶은 품사 사이를 탭(tap)키를 눌러서 띄워주면 된다.

     

    사용자 사전 등록 예시

     

    저장을 한 후, user.dic이라는 이름으로 저장을 하였는데 파일명은 본인이 원하는대로 저장을 하면 되며, 필자는 사전 확장자를 dic으로 하기에 이렇게 이름은 지은것 뿐이니 본인이 선호하는 다른 이름이 있다면 그 이름으로 파일명으로 만들면 된다.

     

    사용자 사전 불러오기

    komoran.setUserDic("user.dic");

    setUserDic에서 파일패스를 넣으면 된다. 

     

    최종 소스 및 형태소 분석 결과

    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;
    
    public class NLP {
        public void action() {
            Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);
            komoran.setUserDic("user.dic");
            String document = "놀면 뭐하니 유재석을 보면 참 부캐들이 많은 것 같아서 재미있어요.";
    
            KomoranResult analyzeResultList = komoran.analyze(document);
            System.out.println(analyzeResultList.getPlainText());
        }
    }
    

     

    위 내용을 실행한 아래의 결과를 보면, 부캐/NNG라고 정상적으로 사용자 사전을 인식한 것을 알 수 있다. 

    놀/VV 면/EC 뭐/NNG 하/XSV 니/EC 유재석/NNP 을/JKO 보/VV 면/EC 참/MAG 부캐/NNG 들/XSN 이/JKS 많/VA 은/ETM 것/NNB 같/VA 아서/EC 재미있/VA 어요/EF ./SF

     

    이렇든 오픈소스 형태소 분석기를 사용할 때에는 사전을 사이트에 맞게 추가 및 확장해줘야 되는 것을 잊지 말고 추가 작업을 하면 엄청난 형태소 분석 품질 향상을 알 수 있게 될 것이다.

     

    댓글

    Designed by JB FACTORY