2015년 8월 24일 월요일

Elasticsearch에 한국어 형태소분석기 Mecab ko 적용

최근에 Elasticsearch를 정리하면서 MeCab Ko의 Elasticsearch 연동을 정리하지 않은 것 같아서 작성 해 본다.
(사실 SOLR에 MeCab Ko를 먼저 붙였지만, 최근에 Elasticsearch만 정리하고 있다. ㅡㅡ;)

참고) SOLR와 Elasticsearch에서 MeCab을 사용할 때 특수문자 허용 검색하기
http://nocode2k.blogspot.kr/2015/08/mecab-ko-solr-elasticsearch.html

CentOS 6.x 환경에서 SOLR와  Elasticsearch에서 한국어 형태소분석기인 Mecab Ko를 사용하기 위해서는 먼저 아래와 같이 설치 및 환경설정이 필요하다.
(* 8월 20일 현재 은전한닢 프로젝트에서는 mecab ko 사전을 사용하는 스칼라로 개발된 형태소분석기도 배포중이다.)

1. GCC컴파일러/JDK설치


1.1 C++ 컴파일러 설치
yum install gcc-c++

1.2 Java 다운로드 및 설치

사이트 다운로드 : http://www.oracle.com/technetwork/java/javase/downloads/index.html

리눅스 command 다운로드

32 bit linux use this:
curl -v -j -k -L -H "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-i586.rpm > jdk-8u51-linux-i586.rpm

For 64 bit:
curl -v -j -k -L -H "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.rpm > jdk-8u51-linux-x64.rpm

Install the rpm:
rpm -ivh  jdk-8u51-linux-i586.rpm


2. mecab-ko 설치


mecab-ko는 한국어 특성에 맞는 기능이 추가된 MeCab의 fork 프로젝트이다.
mecab-ko 다운로드 페이지에서 mecab-ko의 소스를 다운로드 받고 설치한다.

사이트 다운로드: https://bitbucket.org/eunjeon/mecab-ko/downloads

리눅스 command 다운로드 및 설치

wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz

tar -zxvf mecab-0.996-ko-0.9.2.tar.gz

cd mecab-0.996-ko-0.9.2

./configure --with-charset=utf-8

make

make check

make install


# /usr/local/bin 아래에 실행바이너리 파일이, /usr/local/lib 아래에 라이브러리가, 그리고 /usr/local/etc 아래에 설정 파일인 mecabrc가 설치된다.


3. mecab-ko-dic 설치


mecab-ko-dic 다운로드 페이지에서 mecab-ko-dic의 최신버전을 다운로드 받는다.

사이트 다운로드: https://bitbucket.org/eunjeon/mecab-ko-dic/downloads

리눅스 command 다운로드 및 설치

wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.1-20150707.tar.gz

tar zxvf mecab-ko-dic-2.0.1-20150707.tar.gz

cd mecab-ko-dic-2.0.1-20150707

./configure --with-charset=utf-8

make

make install

# /usr/local/lib/mecab/dic/mecab-ko-dic 아래에 사전이 설치된다.

4. mecab 테스트


