형태소 분석기 Mecab 사용하기 A to Z(설치부터 단어 우선순위 등록까지)

kjyggg·2020년 7월 26일
3

python 에서 형태소 분석을 위해 Mecab 을 사용하고 있다. 다른 형태소 분석기에 비해 성능
(속도, 분석능력) 이 좋아서 사용하고 있는데 설치와 사전 사용이 까다로워서 정리해보고자 한다.

모든 환경은 python3.7, windows10에서 진행했습니다.

1. python 에서 eunjeon 라이브러리 다운

!pip install eunjeon

2. mecab 형태소 분석기를 실행

from eunjeon import Mecab
m = Mecab()
m.pos("이것은 메캅 테스트입니다. 사용자 사전을 등록하기 전입니다. 비타500")

결과

[('이것', 'NP'), ('은', 'JX'), ('메', 'NNP'), ('캅', 'NNP'),
('테스트', 'NNG'), ('입니다', 'VCP+EF'), ('.', 'SF'), ('사용자', 'NNG'),
('사전', 'NNG'), ('을', 'JKO'), ('동록', 'NNG'), 
('하', 'XSV'), ('기', 'ETN'), ('전', 'NNG'), 
('입니다', 'VCP+EF'), ('.', 'SF'),
('비타', 'NNP'), ('500', 'SN')]

2번결과를 보면 '메캅' 이 (메,캅) 으로 나눠져 있고 비타500은 (비타, 500) 나뉨
사용자 사전 등록 을 이용해서 해당 단어들을 명사로 인식하도록 등록해줄 것임

3. 사용자 사전에 커스텀 단어 등록해주기.

여기서 부터 설치가 조금 까다로워진다. (사용자 단어를 등록할 필요가 없으신 분들은 2번까지만 보시면 됩니다.)

설치해야할 파일은 크게 2가지가 있다.

두 파일을 모두 설치했으면 아래 설명에 따라서 파일을 셋팅해주시면 됩니다.

C 드라이브에 mecab 폴더를 만들어줍니다.


1번에서 설치한 mecab-ko-dic-msvc 디렉토리 내의 폴더를 C:\mecab 폴더 안에 넣어줍니다.


2번에서 설치한 mecab-dic-msvc 디렉토리 내의 폴더를 1번과 같이 C:\mecab 폴더 안에 넣어 줍니다. (아래와 같이 생긴 파일)


1번과 2번 과정이 끝나면 C:\mecab 폴더에는 다음과 같은 파일들이 만들어 집니다.


4. 사용자 사전 등록하기

1. C:\mecab\user-dic 에서 custom.csv 생성

해당 파일에 아래와 같은 형식으로 추가할 단어 등록하기

debug) 저는 위와 같은 방법으로 커스텀 단어 등록이 안먹혀서 txt 파일을 만들고 해당 파일을 ①다른이름 으로 저장 인코딩 방식을 ②.csv로 확장자 바꿔주기 ③인코딩 UTF-8 변환 해서 사용했습니다.

2. powershell 실행하기(관리자 권한)

$C:\mecab> tools\add-userdic-win.ps1

powershell 실행 모습

3. 등록이 잘 됐는지 테스트

from eunjeon import Mecab
m = Mecab()
m.pos("이것은 메캅 테스트입니다. 사용자 사전을 등록한 후입니다. 비타500")
[('이것', 'NP'), ('은', 'JX'), ('메캅', 'NNP'), ('테스트', 'NNG'), 
('입니다', 'VCP+EF'), ('.', 'SF'), ('사용자', 'NNG'), ('사전', 'NNG'), ('을', 'JKO'), ('동록', 'NNG'), ('한', 'XSA+ETM'), 
('후', 'NNG'), ('입니다', 'VCP+EF'), ('.', 'SF'), ('비타500', 'NNP')]

메캅과 비타500이 명사로 잘 등록이 된 것을 볼 수 있다. 잘 됐으면 다음거 안보셔도 됩니다.
단어별 출력 우선순위 정하는 방법이 궁금하시면 5번으로 이동


4. 만약 해당 방법을 시도했는데 안된다면

  1. 먼저 해당 단어가 등록됐는지 확인합니다.

    등록 확인하는 법 :
    아래 사진과 같이 user-custom.csv 가 만들어졌다면 단어가 잘 등록된 것입니다.

    만약 해당 파일이 없다면 파일 셋팅이 잘못된 것입니다. 처음부터 다시 설치 해보세요

  2. 설치가 잘 됐는데 테스트시 등록한 단어가 나오지 안는다면

    • 인코딩 에러 : 4.1 debug 참고해서 한번 더 시도해 보시길 바랍니다.(저는 이 방법으로 수정 됐습니다)

    • 단어비용의 문제 : mecab 은 각 단어별로 단어비용이란 것이 존재합니다. 이 비용이 낮은 순서대로 우선순위를 부여해서 기준에 따라 출력을 하는 것입니다. 따라서 기존 단어에 대한 비용이 커스텀 사전으로 등록한 단어보다 낮게되면 우선순위가 기존단어 > 사전에 등록한 단어 가 되어 커스터마이징이 실패할 수 있는것입니다.

5. 단어 비용 정해주기

단어 우선순위 정하는법

1. C:\mecab\mecab-ko-dic 로 이동


2. user-custom.csv 실행


실행하면 아래와 같이 나옵니다 여기서 4번째 칼럼값(여기선2953) 이 이 단어의 비용입니다.
해당 단어의 비용을 0으로 고쳐줍니다. 충분이 낮게 만들면 됩니다.


3. powershell 에서 컴파일

$C:\mecab> tools\compile-win.ps1


위 빨간색으로 밑줄친 파일이 user-compile.csv 에서 설정한 단어비용을 컴파일 해서 사전에 적용시켜주는 놈입니다.
이후 단어 등록시에 굳이 custom.csv 에 단어 추가 할 필요 없이 계속 user-custom.csv 에 단어 넣고 저놈으로 컴파일만 해주면 사전에 단어 알아서 등록됩니다.

이상으로 Mecab 형태소 분석기를 사용하는 법을 알아봤습니다. 사용자 사전 등록이 안돼서 반나절은 날렸는데 다른 분들은 이글 보고 삽질하지 않으시길 바랍니다. 감사합니다.

2개의 댓글

comment-user-thumbnail
2021년 4월 6일

안녕하세요! 다름이 아니라 설치과정까지 따라하고 다 했는데 사전 자체를 못읽어 오는거 같은데 해결방법이 있을까요?ㅠㅠ사용자 사전만 안되는게 아니고 user-dic에 기본으로 있는 nnp.csv나 다른 csv에 있는 내용도 적용이 안됩니다... 3일째 구글 뒤지면서 찾는데 해결이 안되네요...powershell로 명령어 실행하면 파일내부에 글쓰신것처럼 다 되는데 코드 실행하면 안되네요...메모장으로도 안되고ㅠㅠ

1개의 답글