쥬니어 분석가

[NLP/Error] Mecab 사용자 사전 추가 , 디렉토리 경로 오류 해결 본문

python

[NLP/Error] Mecab 사용자 사전 추가 , 디렉토리 경로 오류 해결

jyuuni 2024. 1. 25. 10:34
반응형

C:\mecab의 폴더는 아래와 같은 3개의 폴더로 이뤄져 있습니다.

물론 사람마다 폴더의 경로는 다르니 자신의 mecab 폴더 경로를 확인해 주시면 됩니다.

  • mecab-ko-dic : mecab의 단어 사전
  • tools : 단어 사전에 단어를 추가시킨 후 컴파일 및 적용을 시켜주는 프로그램들 존재
  • user-dic : 사용자가 추가적으로 추가한 단어에 대한 단어 사전

필자의 경우 "고대숲"을 하나의 명사로 인식하고 싶었는데 mecab에서 고대/숲 따로 인식해서 이걸 사용자 정의 사전에 추가하려고 합니다.

from eunjeon import Mecab
m=Mecab()
sentence = "오랜만에 페이스북 들어가서 고대숲을 읽었는데 너무 슬프네요"
m.pos(sentence)

단어 사전에 단어를 추가하는 과정은 다음과 같습니다.

 

1. user-dic 폴더 내에 custom.csv 파일 생성 및 형식에 맞게 추가하고 싶은 단어 추가

 

위 이미지처럼 마지막 글자의 종성(받침)이 있는 경우 7번째 열에 T, 없는 경우는 F를 입력해 줍니다.

파일 형식 참고) https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=6

 

2. tools의 add-userdic-win.ps1라는 프로그램을 실행하여 컴파일

 

먼저 powershell을 관리자 권한으로 실행한 후 mecab 파일이 있는 경로로 이동합니다.

cd C:\mecab

 

그 후 tools 폴더 내에 add-userdic-win.ps1 파일을 실행시켜 줍니다. 아래와 같은 명령어를 입력해 주면 됩니다.

.tools/add-userdic-win.ps1

 

❗디지털 서명/보안 관련 오류 문구가 뜬 경우는 아래와 같이 입력해주면 됩니다. 

필자의 경우 C:\mecab 경로 안에 tools 파일이 있었는데 자신의 mecab 파일 위치 경로에 맞게 바꿔주시면 됩니다.

PowerShell.exe -ExecutionPolicy Bypass -File C:\mecab\tools\add-userdic-win.ps1

 

위 과정을 마치면 아마 아래와 같은 화면이 뜰 것입니다.

 

3. done! 확인 후 mecab-ko-dic에 앞에서 user-custom.csv파일이 만들어진 경우 적용 완료

 

위 과정을 마친 후 아래와 같이 mecab-ko-dic 폴더에 user-custom.csv 파일이 있다면 잘 등록된 것입니다.

 

만약 위 파일이 없다면 제대로 실행되지 않은 거라 처음부터 다시 해야 합니다.

파일이 정상적으로 생성되었다면 다시 jupyter을 실행시키고 사용자 사전을 추가한 경로를 불러와야 최종적으로 적용이 됩니다.

from eunjeon import Mecab
mecab = Mecab(dicpath='C:/mecab/mecab-ko-dic')
sentence = "오랜만에 페이스북 들어가서 고대숲을 읽었는데 너무 슬프네요"
mecab.pos(sentence)

정상적으로 인식 완료!!

dicpath의 경우 자신의 custom.csv 파일이 저장되어 있는 경로로 설정해 주면 됩니다.

 

여기까지 정상적으로 실행됐다면 아래 오류는 안 보셔도 됩니다.


4. 3번까지 완료했는데 오류가 뜬 경우는 아래와 같은 방법으로 해결

 

Mecab을 불러오는 과정에서 디랙토리 경로에 대한 오류

File "C:\anaconda3\Lib\site-packages\eunjeon\_mecab.py", line 106, 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 "C:/mecab/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')"

 

오류 코드를 확인해 보니 _mecab.py 파일에 문제가 있다고 해서 위 경로를 따라가 _mecab.py 파일을 찾았습니다.

그 후 RuntimeError 부분의 Tagger 값을 아래와 같이 '--rcfile % s'에서 '-d %s'로 변경해 준 후 저장해 주면 됩니다.

 

수정 후 다시 Mecab을 불러오면 진짜 진짜 정상적으로 사전에 입력한 단어가 하나의 명사로 나오게 됩니다.

 

 

powershell - mecab-ko-dic\char.bin 파일은 다른 프로세스에서 사용 중 관련 오류

 

이건 주피터에서 사용자 지정 경로로 mecab을 불러온 상태에서 실행하려고 해서 생긴 오류입니다.

이 경우에는 그냥 해당 파이썬 노트를 셧다운 후 다시 powershell에서 작성하면 정상적으로 돌아갑니다.

 

 

하나 문제가 있었는데 "아트센터"를 하나의 명사로 보도록 설정한 경우 "아트 센터"처럼 띄어쓰기를 포함하면 하나의 단어로 인식을 못하더라구요.

이건 나중에 다시 찾아보도록 하겠습니다.

반응형