$ /usr/local/bin/mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
mecab-ko-dic은 MeCab을 사용하여, 한국어 형태소 분석을 하기 위한 프로젝트입니다.
mecab    SL,*,*,*,*,*,*,*
-    SY,*,*,*,*,*,*,*
ko    SL,*,*,*,*,*,*,*
-    SY,*,*,*,*,*,*,*
dic    SL,*,*,*,*,*,*,*
은    JX,*,T,은,*,*,*,*
MeCab    SL,*,*,*,*,*,*,*
을    JKO,*,T,을,*,*,*,*
사용    NNG,*,T,사용,*,*,*,*
하    XSV,*,F,하,*,*,*,*
여    EC,*,F,여,*,*,*,*
,    SC,*,*,*,*,*,*,*
한국어    NNG,*,F,한국어,Compound,*,*,한국/NNG/*+어/NNG/*
형태소    NNG,*,F,형태소,Compound,*,*,형태/NNG/*+소/NNG/*
분석    NNG,*,T,분석,*,*,*,*
을    JKO,*,T,을,*,*,*,*
하    VV,*,F,하,*,*,*,*
기    ETN,*,F,기,*,*,*,*
위한    VV+ETM,*,T,위한,Inflect,VV,ETM,위하/VV/*+ᆫ/ETM/*
프로젝트    NNG,*,F,프로젝트,*,*,*,*
입니다    VCP+EF,*,F,입니다,Inflect,VCP,EF,이/VCP/*+ᄇ니다/EF/*
.    SF,*,*,*,*,*,*,*
EOS


5. mecab-java 설치


사이트 다운로드: https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer

리눅스 command 다운로드 및 설치
wget https://bitbucket.org/eunjeon/mecab-java/downloads/mecab-java-0.996.tar.gz

tar -zxvf mecab-java-0.996.tar.gz

cd mecab-java-0.996

# Makefile 수정
vi Makefile

# Makefile 에서 INCLUDE 변수에 java include directory를 설정해준다.
INCLUDE=/usr/java/jdk1.8.0_51/include

# Makefile에서 GCC optimization 옵션을 O3에서 O1으로 변경한다.
# 은전한닢에서는 OpenJDK사용시 변경하라고 되어 있으나 Oracle JDK에서도 변경해줘야 한다.
all:
        $(CXX) -O1 -c -fpic $(TARGET)_wrap.cxx  $(INC)
        $(CXX) -shared  $(TARGET)_wrap.o -o lib$(TARGET).so $(LIBS)
        $(JAVAC) $(PACKAGE)/*.java
        $(JAVAC) test.java
        $(JAR) cfv $(TARGET).jar $(PACKAGE)/*.class

# 저장
:wq

make

cp libMeCab.so /usr/local/lib


6. 환경 설정


CentOS에서 Elasticsearch를 실행하는 계정의 환경설정파일(예: .bashrc)에 라이브러리 경로를 추가한다.

LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
export LD_LIBRARY_PATH

7. Elasticsearch MeCab 플러그인 설치


./bin/plugin --install analysis-mecab-ko-0.17.0 --url https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads/elasticsearch-analysis-mecab-ko-0.17.0.zip


8. Elasticsearch 재시작 및 analyzer 테스트


8.1 Elasticsearch 실행
bin/elasticsearch -Djava.library.path=/usr/local/lib


8.2 index 생성 
curl -XPUT ‘localhost:9200/INDEX_NAME’
예)
curl -XPUT ‘localhost:9200/eunjeon’

8.3 index close
curl -XPOST 'localhost:9200/eunjeon/_close’

8.3 analyzer 추가 
curl -XPUT 'localhost:9200/eunjeon/_settings’ -d ’{
   "index": {
      “analysis”: {
         "analyzer": {
               "korean": {
                       "type": “custom”,
                       "tokenizer": “mecab_ko_standard_tokenizer”
                }
          }
      }
   }
}’

테스트)
curl -XGET 'localhost:9200/eunjeon/_analyze?analyzer=korean\&pretty=true -d '은전한닢 프로젝트'

8.4 index open
curl -XPOST 'localhost:9200/eunjeon/_open’


8.5 type에 대한 _mapping 설정 추가

한글 형태소 분석기 적용된 mapping 추가의 예)

curl -XPUT 'localhost:9200/eunjeon/_mapping/survey’ -d ’{
     "properties":{  
           "title":{      
                  "type":"string",      
                  "analyzer":"korean"  
          }
    }
}’

설정값 확인)
curl -XGET 'localhost:9200/eunjeon/_settings?pretty=1’


[참고 사이트]

은전한닢 프로젝트: http://eunjeon.blogspot.kr
은전한닢 프로젝트 구글 포럼: https://groups.google.com/forum/#!forum/eunjeon

댓글 4개:

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. 안녕하세요 엘라스틱 서치 공부중인 초보 개발자입니다
    글 따라서 잘 설치하던 도중에 7번째 'Elasticsearch MeCab 플러그인 설치'에서 에러가 발생해서 질문 드립니다.
    "ERROR : failed to download out of all possible locations..., use --verbose to get detailed information" 이라는 에러가 발생하는데요
    검색을 해봐도 제 능력으로는 이해할 수 없는 답변들만 나와서 진행이 안되고 있습니다.
    답변 주시면 감사하겠습니다.

    답글삭제
    답글
    1. 해당위치의 파일을 다운로드 못하는거 같은데 테스트 하시는 서버의 DNS 설정 확인해 보세요. DNS 문제가 아니라면 https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/downloads 여기에서 직접 파일 받아서 설치 해 볼수도 있어요.

      삭제
    2. 답변 감사합니다.
      은전한닢이 엘라스틱서치 최신버전과는 연동이 안되는것같습니다.
      엘라스틱서치 버전을 낮춰서 문제 해결했습니다.

      삭제