관리 메뉴

솜씨좋은장씨

Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! (2023년 업데이트 버전) 본문

머신러닝 | 딥러닝/자연어처리

Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! (2023년 업데이트 버전)

솜씨좋은장씨 2023. 4. 22. 22:06
728x90
반응형

2020.11.04 - [머신러닝 | 딥러닝/자연어처리] - Google Colab에서 mecab-ko-dic 사용자 사전 추가하기!

 

Google Colab에서 mecab-ko-dic 사용자 사전 추가하기!

from konlpy.tag import Mecab mecab = Mecab() print(mecab.pos("솜씨좋은장씨의 개발블로그")) 최근 Google Colab에서 mecab에 사용자 사전을 추가하는 방법에 대해서 문의 하시는 분이 많기도 하셨고 저도 mecab에서

somjang.tistory.com

이전에 작성하였던 Colab 에서 mecab-ko-dic 사용자 사전 추가 방법이

이런 저런 오류들이 많이 발생하여 여러 종류의 질문이 많이 들어왔었습니다.

간만에 자세하게 이것저것 테스트해볼 수 있게 되어

그동안 미루고 미뤘던 내용들을 모두 수정 할 수 있게 되었습니다.

 

기존 글을 수정해볼까 하다가 2023년 업데이트 버전으로 글을 다시 작성해보았습니다.

generating userdic...
nnp.csv
/content/mecab-ko-dic-2.1.1-20180720/tools/../model.def is not a binary model. reopen it as text mode...
dictionary.cpp(171) [property.open(param)] 
person.csv
/content/mecab-ko-dic-2.1.1-20180720/tools/../model.def is not a binary model. reopen it as text mode...
dictionary.cpp(171) [property.open(param)] 
place.csv
/content/mecab-ko-dic-2.1.1-20180720/tools/../model.def is not a binary model. reopen it as text mode...
dictionary.cpp(171) [property.open(param)] 
user-nnp.csv
/content/mecab-ko-dic-2.1.1-20180720/tools/../model.def is not a binary model. reopen it as text mode...
dictionary.cpp(171) [property.open(param)] 
/bin/bash ./config.status --recheck
running CONFIG_SHELL=/bin/bash /bin/bash ./configure --no-create --no-recursion
./configure: line 1692: syntax error near unexpected token `mecab-ko-dic,'
./configure: line 1692: `AM_INIT_AUTOMAKE(mecab-ko-dic, 2.0.0)'
make: *** [Makefile:233: config.status] Error 2
/bin/bash ./config.status --recheck
running CONFIG_SHELL=/bin/bash /bin/bash ./configure --no-create --no-recursion
./configure: line 1692: syntax error near unexpected token `mecab-ko-dic,'
./configure: line 1692: `AM_INIT_AUTOMAKE(mecab-ko-dic, 2.0.0)'
make: *** [Makefile:233: config.status] Error 2

add-userdic.sh 를 실행하면 발생하는 에러를 해결해보았습니다.

 

Colab 환경에서 바로 보고싶으신 분은 아래 링크로 이동하여 확인해주세요.

 

mecab_사용자_사전_추가_방법.ipynb

Colaboratory notebook

colab.research.google.com

1. Colab 환경에서 mecab 설치하기

2019.09.12 - [머신러닝 | 딥러닝/자연어처리] - Google Colab에서 Mecab-ko-dic 쉽게 사용하기

 

Google Colab에서 Mecab-ko-dic 쉽게 사용하기

요즘 멀티캠퍼스에서 자연어처리에 대한 교육을 받으며 사용했던 은전한닢 프로젝트 라이브러리인 Mecab-ko-dic을 Google Colab에서 간단한 몇가지 명령어를 통하여 설치하고 사용할 수 있도록 Shell Sc

somjang.tistory.com

 

GitHub - SOMJANG/Mecab-ko-for-Google-Colab: Use Mecab Library(NLP Library) in Google Colab

Use Mecab Library(NLP Library) in Google Colab. Contribute to SOMJANG/Mecab-ko-for-Google-Colab development by creating an account on GitHub.

github.com

먼저 Colab 환경에서 mecab 을 설치합니다.

설치 방법은 위 링크를 참고해주세요.

2. 사용자 사전 파일 만들고 저장하기

http://openuiz.blogspot.com/2018/12/mecab-ko-dic.html

 

Mecab-ko-dic 사전관리 방법

C언어, 빅데이터, 검색엔진, 인공지능, 데이터마이닝

openuiz.blogspot.com

위 링크를 참고하여 사용자 사전 파일을 작성하고 user-dic 디렉토리에 저장합니다.

다음은 Python 코드를 활용해서 csv 파일을 만드는 방법입니다.

2-1. mecab-ko-dic 디렉토리 이동하기

cd /content/mecab-ko-dic-2.1.1-20180720
ls

2-2. 종성여부 판단하는 라이브러리 설치 및 함수 작성

!pip install jamo
from jamo import h2j, j2hcj


def get_jongsung_TF(sample_text):
    sample_text_list = list(sample_text)
    last_word = sample_text_list[-1]
    last_word_jamo_list = list(j2hcj(h2j(last_word)))
    last_jamo = last_word_jamo_list[-1]

    jongsung_TF = "T"

    if last_jamo in ['ㅏ', 'ㅑ', 'ㅓ', 'ㅕ', 'ㅗ', 'ㅛ', 'ㅜ', 'ㅠ', 'ㅡ', 'ㅣ', 'ㅘ', 'ㅚ', 'ㅙ', 'ㅝ', 'ㅞ', 'ㅢ', 'ㅐ,ㅔ', 'ㅟ', 'ㅖ', 'ㅒ']:
        jongsung_TF = "F"

    return jongsung_TF

2-3. list 에 담겨있는 (단어, 점수) 를 하나씩 꺼내와 csv 파일로 만드는 함수 작성

def make_user_dic_csv(morpheme_type, word_list, user_dic_file_name):
  file_data = []

  for word, score in word_list:
    jongsung_TF = get_jongsung_TF(word)

    line = f"{word},,,{score},{morpheme_type},*,{jongsung_TF},{word},*,*,*,*,*\n"

    file_data.append(line)

  with open("./user-dic/user-nnp.csv", 'w', encoding='utf-8') as f:
    for line in file_data:
      f.write(line)

2-4. 2-3 에서 작성한 함수를 활용하여 파일 만들고 저장하기

- 파일명 : user-nnp.csv  / 형태소 타입 : NNP

word_list = [('솜씨좋은장씨', 0), ('개발블로그', 0)]

make_user_dic_csv(morpheme_type="NNP", word_list=word_list, user_dic_file_name='user-nnp.csv')

단어별로 점수를 0 으로 주면 형태소 분석 시에 더 높은 우선순위로 반영하게됩니다.

3. 저장한 사용자 사전 파일 적용하기

!bash autogen.sh

!make

!sudo make install

!bash tools/add-userdic.sh

4. 잘 적용되었는지 확인해보기

from konlpy.tag import Mecab

mecab = Mecab()

word_list = ['솜씨좋은장씨', '개발블로그']

for word in word_list:
  print(mecab.pos(word))
[('솜씨좋은장씨', 'NNP')]
[('개발블로그', 'NNP')]

 

읽어주셔서 감사합니다.

Comments