나름 순조로웠던(?) mecab,,

우여곡절이 없었던 건 아니지만,

여기에서 다운받고 (나는 2.1.1 받았다)

>> tar xvfz mecab-ko-dic-2.1.1-20180720.tar.gz
>> cd mecab-ko-dic-2.1.1-20180720
>> python setup.py build

하면 되었었는데 말이죠,,,


import konlpy
from konlpy.tag import Mecab

mecab = Mecab('/usr/local/lib/mecab/dic/mecab-ko-dic')
input_data3 = "초콜릿 먹여도 돼?"
preprocessed3 = mecab.pos(request.get('input_data3'))
print(preprocessed3)
 [('초콜릿', 'NNG'), ('먹여', 'VV+EC'), ('도', 'JX'), ('돼', 'VV+EF'), ('?', 'SF')]

챗봇을 만들기 위해서 견종을 하나의 형태소로 지정하기로 했다.

분명히 구글링도 잘 했고 시키는 대로 했단 말이죠,,

mecab

이렇게 말이야

그런데 저렇게 저장해놓으니 에러가 뜨고 안된다,,


발생한 에러는 두 가지!

NameError: name 'Tagger' is not defined

Exception: Install MeCab in order to use it: http://konlpy.org/en/latest/install/


일단 이 전에, NNP.csv , user-dic/nnp.csv 파일을 찾아서 확인해보니,

user-dic/nnp.csv 즉 내가 수정한 파일은 아래와 같이 unicode error가 떴더,,,

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xea in position 3: unexpected end of data

아마도 utf-8 관련 문제인 듯 하여,,, 바꿔주었다 . 방법은

빈 엑셀에서 외부 데이터 가져오기 > 텍스트로 가져오기 > user-dic/nnp.csv 열기 > Korean(MacOS)로 변경 > 새로 저장 후 user-dic/nnp.csv 대체

이후 아래와 같이 실행해준당

$ add-userdic.sh


generating userdic...
nnp.csv
/Users/midan/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)]
nnp2.csv
/Users/midan/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
/Users/midan/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
/Users/midan/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)]
make: Nothing to be done for `clean'.
make: *** No targets specified and no makefile found.  Stop.

만약 실행이 안된다면, brew install coreutils 해주고,

add-userdic.sh 스크립트 4번째 줄의

readonly PROG_DIR=$(readlink -m $(dirname $0))

readonly PROG_DIR=$(greadlink -m $(dirname $0)) 로 바꿔주자!


다시 돌아와서 이제 차근차근 에러를 해결해주자. 우선

NameError: name 'Tagger' is not defined

구글링 결과,

mecab-ko 설치, mecab-dic 설치, mecab-python 설치 를 통해 해결할 수 있다는데

$ bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scriptsmecab.sh)                                                           
mecab-ko is already installed
mecab-ko-dic is already installed
mecab-python is already installed
Done.

일단 지금까지의 내용대로 진행하고 나니까, 적어도 terminal에서의 user-dic을 반영하지 않은 일반 Mecab()은 잘 작동하는 상태!

jupyter notebook에서는 여전히 같은 에러가 발생하는 상태이다.


다시 한번, 터미널로 연 python3에서 아래와 같이 Mecab을 실행하니,

>>> mecab = Mecab('usr/local/lib/mecab/dic/mecab-ko-dic')
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/konlpy/tag/_mecab.py", line 108, in __init__
    self.tagger = Tagger('-d %s' % dicpath)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/MeCab.py", line 355, in __init__
    _MeCab.Tagger_swiginit(self, _MeCab.new_Tagger(*args))
RuntimeError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/konlpy/tag/_mecab.py", line 111, in __init__
    raise Exception('The MeCab dictionary does not exist at "%s". Is the dictionary correctly installed?\nYou can also try entering the dictionary path when initializing the Mecab class: "Mecab(\'/some/dic/path\')"' % dicpath)
Exception: The MeCab dictionary does not exist at "usr/local/lib/mecab/dic/mecab-ko-dic". Is the dictionary correctly installed?
You can also try entering the dictionary path when initializing the Mecab class: "Mecab('/some/dic/path')"

이와 같은 에러가 떴고,,, 아마도 dic에 관련한 에러가 뜬 거 같다

나는 근데 이유는 모르겠지만 dic이 없어서인 것 같아서, 일단 mecab-ko-dic을 다시 깔아주었고,,

이제는 mecab = Mecab('usr/local/lib/mecab/dic/mecab-ko-dic') 는 잘 되지만 내가 수정한대로는 진행되지 않는다 ,,