'분석기'에 해당되는 글 6건

  1. 2017.11.15 [Elasticsearch] elasticsearch-arirang-analyzer-6.0.0 릴리즈
  2. 2017.07.10 [Elasticsearch] elasticsearch-analysis-arirang-5.5.0 공유
  3. 2017.04.27 [Elasticsearch] 5.x 용 Arirang 형태소 분석기 사용 시 주의 사항.
  4. 2016.11.25 [Elasticsearch] elasticsearch-analysis-arirang 5.0.1 플러그인 개발기
  5. 2016.03.17 [Elasticsearch] Elasticsearch에 Arirang 외부 사전 등록하기
  6. 2013.01.23 루씬 한글형태소 분석기 로컬 테스트

[Elasticsearch] elasticsearch-arirang-analyzer-6.0.0 릴리즈

Elastic/Elasticsearch 2017. 11. 15. 23:49

페북에 올렸더니 스팸 이라고 삭제 당했내요. ㅡ.ㅡ;

https://github.com/HowookJeong/elasticsearch-analysis-arirang/tree/6.0.0

https://github.com/HowookJeong/elasticsearch-analysis-arirang/releases/download/6.0.0/elasticsearch-analysis-arirang-6.0.0.zip


설치 방법은 잘 아시겠지만 두 가지 입니다.

$ bin/elasticsearch-plugin install file:///elasticsearch-analysis-arirang-6.0.0.zip

$ bin/elasticsearch-plugin install https://github.com/HowookJeong/elasticsearch-analysis-arirang/releases/download/6.0.0/elasticsearch-analysis-arirang-6.0.0.zip


적용된 version 은 아래와 같습니다.

elasticsearch-6.0.0

lucene-7.0.1

arirang.lucene-analyzer-7.0.1

arirang.morph-1.1.0


혹시 arirang plugin 을 어떻게 만드는지 궁금하신 분들은 아래 글 참고하세요.

[Elasticsearch] Arirang Analyzer + Elasticsearch Analyzer Plugin 사용자 관점 개발리뷰


:

[Elasticsearch] elasticsearch-analysis-arirang-5.5.0 공유

Elastic/Elasticsearch 2017. 7. 10. 14:18

5.5.0 에서 RestActionPlugin 등록하는 코드가 변경이 되어서 수정 반영 했습니다.




elasticsearch-analysis-arirang-5.5.0 공유 합니다.


Lucene 6.6.0

Elasticsearch 5.5.0 

기준 입니다.


설치파일 다운로드)

elasticsearch-analysis-arirang-5.5.0.zip



설치 방법)

$ bin/elasticsearch-plugin install --verbose file:///services/apps/elasticsearch-analysis-arirang-5.5.0.zip


아래는 플러그인 구현 시 필요한 내용 몇 가지 정리 했습니다.


1. arirang 관련 프로젝트 두개를 빌드 하셔야 합니다.

https://github.com/korlucene/arirang-analyzer-6

https://github.com/korlucene/arirang.morph


arirang.morph 의 경우 수명님이 arirang-analyzer-6 에 포함 시켜 놓았기 때문에 반드시 빌드해서 하실 필요는 없지만 그래도 한번 해보시면 좋습니다.

version 정보등은 맞게 수정해서 사용 하시면 됩니다.

(참고로 arirang 에 있었던 몇 가지 버그들이 수정된 것 같습니다.)


2. elasticsearch arirang plugin 을 만드시면 됩니다.

항상 그렇지만 version 이 올라가고 나면 변경된 내용에 대해서 적용을 해주셔야 합니다.

이번에는 큰 변화는 없었지만 test code 쪽 내용이 좀 변경이 되었내요.

이전 브랜치와 비교해서 보시면 될 것 같습니다.


설치 후 테스트)

http://localhost:9200/_analyze?pretty&analyzer=arirang_analyzer&text=한국 엘라스틱서치 사용자 그룹의 HENRY 입니다.


테스트 결과)


:

[Elasticsearch] 5.x 용 Arirang 형태소 분석기 사용 시 주의 사항.

