일반 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')]
잘 적용되었다.
삽질에서 구해주신 솜씨좋은장씨님 감사합니다 !!
'pytorch' 카테고리의 다른 글
colab mecab 사용자 정의 사전 세팅, 추가 및 사용하기 실패한 글 (0) | 2022.10.12 |
---|---|
[colab] konlpy mecab 설치 및 사용하기 on macOSX (0) | 2022.09.30 |
[머신러닝/딥러닝] 도대체 Tensor란 무엇인가!!! (0) | 2022.09.20 |
[머신러닝 vs 딥러닝] 비교 및 차이 알아보기 (0) | 2022.09.20 |
[pytorch vs tensorflow] 머신러닝/딥러닝 pytorch로 시작하는 이유! (0) | 2022.09.20 |