Mecab-ko 설정 파일과 사전 디렉터리를 상대 경로로 지정하기

Twitter icon류광, 2019-08-31 18:08
배포와 설치가 쉽도록 Mecab-ko의 설정 파일과 사전 디렉터리를 상대 경로로 지정하는 방법입니다.

루아와 MeCab-ko를 이용한 한국어 형태소 분석에서 이어집니다. 그 글 끝부분에서

만일 설정 파일과 사전 파일들을 다른 곳에 두었다면, mecab:new()를 호출할 때 다음처럼 MeCab 설정 파일의 위치를 명시적으로 지정해야 합니다.

parser = mecab:new([[-r C:\설정파일이\있는\경로\설정파일이름]])

또한 MeCab 설정 파일에는 dicdir = C:\사전파일들이\있는\디렉터리 형태로 사전 파일 디렉터리의 절대 경로를 지정해야 하고요.

라고 했는데, 사실 좀 번거롭습니다. 절대 경로 대신 Mecab이 설치된(또는 루아 Mecab-ko 확장 모듈이 있는) 디렉터리에 상대적인 경로를 사용할 수 있으면 설정이(따라서 배포와 설치가) 훨씬 간편해지는데요. 다행히 이 문제에 대한 해답이 이미 Mecab에 갖추어져 있었습니다.

Mecab-ko의 utils.cpp[1]에 있는 load_dictionary_resource 함수를 보면, 현재 버전의 Mecab은 -r 옵션이 명시적으로 지정되지 않은 경우 다음 순서로 설정 파일을 찾습니다.

  1. 리눅스 등의 경우 사용자 홈 디렉터리(환경 변수 HOME)의 .mecabrc 파일
  2. 환경 변수 MECABRC에 설정된 파일
  3. Windows의 경우 레지스트리 HKEY_CURRENT_USERsoftware\mecab\mecabrc 항목으로 설정된 파일
  4. 역시 Windows의 경우 Mecab 모듈(libmecab.dll 파일)이 있는 디렉터리의 mecabrc 파일
  5. 위의 모든 시도가 실패하면, 매크로 MECAB_DEFAULT_RC로 정의된 파일(기본은 c:\mecab\mecabrc).

주목할 부분은 4번입니다. libmecab.dll가 있는 디렉터리에 mecabrc라는 이름의 설정 파일을 두면 -r 옵션을 따로 지정할 필요가 없습니다. 이제 문제의 절반이 해결되었습니다.

나머지 절반은 mecabrc 파일의 dicdir =에서 절대 경로가 아니라 상대 경로로 사전 파일 디렉터리를 지정하는 것인데요. 바로 답을 말하면, 다음과 같이 $(rcpath)라는 키워드를 이용하면 됩니다.

# mecabrc 파일

...

dicdir = $(rcpath)\mecab-ko-dic

...

앞에서 언급한 load_dictionary_resource 함수는 dicdir에 지정된 경로 문자열의 $(rcpath)을 설정 파일이 있는 경로로 치환합니다. 이렇게 해서 나머지 절반도 해결되었습니다.

정리하자면, 루아와 MeCab-ko를 이용한 한국어 형태소 분석에서처럼 루아 Mecab-ko 확장 모듈을 만들었다고 할 때, 루아 Mecab-ko 확장 모듈(이를테면 mecab51.dll)과 libmecab.dll 파일, mecabrc 파일, mecab-ko-dic 디렉터리를 루아 실행기(또는 호스트 프로그램)가 있는 디렉터리에 함께 두면, 그리고 mecabrc 파일의 dicdir 항목을 위와 같이 설정하면, 따로 경로를 지정할 필요 없이 루아에서 Mecab-ko의 기능을 사용할 수 있습니다.

[\루아실행기\디렉터리]
    [mecab-ko-dic]
    lua5.1.exe
    lua5.1.dll
    libmecab.dll
    mecab51.dll
    mecabrc
태그: 프로그래밍 Lua

comments powered by Disqus