Elastic/Elasticsearch 2017. 4. 27. 10:05

Elasticsearch에서 아리랑 형태소분석기 사용 시 주의사항)

사실 주의 사항 이라기 보다 1음절 처리에 대한 고민을 해보시면 좋을 것 같다는 의견 드립니다.


2.x 에서 사용하던 arirang 과 lucene 의 버전은 

- morph 1.0.x

- arirang & lucene 5.x

입니다.


5.x 에서 사용하던 arirang 과 lucene 의 버전은

- morph 1.1.0

- arirang & lucene 6.x

입니다.


여기서 arirang morph 쪽 코드가 많이 개선 또는 변경이 되었습니다.

그리고 몇 가지 default 설정 값들에 대한 변화도 있는데요.


제가 발견한 대표적인 문제는 아래와 같습니다.


'울퉁불퉁한' 이라는 source 에 대한 analysis 시 발생을 합니다.


5.x 에서 analyze 한 결과는 아래와 같습니다.

울퉁불퉁한(N)/90:2

울퉁불퉁/Z

한/N

울퉁불퉁(N),하(t),ㄴ(e)/70:2

울퉁/N

불퉁/N


2.x 에서 analyze 한 결과는 아래와 같습니다.

울퉁불퉁(N),하(t),ㄴ(e)/70:2

울퉁/N

불퉁/N


이게 무슨 문제가 되느냐고 할 수 있는데

실제 색인을 실행 하면 position 정보가 5.x 에서 뒤집혀져 색인 되지 않는 문제를 보실 수 있습니다.


5.x 에서 _analyze 한 결과는 아래와 같습니다.

{

  "tokens" : [

    {

      "token" : "울퉁불퉁한",

      "start_offset" : 0,

      "end_offset" : 5,

      "type" : "korean",

      "position" : 0

    },

    {

      "token" : "울퉁불퉁",

      "start_offset" : 0,

      "end_offset" : 4,

      "type" : "korean",

      "position" : 0

    },

    {

      "token" : "울퉁",

      "start_offset" : 0,

      "end_offset" : 2,

      "type" : "korean",

      "position" : 0

    },

    {

      "token" : "한",

      "start_offset" : 4,

      "end_offset" : 5,

      "type" : "korean",

      "position" : 1

    },

    {

      "token" : "불퉁",

      "start_offset" : 2,

      "end_offset" : 4,

      "type" : "korean",

      "position" : 2

    }

  ]

}


2.x 에서 _analyze 한 결과는 아래와 같습니다.

{

  "tokens" : [ {

    "token" : "울퉁불통",

    "start_offset" : 0,

    "end_offset" : 4,

    "type" : "korean",

    "position" : 0

  }, {

    "token" : "울퉁",

    "start_offset" : 0,

    "end_offset" : 2,

    "type" : "korean",

    "position" : 0

  }, {

    "token" : "불통",

    "start_offset" : 2,

    "end_offset" : 4,

    "type" : "korean",

    "position" : 1

  } ]

}


보이시나요?

어디가 다르고 문제가 되는지?


해결 방법은 CompoundNounAnalyzer 의 setDivisibleOne 설정을 false 로 하시면 위와 같은 문제를 해결 하실 수 있습니다.

2.x 에서는 KoreanFilter 쪽에 조건문이 있었는데 5.x 에서는 주석 처리가 되어 있더라구요.

또는 이것 저것 다 귀찮다고 하시면 그냥 '한' 에 대한 불용어 처리를 하셔도 될 것 같습니다.

:

[Elasticsearch] elasticsearch-analysis-arirang 5.0.1 플러그인 개발기

Elastic/Elasticsearch 2016. 11. 25. 12:31

Elasticsearch cluster 업그레이드를 위해 먼저 한글형태소 분석기 업그레이드가 필요합니다.

기본적으로 한글형태소 분석기 플러그인을 만들기 위해서는 아래의 내용을 어느 정도는 잘 알고 다룰수 있어야 합니다.


- Elasticsearch

- Lucene

- Arirang


