- 띄어쓰기 있는 긍정 지정사(VCP)에 페널티 비용 추가
- '-받'과 같은 동사 중 필요 없는 동사 제거. 예) 사랑받(다)
- '-치'와 같은 동사중 필요 없는 동사 제거. 예) 사기치(다)
여기서 받으실 수 있습니다.
bin/plugin --install analysis-mecab-ko-0.13.3 --url https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/elasticsearch-analysis-mecab-ko-0.13.3.zip
bin/plugin --install analysis-mecab-ko-0.13.2 --url https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/elasticsearch-analysis-mecab-ko-0.13.2.zip
bin/plugin --install analysis-mecab-ko-0.13.1 --url https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/elasticsearch-analysis-mecab-ko-0.13.1.zip
https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/raw/master/elasticsearch-analysis-mecab-ko/현재는 tokenizer만 구현되어 있는 상태고, 제가 ElasticSearch에 경험이 없어서, 어떤 부분을 더 구현해야 할지 잘 모르는 상태입니다. 혹시 ElasticSearch를 사용하시는 분들은 테스트해 보시고, 버그나 더 구현해야 할 부분과 같은 간단한 피드백을 주시면 매우 감사하겠습니다.
"president obama" +havard +professor
검색 쿼리가 위와 같은 경우 query parser가 "president obama"
, +havard
, +processor
에 대해서 각각 analyzer를 실행한다. 영어처럼 단어마다 띄어쓰기를 하는 언어에서는 문제가 없는 방식이다. 하지만 최적의 형태소 결합을 찾는 mecab-ko-lucene-analyzer의 특성상 완전한 문장이 analyzer로 들어와야 정확한 형태소 분석이 보장된다. 두 가지의 방식으로 ‘이성과 감성'이라는 문장을 분석하면 다음과 같이 다른 결과가 나온다.이(관형사), 성과(명사), 감성(명사) => 원하는 형태소 분석 결과가 아님
'이성과 감성'을 형태소 분석 했을 경우, mecab-ko-dic 형태소 분석 결과이성(명사), 과(조사), 감성(명사)
q=title:"이성과 감성"~1000
,
(쉼표)와 같은 특정한 기호를 넣는 꼼수로 문제를 해결했다. 다음과 같은 식이다.q=title:(이성과, 감성)
여기서 쉼표는 텍스트가 이어지는 지점이라는 힌트를 은전한닢 형태소 분석기에 제공하는 역할을 한다. 실제로 '이성과'와 '이성과,’를 mecab-ko-dic을 통해 형태소 분석을 하면 다음과 같이 다른 결과가 나온다.이성과
이 MM,F,이,*,*,*,*,*
성과 NN,F,성과,*,*,*,*,*
EOS
이성과,
이성 NN,T,이성,*,*,*,*,*
과 JC,F,과,*,*,*,*,*
, SY,*,*,*,*,*,*,*
EOS
SY(Symbol)은 mecab-ko-lucene-analyzer에서 인덱스에 남기지 않기 때문에, 사용할 수 있는 꼼수이다. 이 방법에도 부작용이 있는 경우가 발견되면, 지금의 해결 법은 바뀔 수 있다.title="이성과 감성"~1000^5.0 OR body="이성과 감성"~1000^3.0 OR _query_:"{!edismax qf='title^2.0 body' mm='2<75%'}이성과 감성"
이 쿼리식이 최적이라는 것이 아니라, 어디까지나 예제일 뿐입니다. 효과적인 쿼리식이나 괜찮은 예제가 있으면 댓글로 알려주시면 감사하겠습니다.이성과 감성 => (이성과 이성) 감성
위에서보면 '이성과'와 '이성' 두 token을 position 변화 없이 (positionIncrement=0) 반환하는데, Solr의 debugQuery를 활용하여 보면, 띄어쓰기가 있는냐 없는냐에 따라, Solr에서 실제의 쿼리가 다르게 구성되는 것을 볼 수 있다."debug": {
"rawquerystring": "title:(이성과, 감성)",
"querystring": "title:(이성과, 감성)",
"parsedquery": "((title:이성과 title:이성)/no_coord) title:감성",
"parsedquery_toString": "(title:이성과 title:이성) title:감성",
...
}
위의 경우, '이성과'와 '이성'이 유의어 개념으로 올바르게 처리되고 있다. (parsedquery에서 괄호로 묶인 부분)"debug": {
"rawquerystring": "title:(이성과감성)",
"querystring": "title:(이성과감성)",
"parsedquery": "title:이성과 title:이성 title:감성",
"parsedquery_toString": "title:이성과 title:이성 title:감성",
...
}
‘이성과'와 ‘이성'이 유의어 개념이 아니라, 서로 다른 token으로 처리되고 있다.Written with StackEdit.
이전의 버전은 JNI 클래스 패키지가 분리되어있지 않아서, collection을 하나 이상 만들 수 없는 문제점이 있습니다. 꼭 새로운 버전을 사용하시기 바랍니다. 관련하여 설치 방법도 변경됐으니, https://github.com/eunjeon/mecab-ko-lucene-analyzer/blob/master/README.md를 다시 확인 해주시기 바랍니다.
CentOS 6.3관련하여 더 좋은 해결 방법을 아시는 분은 알려주시면 감사 하겠습니다.
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (rhel-1.45.1.11.1.el6-i386)
OpenJDK Server VM (build 20.0-b12, mixed mode)
TARGET=MeCab
JAVAC=javac
JAVA=java
JAR=jar
CXX=c++
INCLUDE=/usr/lib/jvm/java-6-
PACKAGE=org/chasen/mecab
LIBS=`mecab-config --libs`
INC=`mecab-config --cflags` -I$(INCLUDE) -I$(INCLUDE)/linux
all:
$(CXX) -O3 -c -fpic $(TARGET)_wrap.cxx $(INC)
$(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
test:
env LD_LIBRARY_PATH=. $(JAVA) test
clean:
rm -fr *.jar *.o *.so *.class $(PACKAGE)/*.class
cleanall:
rm -fr $(TARGET).java *.cxx
|
HANGUL 1 1 2 # Korean
HANGUL 0 1 2 # Korean
카테고리이름 동작타이밍(0/1) 그룹핑(0/1) 길이(0, 2 ... n)
동작 타이밍:
그 카테고리에서 언제 불명 단어 처리를 움직 일까를 정의합니다.
0: 알려진 단어가 있으면 알 수 없는 언어 처리를 작동시키지 않습니다.
1: 항상 미지 언어 처리를 움직입니다.
칼카나마 재밌다.
칼 NN,T,칼,*,*,*,*
카 NN,F,카,*,*,*,*
나마 JX,F,나마,*,*,*,*
재밌 VA,T,재밌,*,*,*,*
다 EF,F,다,*,*,*,*
. SF,*,*,*,*,*,*
EOS
제주국립경마공원
제주 NN,F,제주,*,*,*,*
국립 NN,T,국립,*,*,*,*
경마 NN,F,경마,*,*,*,*
공원 NN,T,공원,*,*,*,*
EOS
칼카나마 재밌다.
칼카나마 NN,*,*,*,*,*,*
재밌 NN+VV,T,재밌,Inflect,NN,VV,재미/NN+있/VV
다 EF,F,다,*,*,*,*
. SF,*,*,*,*,*,*
EOS
제주국립경마공원
제주국립경마공원 NN,*,*,*,*,*,*
libtool: link: g++ -O3 -Wall -o .libs/mecab mecab.o ./.libs/libmecab.so -lpthread -lstdc++ -Wl,-rpath -Wl,/usr/local/lib검색을 좀 해보니, 그냥 gcc 버전을 올리는 것이 답인 듯 하여, 다음과 같이 gcc 4.4.7을 설치 하였습니다.
./.libs/libmecab.so: undefined reference to `__sync_val_compare_and_swap_4'
collect2: ld returned 1 exit status
make[2]: *** [mecab] 오류 1
...
# yum install gcc44 gcc44-c++이후, 다음과 같이 컴파일 및 설치를 진행하시면 잘됩니다.
$ cd mecab-0.994
$ ./configure CXX=g++44
$ make
# make install
$ tar xvzf mecab-ko-dic-1.1.2-20130219.tar.gz
$ cd mecab-ko-dic-1.1.2-20130219
$ autoreconf -vi
$ ./configure
$ make
$ make install