일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 캐치카페
- ubuntu
- Baekjoon
- PYTHON
- SW Expert Academy
- 프로그래머스
- 파이썬
- 데이콘
- 더현대서울 맛집
- Docker
- AI 경진대회
- hackerrank
- 맥북
- programmers
- Git
- github
- leetcode
- Real or Not? NLP with Disaster Tweets
- 금융문자분석경진대회
- gs25
- Kaggle
- 우분투
- 자연어처리
- 편스토랑 우승상품
- 편스토랑
- dacon
- ChatGPT
- 코로나19
- 프로그래머스 파이썬
- 백준
- Today
- Total
솜씨좋은장씨
Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! 본문
from konlpy.tag import Mecab
mecab = Mecab()
print(mecab.pos("솜씨좋은장씨의 개발블로그"))
최근 Google Colab에서 mecab에 사용자 사전을 추가하는 방법에 대해서 문의 하시는 분이 많기도 하셨고
저도 mecab에서 사용자 사전을 추가하여 사용해야하는 경우가 생겨 작성해보았습니다.
2023.04.22 - [머신러닝 | 딥러닝/자연어처리] - Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! (2023년 업데이트 버전)
Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! (2023년 업데이트 버전)
2020.11.04 - [머신러닝 | 딥러닝/자연어처리] - Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! from konlpy.tag import Mecab mecab = Mecab() print(mecab.pos("솜씨좋
somjang.tistory.com
최신 버전은 위 링크에서 확인해주세요! 감사합니다.
현재 버전에서는 추가하는 단어의 순위나 Compound, Preanalysis 여부는 고려하지 않고 그저 추가만 하는 방법입니다.
Google Colaboratory
colab.research.google.com
Colab에서 바로 보시고 싶은 분은 위의 링크를 참고 바랍니다.
먼저 Colab에서 Mecab-ko-for-Google-Colab 쉘스크립트를 활용하여 Mecab을 설치합니다.
해당 방법은 아래의 링크를 참고 바랍니다.
Google Colab에서 Mecab-ko-dic 쉽게 사용하기
요즘 멀티캠퍼스에서 자연어처리에 대한 교육을 받으며 사용했던 은전한닢 프로젝트 라이브러리인 Mecab-ko-dic을 Google Colab에서 간단한 몇가지 명령어를 통하여 설치하고 사용할 수 있도록 Shell S
somjang.tistory.com
from konlpy.tag import Mecab
mecab = Mecab()
print(mecab.pos("솜씨좋은장씨의 개발블로그")
먼저 mecab 설치 후
사용자 사전을 추가하기 전에 솜씨좋은장씨의 개발블로그 라는 문자열을 mecab.pos를 통해 나온 결과를 보면
[('솜씨', 'NNG'), ('좋', 'VA'), ('은', 'ETM'), ('장', 'NNP'), ('씨', 'NNB'), ('의', 'JKG'), ('개발', 'NNG'), ('블로그', 'NNG')]
from konlpy.tag import Mecab
mecab = Mecab()
word_list = ['솜씨좋은장씨', '개발블로그']
for word in word_list:
print(mecab.pos(word))
[('솜씨', 'NNG'), ('좋', 'VA'), ('은', 'ETM'), ('장', 'NNP'), ('씨', 'NNB')]
[('개발', 'NNG'), ('블로그', 'NNG')]
위와 같이
솜씨좋은장씨 라는 단어가 ('솜씨', 'NNG'), ('좋', 'VA'), ('은', 'ETM'), ('장', 'NNP'), ('씨', 'NNB')
개발블로그라는 단어가 ('개발', 'NNG'), ('블로그', 'NNG')
이렇게 나누어 지는 것을 볼 수 있습니다.
이번 글에서는 솜씨좋은장씨 라는 단어와 개발블로그 라는 단어를 추가하는 것을 예시로 적어보겠습니다.
먼저 mecab설치 후 생긴 mecab-ko-dic-2.1.1-2018720 디렉토리로 이동합니다.
저는 /content 위치에 존재하여 먼저 해당 위치의 mecab-ko-dic-2.1.1-2018720 디렉토리로 이동했습니다.
cd /content/mecab-ko-dic-2.1.1-20180720
여기에서 ls를 활용하여 user-dic 디렉토리가 존재하는지 확인합니다.
ls
aclocal.m4 feature.def model.def sys.dic
AUTHORS Foreign.csv NEWS tools/
autogen.sh* Group.csv NNBC.csv unk.def
autom4te.cache/ Hanja.csv NNB.csv unk.dic
ChangeLog IC.csv NNG.csv user-dic/
char.bin Inflect.csv NNP.csv user-nnp.csv
char.def INSTALL NorthKorea.csv user-person.csv
clean* install-sh* NP.csv user-place.csv
CoinedWord.csv J.csv NR.csv VA.csv
config.log left-id.def Person-actor.csv VCN.csv
config.status* MAG.csv Person.csv VCP.csv
configure* MAJ.csv Place-address.csv VV.csv
configure.ac Makefile Place.csv VX.csv
COPYING Makefile.am Place-station.csv Wikipedia.csv
dicrc Makefile.in pos-id.def XPN.csv
EC.csv matrix.bin Preanalysis.csv XR.csv
EF.csv matrix.def README XSA.csv
EP.csv missing* rewrite.def XSN.csv
ETM.csv MM.csv right-id.def XSV.csv
ETN.csv model.bin Symbol.csv
user-dic 디렉토리가 존재하는 것을 확인하였으면 user-dic 안에 어떤 파일들이 있는지 확인해봅니다.
ls user-dic
nnp.csv person.csv place.csv README.md
nnp.csv 는 명사, person.csv 는 인명, place.csv 는 등록되지 않은 장소에 대한 이름을 등록하는 파일입니다.
그럼 nnp.csv를 활용하여 솜씨좋은장씨 와 개발블로그 이 두 개의 단어를 등록해보겠습니다.
먼저 기존 nnp.csv를 with open을 활용하여 파일 데이터를 불러옵니다.
with open("./user-dic/nnp.csv", 'r', encoding='utf-8') as f:
file_data = f.readlines()
file_data
['대우,,,,NNP,*,F,대우,*,*,*,*,*\n',
'구글,,,,NNP,*,T,구글,*,*,*,*,*\n']
불러온 데이터를 보면 위와 같이 대우와 구글이 적혀있는 것을 볼 수 있습니다.
먼저 대우와 구글 두개의 단어는 새로 등록하고자 하는 단어 그자체이고
NNP는 해당 단어의 형태소 종류,
그 다음 나오는 F와 T는 마지막 글자에 받침이 있는지 없는지 ( 종성여부 ) 를 나타내는 것으로
대우에서 마지막 단어인 우에 받침이 없으니 False의 F
구글에서 마지막 단어인 글에 받침이 있으니 True 의 T
이렇게 적어주면 됩니다.
그 외에 , 나 *로 적혀있는 부분들과 자세한 설명은 아래의 링크를 참고 바랍니다.
Mecab-ko-dic 사전관리 방법
C언어, 빅데이터, 검색엔진, 인공지능, 데이터마이닝
openuiz.blogspot.com
이번 글에서는 nnp.csv 에 적혀있는 단어들과 같이 간단하게만 등록해보려합니다.
먼저 등록할 단어 목록을 list 형태로 만들어 주었습니다.
word_list = ["솜씨좋은장씨", "개발블로그"]
그리고 종성여부를 판단하기 위한 라이브러리 설치와 판단하는 함수를 만들어줍니다.
jamo 라이브러리 설치
!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
이렇게 만들었다면 이제 nnp.csv에 단어를 추가합니다.
with open("./user-dic/nnp.csv", 'r', encoding='utf-8') as f:
file_data = f.readlines()
word_list = ['솜씨좋은장씨', '개발블로그']
for word in word_list:
jongsung_TF = get_jongsung_TF(word)
line = '{},,,,NNP,*,{},{},*,*,*,*,*\n'.format(word, jongsung_TF, word)
file_data.append(line)
with open("./user-dic/nnp.csv", 'w', encoding='utf-8') as f:
for line in file_data:
f.write(line)
새롭게 단어를 추가한 리스트를 다시 파일에 작성하고 다시 파일을 열어 확인해보면!
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',
'개발블로그,,,,NNP,*,F,개발블로그,*,*,*,*,*\n']
제대로 추가가 된 것을 확인할 수 있습니다.
자 이제 거의 다 완료되었습니다.
이번엔 tools 디렉토리가 있는지 확인합니다.
ls
aclocal.m4 feature.def model.def sys.dic
AUTHORS Foreign.csv NEWS tools/
autogen.sh* Group.csv NNBC.csv unk.def
autom4te.cache/ Hanja.csv NNB.csv unk.dic
ChangeLog IC.csv NNG.csv user-dic/
char.bin Inflect.csv NNP.csv user-nnp.csv
char.def INSTALL NorthKorea.csv user-person.csv
clean* install-sh* NP.csv user-place.csv
CoinedWord.csv J.csv NR.csv VA.csv
config.log left-id.def Person-actor.csv VCN.csv
config.status* MAG.csv Person.csv VCP.csv
configure* MAJ.csv Place-address.csv VV.csv
configure.ac Makefile Place.csv VX.csv
COPYING Makefile.am Place-station.csv Wikipedia.csv
dicrc Makefile.in pos-id.def XPN.csv
EC.csv matrix.bin Preanalysis.csv XR.csv
EF.csv matrix.def README XSA.csv
EP.csv missing* rewrite.def XSN.csv
ETM.csv MM.csv right-id.def XSV.csv
ETN.csv model.bin Symbol.csv
tools 디렉토리가 있다면 tools 디렉토리 안에 add-userdic.sh* 라는 쉘스크립트가 있는지 확인합니다.
ls tools
add-userdic.sh* convert_for_using_store.sh* mecab-bestn.sh*
확인하였다면 해당 스크립트를 실행하여줍니다.
!bash ./tools/add-userdic.sh
그 다음 make install을 통하여 추가를 완료합니다.
!make install
여기까지 하면 이제 솜씨좋은장씨 라는 단어와 개발블로그라는 단어는 정상적으로 등록이 완료되었습니다.
이제 제대로 추가가되어 형태소 분석 시 잘 분석이 되는지 확인해보겠습니다.
from konlpy.tag import Mecab
mecab = Mecab()
word_list = ['솜씨좋은장씨', '개발블로그']
for word in word_list:
print(mecab.pos(word))
[('솜씨좋은장씨', 'NNP')]
[('개발블로그', 'NNP')]
print(mecab.pos("솜씨좋은장씨의 개발블로그"))
[('솜씨좋은장씨', 'NNP'), ('의', 'JKG'), ('개발블로그', 'NNP')]
이제 솜씨좋은장씨 와 개발블로그는 추가한대로 잘 나오는 것을 볼 수 있습니다.
다만!
아직 순위조정이나 Compound, Preanalysis 여부는 고려하지 않고 그저 추가만 하였기 때문에
추가한 단어 중에 솜씨와 같이 기존 사전에 존재하고 순위가 더 높은 단어가 존재할 경우
해당 단어로 분리될 수 있습니다.
순위 조정 같은 경우는 아래의 링크를 참고하시기 바랍니다.
mecab 사전 우선순위 조정
형태소 분석기인 mecab에 사용자 사전을 정의하여 사용하다보면 간혹 사전을 생성했음에도 사전에 입력한 대로 결과가 나오지 않고 단어가 분리되어 나올 때가 있다. 실제로 그러한 경우를 재현
joyhong.tistory.com
읽어주셔서 감사합니다.
'머신러닝 | 딥러닝 > 자연어처리' 카테고리의 다른 글
Google Colab에서 mecab-ko-dic 사용자 사전 추가하기! (2023년 업데이트 버전) (5) | 2023.04.22 |
---|---|
Ubuntu에서 Khaiii 설치하기 (0) | 2020.09.10 |
Windows 에서 Mecab ( mecab 기반 한국어 형태소 분석기 ) 설치하는 방법 (16) | 2020.09.07 |
Google Colab에서 Mecab-ko-dic 쉽게 사용하기 (53) | 2019.09.12 |
Ubuntu 18.04 LTS에 mecab-ko-dic 설치하기 (7) | 2019.09.12 |