Arirang 은 아래 링크를 통해서 소스와 jar 파일을 구하실 수 있습니다.


최근에 수명님 이외 mgkaki 님이 컨트리뷰션을 해주시고 계신듯 합니다. :)


Lucene & Arirang 변경 사항)

- lucene 6.1 과 6.2 의 패키지 구조가 변경이 되고 클래스도 바뀌었습니다.

- arirang 에서 제공하던 pairmap 관련 버그가 수정되었습니다. (그전에 수정이 되었을수도 있습니다. ^^;)

- lucene 에서 제공 되던 CharacterUtils 가 refactoring 되었습니다.

- arirang 에서 KoreanTokenizer 에 선언된 CharacterUtils 를 변경된 내용에 맞게 고쳐주어야 합니다.


Remove CharacterUtils.getInstance()

CharacterUtils.codePointAt(...) to Character.codePointAt(...)


- arirang 6.2 source를 내려 받으시면 위 변경 내용이 반영 되어 있습니다.

- arirang.morph 1.1.0 을 내려 받으셔야 합니다.


Elasticsearch Plugin 변경 사항)

플러그인 개발 변경 사항은 기본 구조 변경이 많이 되었기 때문에 수정 사항이 많습니다.

보기에 따라서 적을 수도 있지만 판단은 각자의 몫으로 ^^


- arirang.lucene-analyzer 와 arirang-morph 업데이트가 되어야 합니다.

- 기존에 binding 하던 AnalysisBinderProcessor를 사용하지 않습니다.

- 이제는 Plugin, AnalysisPlugin 에서 등록을 진행 합니다.


public class AnalysisArirangPlugin extends Plugin implements AnalysisPlugin {

  @Override

  public Map<String, AnalysisProvider<TokenFilterFactory>> getTokenFilters() {

    return singletonMap("arirang_filter", ArirangTokenFilterFactory::new);

  }


  @Override

  public Map<String, AnalysisProvider<TokenizerFactory>> getTokenizers() {

    Map<String, AnalysisProvider<TokenizerFactory>> extra = new HashMap<>();

    extra.put("arirang_tokenizer", ArirangTokenizerFactory::new);


    return extra;

  }


  @Override

  public Map<String, AnalysisProvider<AnalyzerProvider<? extends Analyzer>>> getAnalyzers() {

    return singletonMap("arirang_analyzer", ArirangAnalyzerProvider::new);

  }

}


- AnalyzerProvider, TokenFilterFactory, TokenizerFactory 내 생성자 argument 가 바뀌었습니다.

IndexSettings indexSettings, Environment env, String name, Settings settings


- assemble 하기 위한 plugin.xml 내 outputDirectory 가 elasticsearch 로 변경이 되었습니다. 

- outputDirectory 가 elasticsearch 로 작성되어 있지 않을 경우 에러가 발생 합니다.


이 정도 변경 하고 나면 이제 빌드 및 설치를 하셔도 됩니다.

이전 글 참고) [Elasticsearch] Lucene Arirang Analyzer Plugin for Elasticsearch 5.0.1


※ 플러그인을 만들면서 우선 lucene 6.1 과 6.2 가 바뀌어서 살짝 당황 했었습니다.

당연히 6.x 간에는 패키지 구조에 대한 변경은 없을거라는 기대를 했었는데 이게 잘못이였던 것 같습니다.

역시 lucene 5.x 에서 6.x 로 넘어 가기 때문에 elasticsearch 5.x 는 많이 바뀌었을 거라는 생각은 했었구요.

그래도 생각했던 것 보다 오래 걸리지는 않았지만 역시 참고할 만한 문서나 자료는 어디에도 없더라구요.

소스 보는게 진리라는건 변하지 않는 듯 싶내요. 작성하고 보니 이게 개발기인지 애매하내요. ^^;


소스코드)

https://github.com/HowookJeong/elasticsearch-analysis-arirang

:

[Elasticsearch] Elasticsearch에 Arirang 외부 사전 등록하기

Elastic/Elasticsearch 2016. 3. 17. 12:49

