vengadan 의 contribution 으로 사전 압축 기능이 추가되었습니다. 낮은 성능의 인스턴스에서 실행시킬 수 있기를 기대합니다.
그리고 line feed 단위로 분석을 수행하여 문서 크기가 크더라도 메모리 사용을 최소화합니다.
전체적으로 heap 메모리 사용에 신경을 썼습니다.
앞으로도 고민할만한 곳이 많이 있는 것 같으나.. 시간이 부족하여 이후에 시간날 때 천천히 진행해보겠습니다.
메뉴얼:
* elasticsearch plugin
* seunjeon
2018년 2월 10일 토요일
2017년 9월 10일 일요일
elasticsearch-analysis-seunjeon 5.4.1.0 배포합니다.
오랜만의 작업입니다.
* 인덱스별로 사용자사전을 따로 로드하도록 변경하였습니다. 기존에 사전을 singleton으로 관리하다보니 변경된 사용자 사전을 적용하려면 elasticsearch를 재시작해야 했습니다. 이제는 사전 변경 후 인덱스를 새로 생성하면 analyzer instance가 만들어지면서 사용자사전 instance도 새로 만들어집니다. 아무래도 단점은 인덱스별로 사용자사전이 로드되다보니 사전 크기만큼 메모리 사용이 더 많아질 수 있습니다. 단, 시스템 사전은 singleton입니다.
README: https://bitbucket.org/eunjeon/seunjeon/raw/master/elasticsearch/
README: https://bitbucket.org/eunjeon/seunjeon/raw/master/elasticsearch/
2017년 6월 4일 일요일
elasticsearch-anaysis-seunjeon 다운로더
elasticsearch 버전이 새로 릴리즈 될때마다 plugin도 새롭게 릴리즈를 해줘야만 설치가 되는 문제가 있었습니다. 플러그인 압축파일 안에 plugin-descriptor.properties 파일이 있는데 그 파일 내에 버전정보가 다르면 설치가 되지않아서 생기는 문제였습니다. 플러그인 개발을 주업으로 하지않는 저희 입장에서는 매번 지원을 해드리는게 어려운 일이 아닐수 없었습니다. 매번 릴리즈 하지 않고 plugin-descriptor.properties 파일 내 버전 정보를 변경해 줄수있는 스크립트를 작성했습니다. 아래처럼 사용하시면 새로운 elasticsearch가 나오더라도 언제든지 seunjeon 설치가 가능합니다. (단, elasticsearch interface의 변화가 없다면..)
# download plugin $ bash <(curl -s https://bitbucket.org/eunjeon/seunjeon/raw/master/elasticsearch/scripts/downloader.sh) -e <es-version> -p <plugin-version> # install plugin $ ./bin/elasticsearch-plugin install file://`pwd`/elasticsearch-analysis-seunjeon-<plugin-version>.zip
- downloader.sh 가 하는 일은 elasticsearch-analysis-seunjeon-<plugin-version>.zip 파일을 내려받은 후 plugin-descriptor.properties 의 elasticsearch.version 을 변경하여 재압축합니다.
- elasticsearch가 버전 업 될때마다 플러그인을 재배포하는데 어려움이 있어 스크립트를 제공합니다.
2016년 12월 24일 토요일
seunjeon1.3.0 / elasticsearch-analysis-seunjeon 5.1.1.1 릴리즈합니다.
사용자 사전에 복합명사 추가가 가능해졌습니다.
'+' 로 복합명사를 표현할 수 있습니다.
예: "낄끼+빠빠"
escaping은 '\'로 가능합니다.
예: "c\+\+"
'+' 로 복합명사를 표현할 수 있습니다.
예: "낄끼+빠빠"
escaping은 '\'로 가능합니다.
예: "c\+\+"
seunjeon
- https://bitbucket.org/eunjeon/seunjeon
import org.bitbucket.eunjeon.seunjeon.Analyzer // 형태소 분석 Analyzer.parse("아버지가방에들어가신다.").foreach(println) // 어절 분석 Analyzer.parseEojeol("아버지가방에들어가신다.").foreach(println) // or Analyzer.parseEojeol(Analyzer.parse("아버지가방에들어가신다.")).foreach(println) /** * 사용자 사전 추가 * surface,cost * surface: 단어명. '+' 로 복합명사를 구성할 수 있다. * '+'문자 자체를 사전에 등록하기 위해서는 '\+'로 입력. 예를 들어 'C\+\+' * cost: 단어 출연 비용. 작을수록 출연할 확률이 높다. */ Analyzer.setUserDict(Seq("덕후", "버카충,-100", "낄끼+빠빠,-100", """C\+\+""").toIterator) Analyzer.parse("덕후냄새가 난다.").foreach(println) // 활용어 원형 Analyzer.parse("빨라짐").flatMap(_.deInflect()).foreach(println) // 복합명사 분해 val ggilggi = Analyzer.parse("낄끼빠빠") ggilggi.foreach(println) // 낄끼빠빠 ggilggi.flatMap(_.deCompound()).foreach(println) // 낄끼+빠빠 Analyzer.parse("C++").flatMap(_.deInflect()).foreach(println) // C++
analysis-seunjeon
- https://bitbucket.org/eunjeon/seunjeon/raw/master/elasticsearch/
#!/usr/bin/env bash ES='http://localhost:9200' ESIDX='seunjeon-idx' curl -XDELETE "${ES}/${ESIDX}?pretty" sleep 1 curl -XPUT "${ES}/${ESIDX}/?pretty" -d '{ "settings" : { "index":{ "analysis":{ "analyzer":{ "korean":{ "type":"custom", "tokenizer":"seunjeon_default_tokenizer" } }, "tokenizer": { "seunjeon_default_tokenizer": { "type": "seunjeon_tokenizer", "index_eojeol": false, "user_words": ["낄끼+빠빠,-100", "c\\+\\+", "어그로", "버카충", "abc마트"] } } } } } }' sleep 1 echo "# 삼성/N 전자/N" curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '삼성전자' echo "# 빠르/V 지/V" curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '빨라짐' echo "# 슬프/V" curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '슬픈' echo "# 새롭/V 사전/N 생성/N" curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '새로운사전생성' echo "# 낄끼/N 빠빠/N c++/N" curl -XGET "${ES}/${ESIDX}/_analyze?analyzer=korean&pretty" -d '낄끼빠빠 c++'
2016년 12월 15일 목요일
elasticsearch-analysis-seunjeon 5.1.1.0 배포합니다.
기능상 변경 없이 elasticsearch 5.1.1 버전에 맞게 새로 빌드하였습니다.
앞으로는 기능추가 없이 단순 elasticsearch 버전에 맞추는 릴리즈는 따로 공지하지 않겠습니다.
릴리즈 목록은 bitbucket README 에 명시하겠습니다.
감사합니다.
앞으로는 기능추가 없이 단순 elasticsearch 버전에 맞추는 릴리즈는 따로 공지하지 않겠습니다.
릴리즈 목록은 bitbucket README 에 명시하겠습니다.
감사합니다.
2016년 11월 6일 일요일
elasticsearch-analysis-seunjeon 5.0.0.0 배포합니다.
elasticsearch 5.0.0 지원 plugin 배포합니다. 추가된 기능은 없습니다. elastic팀 가이드대로 java 8 이상에서 실행해야 합니다.
추가나 수정된 기능은 없습니다.
추가나 수정된 기능은 없습니다.
소스 및 메뉴얼
설치
./bin/elasticsearch-plugin install https://oss.sonatype.org/service/local/repositories/releases/content/org/bitbucket/eunjeon/elasticsearch-analysis-seunjeon/5.0.0.0/elasticsearch-analysis-seunjeon-5.0.0.0.zip
2016년 9월 28일 수요일
elasticsearch-analysis-seunjeon 2.4.0.1 배포합니다.
elasticsearch plugin 2.4.0.1 배포합니다.
수정내용:
몇몇 단어에대해 deinflect 안되는 문제 해결.
소스 및 메뉴얼
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.4.0.1
2016년 9월 11일 일요일
elasticsearch-analysis-seunjeon 2.3.5.0 / 2.4.0.0 배포합니다.
elasticsearch 2.3.5 / 2.4.0 용 플러그인 배포합니다.
수정내용:
없음.
소스 및 메뉴얼
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.4.0.0
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.5.0
2016년 5월 22일 일요일
elasticsearch-analysis-seunjeon 2.3.3.0 / 2.2.0.1 / 2.3.2.1 배포합니다.
elasticsearch 2.3.3 용 플러그인 배포합니다. 버그수정도 있습니다.
수정내용:
- 복합명사가 길게 쓰여져있을 경우 하나의 UNK로 뽑히는 문제 해결. 예를 들어 "농어촌체험휴양하누리마을" 를 분석할 경우 그대로 "농어촌체험휴양하누리마을/UNK"로 분석 되었던 것을 "농어촌/체험/휴양/하누리/마을" 로 분석하게 수정. 관련 이슈: https://groups.google.com/forum/#!topic/eunjeon/eRZvjP-U69I
- max_unk_length 옵션 추가. 설정할수있게 해두었지만 사용할일은 거의 없을 것 같습니다.
소스 및 메뉴얼
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.3.0
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.2.1
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.2.0.1
2016년 5월 7일 토요일
elasticsearch-analysis-seunjeon 2.3.2.0 배포합니다.
elasticsearch 2.3.2 용 플러그인 배포합니다. 변경사항은 없습니다.
소스 및 메뉴얼
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.2.0
2016년 4월 26일 화요일
elasticsearch-analysis-seunjeon 2.3.0.0 / elasticsearch-analysis-seunjeon 2.3.1.0 배포합니다
elasticsearch 가 plugin하위 호환을 맞춰주지 않아 새로운 버전이 나올때마다 plugin도 새롭게 릴리즈를 해줘야 합니다. 사실 해주는거라곤 plugin-descriptor.properties 파알안에 elasticsearch.version=x.x.x 값만 바꿔주는 정도인데, 참 귀찮게 하네요.
혹시 은전한닢 버전이 늦게 나오더라도 파일 다운받으셔서 직접 plugins/analysis-seunjeon/ 디렉토리에 복사해주셔도 되고, 아니면 zip파일에서 plugin-descriptor.properties 파일을 수정해서 설치하여 사용하셔도 됩니다.
소스 및 메뉴얼
https://bitbucket.org/eunjeon/seunjeon/src/.../elasticsearch?at=es-2.3.0.0
https://bitbucket.org/eunjeon/seunjeon/src/.../elasticsearch?at=es-2.3.1.0
https://bitbucket.org/eunjeon/seunjeon/src/.../elasticsearch?at=es-2.3.1.0
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.0.0
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.3.1.0
2016년 2월 24일 수요일
elasticsearch-analysis-seunjeon 2.2.0.0 배포합니다.
elasticsearch 2.2.0 버전용 플러그인 릴리즈합니다. elasticsearch 버전별로 플러그인도 릴리즈해줘야 하는 번거로움이 있네요. 조금 대응이 늦더라도 이해부탁드립니다.
기능적으로 새롭게 추가한 것은 없습니다.
다만 기존에는 내부적으로 사전 탐색에 https://github.com/takawitter/trie4j 를 사용하고 있었는데, trie4j가 값 저장에 boxed Integer를 사용하고 있어 성능상 아쉬움이 있었습니다. 그래서 double array trie를 직접 구현하게 되었습니다. 성능이 눈에 띄게 좋아진건 아니지만 다소 개선되었습니다. 버그가 보이면 주저하지마시고 빠르게 알려주세요 ^^
기능적으로 새롭게 추가한 것은 없습니다.
다만 기존에는 내부적으로 사전 탐색에 https://github.com/takawitter/trie4j 를 사용하고 있었는데, trie4j가 값 저장에 boxed Integer를 사용하고 있어 성능상 아쉬움이 있었습니다. 그래서 double array trie를 직접 구현하게 되었습니다. 성능이 눈에 띄게 좋아진건 아니지만 다소 개선되었습니다. 버그가 보이면 주저하지마시고 빠르게 알려주세요 ^^
소스 및 메뉴얼
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.2.0.0
2016년 2월 20일 토요일
elasticsearch-analysis-seunjeon 2.1.1.3 배포합니다.
버그 fix 버전 새롭게 릴리즈합니다. 버그리포팅 및 의견 주신분들 감사합니다.
소스 및 메뉴얼
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.1.1.3
변경내용
- 활용어 원형 추출시 offet 오류로 exception 나는 문제 해결
- 영문 소문자로 변환해서 분석. 영어 단어는 소문자로 관리하면 됨
2016년 2월 8일 월요일
elasticsearch-analysis-seunjeon 2.1.1.2 배포합니다.
seunjeon 1.0.3 패치내용 적용하여 새로 릴리즈합니다.
흔히 발생할 수 있는 버그에 대한 패치입니다. 형태소분석 자체가 안되는 경우가 있었으니 모두 업그레이드 하여 사용하세요~
흔히 발생할 수 있는 버그에 대한 패치입니다. 형태소분석 자체가 안되는 경우가 있었으니 모두 업그레이드 하여 사용하세요~
소스 및 메뉴얼
https://bitbucket.org/eunjeon/seunjeon/src/.../elasticsearch/?at=es-2.1.1.2설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.1.1.2
변경내용
- 특정 키워드가 들어간 문장에서 분석이 다 되지 않는 문제 해결
2016년 1월 30일 토요일
elasticsearch-analysis-seunjeon 2.1.1.1 배포합니다.
seunjeon 1.0.2 패치내용 적용하여 새로 릴리즈합니다.
흔히 발생할 수 있는 버그에 대한 패치입니다. 형태소분석 자체가 안되는 경우가 있었으니 모두 업그레이드 하여 사용하세요~
흔히 발생할 수 있는 버그에 대한 패치입니다. 형태소분석 자체가 안되는 경우가 있었으니 모두 업그레이드 하여 사용하세요~
소스 및 메뉴얼
https://bitbucket.org/eunjeon/seunjeon/src/.../elasticsearch?at=es-2.1.1.1설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.1.1.1
변경내용
- 특수문자 연속해서 나올 경우 형태소분석이 안되는 문제 해결
2016년 1월 19일 화요일
elasticsearch-analysis-seunjeon 2.1.1.0 배포합니다.
이윤희님 의견과 커뮤니티에서 나오는 이야기를 듣고 기능 추가 합니다.
소스 및 메뉴얼
https://bitbucket.org/eunjeon/seunjeon/src/.../elasticsearch?at=es-2.1.1.0설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.1.1.0
변경내용
- 사용자사전을 파일에서 읽을 수 있는 기능 추가. user_dict_path 옵션
- 항상 키워드와 품사태그를 함께 토크나이징 하던 것(예:자전거/N)을 옵션으로 선택할 수 있게 함. pos_tagging 옵션. stopword filter나 synonym filter 사용시 주의해야 합니다.
2016년 1월 5일 화요일
elasticsearch-analysis-seunjeon 2.1.0.0 배포합니다.
한국어 형태소분석기 elasticsearch plugin입니다. 기존 mecab-ko-lucene-analyzer 가 있지만 설치의 불편함때문에 순수 jvm에서 돌아가는 seunjeon을 가지고 만들었습니다. 설치가 편리한것이 가장 큰 장정입니다. 많은 피드백 부탁드립니다.
설치
./bin/plugin install org.bitbucket.eunjeon/elasticsearch-analysis-seunjeon/2.1.0.0
사용방법 (자세히..)
#!/bin/bash ES='http://localhost:9200' ESIDX='seunjeon-idx' curl -XDELETE $ES/$ESIDX?pretty curl -XPUT $ES/$ESIDX/?pretty -d '{ "settings" : { "index":{ "analysis":{ "analyzer":{ "korean":{ "type":"custom", "tokenizer":"seunjeon_tokenizer" }, "korean_noun": { "type":"custom", "tokenizer":"noun_tokenizer" } }, "tokenizer": { "seunjeon_tokenizer": { "type": "seunjeon_tokenizer", "user_words": ["낄끼빠빠,-100", "버카충"] }, "noun_tokenizer": { "type": "seunjeon_tokenizer", "index_eojeol": false, "index_poses": ["N"] } } } } } }' sleep 1 echo "========================================================================" curl -XGET $ES/$ESIDX/_analyze?analyzer=korean\&pretty -d '낄끼빠빠' echo "========================================================================" curl -XGET $ES/$ESIDX/_analyze?analyzer=korean\&pretty -d '삼성전자' echo "========================================================================" curl -XGET $ES/$ESIDX/_analyze?analyzer=korean\&pretty -d '슬픈' echo "========================================================================" curl -XGET $ES/$ESIDX/_analyze?analyzer=korean_noun\&pretty -d '꽃이피다'
주요기능
- 사용자 사전
- 복합명사 분해
- 활용어의 원형 추출
- 어절추출
- 추출함 품사 지정
2013년 8월 7일 수요일
ElasticSearch 플러그인을 만드는 중입니다.
mecab-ko-lucene-analyzer의 ElasticSearch 플러그인을 만드는 중입니다. mecab-ko-lucene-analyer의 dev-elasticsearch-analyzer 브랜치로 작업 중이며, 아직 정식으로 릴리스할 정도는 아니라고 판단되어, 베타 테스트로 설치할 수 있는 방법을 공유합니다.
아래의 링크에서 자세한 설치와 사용 방법을 보실 수 있습니다.
elasticsearch-0.90.2 기반으로 컴파일 했으며, elasticsearch-0.90.3에서 정상적으로 동작하는 것을 테스트 완료하였습니다.
아래의 링크에서 자세한 설치와 사용 방법을 보실 수 있습니다.
https://bitbucket.org/eunjeon/mecab-ko-lucene-analyzer/raw/master/elasticsearch-analysis-mecab-ko/현재는 tokenizer만 구현되어 있는 상태고, 제가 ElasticSearch에 경험이 없어서, 어떤 부분을 더 구현해야 할지 잘 모르는 상태입니다. 혹시 ElasticSearch를 사용하시는 분들은 테스트해 보시고, 버그나 더 구현해야 할 부분과 같은 간단한 피드백을 주시면 매우 감사하겠습니다.
elasticsearch-0.90.2 기반으로 컴파일 했으며, elasticsearch-0.90.3에서 정상적으로 동작하는 것을 테스트 완료하였습니다.
피드 구독하기:
덧글 (Atom)