pytorch

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

알로호모라 2022. 10. 12. 17:29
반응형

일반 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

 

반응형