arirang 한글 형태소 분석기를 적용하고 사전 데이터를 업데이트 할 일들이 많이 생깁니다.

jar 안에 들어 있는 사전 데이터는 패키지 빌드 후 재배포하고 클러스터 재시작까지 해줘야 하는데요.

이런 과정 없이 사전 데이터만 외부에서 파일로 업데이트 및 관리하고 재시작 없이 바로 적용했으면 합니다.


기본적으로 이전 글에서 사전 데이터를 reload 하는 REST API를 구현해 두었습니다.

이 기능으로 일단 기능 구현은 완료가 된 것입니다.


이전 글 보기)


그럼 elasticsearch에서 어디에 사전 파일을 두고 관리를 해야 적용이 가능 할까요?

이전 글을 보시면 기본적으로 수명님이 만드신 arirang.morph 에서 classpath 내  org/apache/lucene/analysis/ko/dic 과 같이 생성 및 배치 시키시면 먼저 이 파일을 읽어 들이게 되어 있습니다.


이전 글 보기)


단, elasticsearch 실행 시 classpath 정보에 생성한 경로를 추가하지 않으시면 사전 파일들을 찾을 수 없으니 이점 유의 하시기 바랍니다.


elasticsearch classpath 설정)

elasticsearch에서 가이드 하는 것은 수정하지 마라 입니다. 하지만 수정 없이는 이를 활용할 수 없으니 이런건 수정해줘야 합니다.


$ vi bin/elasticsearch.in.sh

.....

ES_CLASSPATH="$ES_HOME/lib/elasticsearch-2.2.0.jar:$ES_HOME/lib/*:$ES_HOME/설정하신경로입력"

.....


이렇게 수정하신 후 재시작 하시고 직접 사전 정보 업데이트 후 reload api 를 이용해서 적용되는지 확인해 보시면 되겠습니다.


참고 정보 - 간단 요약)

arirang.morph 에서 properties 파일과 dic 파일 loading flow


Step 1)

load external korean.properties into classpath.

dic files are same.


Step 2)

if not exist, load korean.properties into jar.

dic files are same.


사전 데이터는 어떻게 등록 할 수 있는지 궁금하신 분은 이전 글 참고하세요.


사전 데이터 등록 예제)

:

루씬 한글형태소 분석기 로컬 테스트

Elastic/Elasticsearch 2013. 1. 23. 16:09

이런.. 아래 코드는 2.X 용이내요.. 
3.X 에서는 동작 하지 않습니다.
그냥 새로 짜야겠내요.. ^^;

--------------------------------------------------------------

Special Thanks to : 이창민

한글형태소 분석기 로컬 테스트.


http://cafe.naver.com/korlucene 카페에 보면 krmorph-20091117.war파일

한국어 형태소분석 파일을 테스트 해볼수 있는 파일을 개발자님이 직접 올려주셨네요. (공모전에 출품작이였던 것 같습니다.;)

첨부한 파일은 : 공모전에 출품하려고 개발자가 매뉴얼을 작성한 것 같습니다. 프로그램에 대해 자세하게 적혀있습니다.(카페에서 찾았습니다.)



krmorph-20091117.war

 

해당 파일을 실행시키는 방법

1. 이클립스에서 마우스 오른쪽 버튼 -> Import -> WAR file

2. 다운받은 krmorph-2091117.war파일 선택

3. 프로젝트 import 완료

4. 프로젝트 선택후 오른쪽 버튼 -> Run As -> Run On Server (기존에 톰캣이 셋팅 되어 있어야 함. & 일반 웹프로젝트 톰캣셋팅과 동일함)

5. 톰캣 재시작


※ 접속 URL : http://localhost:8080/krmorph-20091117/


형태소 분석기 소스를 받아서 고치거나 사전 업데이트 후 실제 어떻게 동작 하는지 테스트 할때 사용하면 유용할 것 같내요.
어제 stopwords 잘 안되던거 테스트 하기 위해서 필요 했는데. ㅎㅎ 창민군 고마워요.. :)


: