나름 순조로웠던(?) 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')]
챗봇을 만들기 위해서 견종을 하나의 형태소로 지정하기로 했다.
분명히 구글링도 잘 했고 시키는 대로 했단 말이죠,,
이렇게 말이야
그런데 저렇게 저장해놓으니 에러가 뜨고 안된다,,
발생한 에러는 두 가지!
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')
는 잘 되지만 내가 수정한대로는 진행되지 않는다 ,,