2018년 7월 21일 토요일

mecab-ko-dic-2.1.1-20180720 배포합니다.

mecab-ko-dic-2.1.1-20180720 나왔습니다.

오류 수정
  • NNG/장소의 출현 비용이 비정상적으로 높았던 문제(학습 데이터) 수정 후 재학습
사전
  • 오피스/NNG/장소 추가
여기에서 받으실 수 있습니다.

2018년 7월 17일 화요일

mecab-ko-dic-2.1.0-20180716 배포합니다.

mecab-ko-dic-2.1.0-20180716 나왔습니다.

새로운 기능
  • 오분석을 줄이기 위해 NNG(보통 명사) 의미 부류 '장소', '행위', '상태변화', '정적사태'를 추가하고 재학습
    • NNG(보통 명사)와 XSV(동사 파생 접미사), XSA(형용사 파생 접미사)와의 과도한 연결이 줄어들 것으로 기대
사전
  • 의미 부류에 '/'가 들어가 있는 경우 '|' 문자로 대체. ex: '성분부사/양태부사' -> '성분부사|양태부사'
  • 그 밖에 자잘한 사전 오류 수정
여기에서 받으실 수 있습니다.

2018년 2월 10일 토요일

seunjeon-1.5.0/elasticsearch-analysis-seunjeon 6.1.1.1 배포합니다.

vengadan 의 contribution 으로 사전 압축 기능이 추가되었습니다. 낮은 성능의 인스턴스에서 실행시킬 수 있기를 기대합니다. 
그리고 line feed 단위로 분석을 수행하여 문서 크기가 크더라도 메모리 사용을 최소화합니다.
전체적으로 heap 메모리 사용에 신경을 썼습니다.
앞으로도 고민할만한 곳이 많이 있는 것 같으나.. 시간이 부족하여 이후에 시간날 때 천천히 진행해보겠습니다.

메뉴얼:
* elasticsearch plugin
* seunjeon

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/

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월 25일 일요일

mecab-ko-lucene-analyzer-0.21.0, elasticsesarch-analysis-mecab-ko-5.1.1.0 배포합니다.

mecab-ko-lucene-analyzer-0.21.0, elasticsesarch-analysis-mecab-ko-5.1.1.0이 나왔습니다.

새로운 기능
  • Lucene/Solr 6.3.0 지원
  • Elasticsearch 5.1.1 지원 - issue #6
수정
  • 로딩 실패시 UnsatisfiedLinkError throw 하도록 수정 - issue #5
소스 패치를 보내주신 Jaepil Jeong 님과 이슈 등록해주신 devimapreduce 님께 감사드립니다.

Lucene/Solr 용 분석기
Elasticsearch 용 분석기

2016년 12월 24일 토요일

seunjeon1.3.0 / elasticsearch-analysis-seunjeon 5.1.1.1 릴리즈합니다.

사용자 사전에 복합명사 추가가 가능해졌습니다.

'+' 로 복합명사를 표현할 수 있습니다.
  예: "낄끼+빠빠"
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++'