본문 바로가기

pytorch

[최신] colab mecab 사용자사전 쉽게 추가하고 사용하기

반응형

일반 mecab을 google colab에 설치해서 사용자 정의 사전 추가하려니 에러가 계속 나오고 colab 위에서 해결되지 않는 에러들이 있었다. 찾아보니 colab에서 사용하는 mecab이 따로 있었다. 

 

 

 

[google colab에서 mecab 사용자 정의 사전 추가해서 사용하기]

 

1. Mecab-fo-for-Google-Colab 쉘스크립트를 이용하여 Mecab 설치하기 

!git clone https://github.com/SOMJANG/Mecab-ko-for-Google-Colab.git
cd Mecab-ko-for-Google-Colab/
!bash ./install_mecab-ko_on_colab190912.sh

 

2. mecab 사용해보기 

from konlpy.tag import Mecab
mecab = Mecab()
mecab.pos("파이토치어려워")

출력 : [('파이', 'NNG'), ('토치', 'NNG'), ('어려워', 'VA+EC')]

 

 

"파이토치어려워" 라는 문자열이 3개의 형태소로 나눠진다. 품사까지 나오도록 mecab의 pos()함수를 써주었다. 이 외 토크나이징하는 함수들이 더 있다. 

 

* mecab.pos(text) : 품사 태깅

 mecab.morphs(text) : 형태소 단위

 mecab.nouns(text) : 명사 단위

 

"파이토치어려워" 를 사용자 사전에 추가해서 하나의 최소 단어(명사)로 만들어보기 

 

 

3. 사용자 사전 추가해보기 

먼저 사용자 사전의 위치는 user-dic 폴더 안에 있다. 

 

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

mecab-ko-dic 폴더 안에 여러가지 파일들과 tools, user-dic 두 개의 폴더가 있다. user-dic 폴더는 사용자 사전관련, tools는 사용자사전을 실행할 때 사용한다. 

 

user-dic 폴더 안을 살펴보면 

ls user-dic

출력 결과 : nnp.csv person.csv place.csv README.md

 

nnp.csv : 명사

person.csv : 인명

place.csv : 장소

사전을 추가하는 곳이다. "파이토치어려워" 라는 단어를 nnp.csv 명사파일에 등록해보기 

 

 

1) nnp.csv를 읽어와서 변수에 넣기 

with open('./user-dic/nnp.csv', 'r', encoding='utf-8') as f:
    file_data = f.readlines()

file_data 출력해보면

기존에 들어있는 예시 2개가 나온다

출력 결과 : ['대우,,,,NNP,*,F,대우,*,*,*,*,*\n', '구글,,,,NNP,*,T,구글,*,*,*,*,*\n']

 

대우 : 추가할 단어 

NNP : 형태소 종류 

F : 단어의 마지막 글자에 받침이 있으면 T , 없으면 F. 

 

이 외의 각 자리마다의 의미는 추후 공부겸 정리할 예정이다! 

 

 

2) file_data에 추가할 단어 입력 

이전 실패글에서는 vi 또는 vim을 사용하려고 애를 썼는데 이 방법은 colab에서 안되는 건가 ?? !vi 을 하면 계속 실행 중이고 i를 눌러도 편집이 되지 않았다. 기존 vi 편집이 아닌 참고한 블로거 분의 방식대로 아래처럼 하니까 잘 되었다. 

 

file_data.append('파이토치어려워,,,,NNP,*,T,파이토치어려워,*,*,*,*,*\n')
file_data

['대우,,,,NNP,*,F,대우,*,*,*,*,*\n', '구글,,,,NNP,*,T,구글,*,*,*,*,*\n', '파이토치어려워,,,,NNP,*,T,파이토치어려워,*,*,*,*,*\n']

 

파이토치어려워 <- 끝에 받침이 없으므로 F로 해야하는 T로 잘못 입력했다. 

 

file_data = file_data[:-1]

다시 삭제하고 F로 바꾸어서 추가 

['대우,,,,NNP,*,F,대우,*,*,*,*,*\n', '구글,,,,NNP,*,T,구글,*,*,*,*,*\n', '파이토치어려워,,,,NNP,*,F,파이토치어려워,*,*,*,*,*\n']

 

 

 

3) file_data 를 nnp.csv에 write 

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

 

 

4) nnp.csv 출력해보고 내용이 잘 추가되었는지 확인하기 

with open('./user-dic/nnp.csv', 'r', encoding='utf-8') as f:
    file_new = f.readlines()
file_new

['대우,,,,NNP,*,F,대우,*,*,*,*,*\n', '구글,,,,NNP,*,T,구글,*,*,*,*,*\n', '파이토치어려워,,,,NNP,*,F,파이토치어려워,*,*,*,*,*\n']

 

잘 추가되었다. 

 

 

 

5) tools/add-userdic.sh 실행해서 사용자 사전 등록하기

!bash ./tools/add-userdic.sh

 

 

 

6) 마지막 단계 : 컴파일하기 

!make install 

 

 

 

7) 사용자 사전이 잘 적용되는지 확인하기 

from konlpy.tag import Mecab
mecab = Mecab()

print(mecab.pos('파이토치어려워'))

출력 결과 : [('파이토치어려워', 'NNP')]

"파이토치어려워" 가 하나의 단어로 형태소 분석이 잘 되었다 ! 

 

비슷한 단어들이랑 함께 분석해보기 

word_list = ['파이썬어려워', '파이툐치어려워','파이토치어려워']

for word in word_list:
    print(mecab.pos(word))

[('파이썬', 'NNP'), ('어려워', 'VA+EC')]

[('파이', 'NNG'), ('툐치', 'UNKNOWN'), ('어려워', 'VA+EC')]

[('파이토치어려워', 'NNP')]

 

잘 적용되었다. 

 

 

 

전체 코드 보기 : https://github.com/ohse-emily/pytorch/blob/master/colab_mecab_%EC%82%AC%EC%9A%A9%EC%9E%90%EC%82%AC%EC%A0%84%EC%B6%94%EA%B0%80.ipynb

 

GitHub - ohse-emily/pytorch

Contribute to ohse-emily/pytorch development by creating an account on GitHub.

github.com

 

 

 

 

 

 

삽질에서 구해주신 솜씨좋은장씨님 감사합니다 !! 

Reference : https://somjang.tistory.com/entry/Google-Colab%EC%97%90%EC%84%9C-mecab-ko-dic-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%82%AC%EC%A0%84-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0?category=348828 

 

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

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

somjang.tistory.com

 

반응형