'arirang'에 해당되는 글 33건

  1. 2022.07.20 [Elasticsearch] Arirang Plugin on Elasticsearch 8.3.2
  2. 2022.02.15 [Elasticsearch] Arirang classpath 미등록 시.
  3. 2021.11.10 [Arirang] 아리랑 사용 시 startOffset, endOffset 역전 현상
  4. 2021.09.15 [Elasticsearch] _analyze API 예제 영단어 처리.
  5. 2021.07.06 [Elasticsearch] arirang dictionary 에 영어+한글 복합어 분해 추가.
  6. 2021.05.11 [Elasticsearch] Nori 사전 빌드하기.
  7. 2019.12.04 [Elasticsearch] elasticsearch-analysis-arirang 7.5.0
  8. 2019.12.02 [Elasticsearch] elasticsearch-analysis-arirang plugin 내 custom dic 적용
  9. 2019.11.14 [Elasticsearch] Arirang plugin build commands.
  10. 2019.11.14 [Elasticsearch] elasticsearch-analysis-arirang 7.4.0, 7.4.2

[Elasticsearch] Arirang Plugin on Elasticsearch 8.3.2

Elastic/Elasticsearch 2022. 7. 20. 13:47

Elasticsearch 8.3.2 + Lucene 9.2.0 에서 변경된 내용을 정리해 봅니다.

 

Lucene 8.11 to 9.2)

pom.xml 내 수정

# lucene-analyzers-common 은 9.x 에서는 더 이상 지원 하지 않음
<dependency>
  <groupId>org.apache.lucene</groupId>
  <artifactId>lucene-analyzers-common</artifactId>
  <version>${lucene.version}</version>
</dependency>
to
<dependency>
  <groupId>org.apache.lucene</groupId>
  <artifactId>lucene-analysis-common</artifactId>
  <version>${lucene.version}</version>
</dependency>

package 변경

org.apache.lucene.analysis.util.TokenFilterFactory
to
org.apache.lucene.analysis.TokenFilterFactory

org.apache.lucene.analysis.standard.ClassicFilter
to
org.apache.lucene.analysis.classic.ClassicFilter

org.apache.lucene.analysis.util.TokenizerFactory
to
org.apache.lucene.analysis.TokenizerFactory

org.apache.lucene.analysis.util.TokenFilterFactory
to
org.apache.lucene.analysis.TokenFilterFactory

org.apache.lucene.analysis.util.TokenFilterFactory
to
org.apache.lucene.analysis.TokenFilterFactory

 

elasticsearch analyzer plugin)

# AbstractIndexAnalyzerProvider 에서 IndexSettings 제거됨

org.elasticsearch.client.node.NodeClient
to
org.elasticsearch.client.internal.node.NodeClient

JDK 수정

build 시 jdk 17 사용
$jenv local 17

<java.version>17</java.version> 수정

❖ lucene 에서는 analyzer 패키지 변경이 있었으며, elasticsearch 에서는 NodeClient 에 대한 패키지 변경이 있었습니다.

:

[Elasticsearch] Arirang classpath 미등록 시.

Elastic/Elasticsearch 2022. 2. 15. 10:11

arirang plugin 을 사용 하면서 사전 데이터에 대한 classpath 설정은 했는데 config/dictionary path 생성을 하지 않았을 경우 reload api 가 동작 하지 않는다고 합니다.

 

이럴 경우 config/dictionary path 생성 하고 사전 데이터 배포 후 node 를 재시작 해주셔야 하는 번거로움이 있으니 초기 설치 시 꼭 사전 데이터에 대한 배포 후 실행을 해주시면 좋을 것 같습니다.

 

혹시 같은 실수 반복 할 수도 있어서 기록합니다.

:

[Arirang] 아리랑 사용 시 startOffset, endOffset 역전 현상

ITWeb/검색일반 2021. 11. 10. 14:24

아리랑 형태소 분석기 에서 synonym filter 사용을 하지 않았는데도 offset 역전 현상이 발생 할 경우가 있습니다.
보통은 synonym filter 로 인해서 발생 하는 경우가 있는데요.
total.dic, extension.dic 에 등록된 단어들이 띄어쓰기 없이 복합명사 처럼 작성이 되었을 경우 간혹 발생 할 수 있습니다.

예)

Input Text : 전문의사시대
Dictionary Text : 전문, 전문의, 의사, 사시, 시대
Analyzed Text : 전문, 전문의, 사시, 의사, 시대

복합명사 사전인 compound.txt 에는 등록이 되어 있지 않습니다.
전문의사시대:전문,의사,시대:0000
로 등록을 하면 원하는 결과를 얻을 수 있고 오류도 없어집니다.

 

에러 유형)

startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards ...중략...

 

:

[Elasticsearch] _analyze API 예제 영단어 처리.

Elastic/Elasticsearch 2021. 9. 15. 11:44

아리랑을 이용한 영단어 처리와 특수문자 제거 예제 입니다.

_analyze API 예제 이고 index 에는 settings 에 선언 하시면 됩니다.

{
    "tokenizer" : "arirang_tokenizer",
    "filter": [        
        "arirang_filter",
        {
            "type": "stemmer",
            "language": "possessive_english"
        },
        "lowercase",
        "classic",
        {
            "type": "stemmer",
            "language": "english"
        }
    ],
    "char_filter": {
        "type": "pattern_replace",
        "pattern": "\\p{Punct}",
        "replacement": ""
    },
    "text": ""
}

text 부분에 분석할 문자열을 넣으세요.

:

[Elasticsearch] arirang dictionary 에 영어+한글 복합어 분해 추가.

Elastic/Elasticsearch 2021. 7. 6. 14:59

그냥 작은 운영 팁 정도 입니다.

 

영어+한글로 작성된 경우 둘 다 사전에 등록 되어 있지 않다고 하면 아래와 같이 등록을 하면 됩니다.

 

예) kr모터스

extension.dic 에 한글 "모터스" 만 등록 합니다.

모터스,100000000X

 

POST http://localhost:10800/_analyze

Request)

{

"tokenizer": "arirang_tokenizer",

"filter": [

"arirang_filter"

],

"text": "kr모터스"

}

 

Response)

{

"tokens": [

{

"token": "kr모터스",

"start_offset": 0,

"end_offset": 5,

"type": "korean",

"position": 0

},

{

"token": "kr",

"start_offset": 0,

"end_offset": 2,

"type": "word",

"position": 0

},

{

"token": "모터스",

"start_offset": 2,

"end_offset": 5,

"type": "korean",

"position": 1

}

]

}

:

[Elasticsearch] Nori 사전 빌드하기.

Elastic/Elasticsearch 2021. 5. 11. 20:51

[추가 사항]

https://issues.apache.org/jira/browse/SOLR-12655?focusedCommentId=16604160&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel&fbclid=IwAR3jRIpaCQ497v-qhofkc3DVmNabPab1ErDQhXnOsA0LNoqpHypa5cUSpy0#comment-16604160

 

아래 발생한 오류는 UnknownDictionaryBuilder.java 에서 아래 코드 수정으로 해결 되었습니다.

기본적으로 ivy.xml, build,xml 에 보면 사전 버전 정보가 들어가 있습니다.

이 사전이 변경 되면서 POS tag list 가 달라 졌는데요. 이 영향으로 에러가 발생 하게 됩니다.

private static final String NGRAM_DICTIONARY_ENTRY = "NGRAM,1801,3561,3668,SY,*,*,*,*,*,*,*";

코드를 수정 하지 않으려면 사전 버전을 맞춰서 사용 하시면 됩니다.

 

Elasticsearch User Group 에 #유정인 님이 도움 주셨습니다.


https://github.com/jimczi/nori/blob/master/how-to-custom-dict.asciidoc

https://bitbucket.org/eunjeon/mecab-ko/src/mecab-0.996/
https://bitbucket.org/eunjeon/mecab-ko-dic/src/v2.1.1/

$ git clone https://bitbucket.org/eunjeon/mecab-ko.git
$ git checkout tags/mecab-0.996
$ ./configure
$ make
$ sudo make install
$ mecab -v

https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/

$ wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz
$ tar -xvzf mecab-ko-dic-2.1.1-20180720.tar.gz
$ cd mecab-ko-dic-2.1.1-20180720
$ brew install autoconf automake libtool
$ autoreconf
$ ./configure
$ make
$ sudo make install
$ ./tools/add-userdic.sh

$ tar cvzf custom-mecab-ko-dic.tar.gz mecab-ko-dic-2.1.1-20180720
$ git clone https://github.com/apache/lucene.git
$ git checkout tags/releases/lucene-solr/8.8.1
$ vi lucene/analysis/nori/ivy.xml

~       <!--artifact name="mecab-ko-dic" type=".tar.gz" url="https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.3-20170922.tar.gz" /-->
+         <artifact name="mecab-ko-dic" type=".tar.gz" url="file:///Users/mzc02-henryjeong/Temp/fastcampus/analysis-nori/custom-mecab-ko-dic.tar.gz" />

 

$ vi lucene/analysis/nori/build.xml

~   <!--property name="dict.version" value="mecab-ko-dic-2.0.3-20170922" /-->
+   <property name="dict.version" value="mecab-ko-dic-2.1.1-20180720" />

 

$ cd lucene/analysis/nori
// apache ant 설치
$ mkdir -p ~/.ant/lib
$ ant ivy-bootstrap
$ ant regenerate
build-dict:
[delete] Deleting /Users/mzc02-henryjeong/Temp/analysis-nori/lucene/lucene/analysis/nori/src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$buffer.dat
[delete] Deleting /Users/mzc02-henryjeong/Temp/analysis-nori/lucene/lucene/analysis/nori/src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$fst.dat
[delete] Deleting /Users/mzc02-henryjeong/Temp/analysis-nori/lucene/lucene/analysis/nori/src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$posDict.dat
[delete] Deleting /Users/mzc02-henryjeong/Temp/analysis-nori/lucene/lucene/analysis/nori/src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$targetMap.dat
[java] Exception in thread "main" java.lang.AssertionError
[java] at org.apache.lucene.analysis.ko.util.BinaryDictionaryWriter.put(BinaryDictionaryWriter.java:112)
[java] at org.apache.lucene.analysis.ko.util.UnknownDictionaryWriter.put(UnknownDictionaryWriter.java:39)
[java] at org.apache.lucene.analysis.ko.util.UnknownDictionaryBuilder.readDictionaryFile(UnknownDictionaryBuilder.java:71)
[java] at org.apache.lucene.analysis.ko.util.UnknownDictionaryBuilder.readDictionaryFile(UnknownDictionaryBuilder.java:47)
[java] at org.apache.lucene.analysis.ko.util.UnknownDictionaryBuilder.build(UnknownDictionaryBuilder.java:41)
[java] at org.apache.lucene.analysis.ko.util.DictionaryBuilder.build(DictionaryBuilder.java:39)
[java] at org.apache.lucene.analysis.ko.util.DictionaryBuilder.main(DictionaryBuilder.java:52)

BUILD FAILED
$ git status .
HEAD detached at releases/lucene-solr/8.8.1
Changes not staged for commit:
(use "git add/rm ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: build.xml
modified: ivy.xml
deleted: src/resources/org/apache/lucene/analysis/ko/dict/CharacterDefinition.dat
deleted: src/resources/org/apache/lucene/analysis/ko/dict/ConnectionCosts.dat
modified: src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$buffer.dat
modified: src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$fst.dat
modified: src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$posDict.dat
modified: src/resources/org/apache/lucene/analysis/ko/dict/TokenInfoDictionary$targetMap.dat
deleted: src/resources/org/apache/lucene/analysis/ko/dict/UnknownDictionary$buffer.dat
deleted: src/resources/org/apache/lucene/analysis/ko/dict/UnknownDictionary$posDict.dat
deleted: src/resources/org/apache/lucene/analysis/ko/dict/UnknownDictionary$targetMap.dat
$ ant jar
...중략...
-jar-core:
[jar] Building jar: /Users/mzc02-henryjeong/Temp/analysis-nori/lucene/lucene/build/analysis/nori/lucene-analyzers-nori-8.8.1-SNAPSHOT.jar
...중략...

/Users/mzc02-henryjeong/Works/app/apache-ant-1.10.10

일단 시간이 별로 없어서 이 정도까지만 테스트 하고 오류는 나중에 심각 하게 살펴 보겠습니다.

Arirang 만 잘 해도 되는데 Nori 도 할 줄 알아야 하니까...
근데 사전 관리 방식은 Arirang 이 편하고 좋습니다.

사실 한자 사전 고치려다가 여기까지 왔네요.

:

[Elasticsearch] elasticsearch-analysis-arirang 7.5.0

Elastic/Elasticsearch 2019. 12. 4. 15:59

Elasticsearch Analysis Arirang Plugin 7.5.0 올렸습니다.

바뀐 내용없고 lucene 과 elasticsearch 버전만 올라 갔습니다.

 

https://github.com/HowookJeong/elasticsearch-analysis-arirang/releases/tag/7.5.0

 

설치 방법은 아래와 같습니다.

 

로컬 빌드 후 파일로 설치)

elasticsearch-7.5.0$ bin/elasticsearch-plugin install file:///git/elasticsearch-analysis-arirang/target/elasticsearch-analysis-arirang-7.5.0.zip

 

github 에 올라간 release 파일로 설치)

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

 

:

[Elasticsearch] elasticsearch-analysis-arirang plugin 내 custom dic 적용

Elastic/Elasticsearch 2019. 12. 2. 17:28

DM 주신 분이 계셔서 해결 방법을 올려 드립니다.

먼저 아래 글을 읽어 보시면 이해 하시는데 도움이 되실 겁니다.

 

이전 글)

https://jjeong.tistory.com/1281

 

작성 시점의 글은 elasticsearch 5.x 대 버전이라 7.x 에서는 환경 설정 방법이 변경이 되었습니다.

그래서 이전 문서에서 이야기 하는 방법으로 classpath 설정을 하시면 동작 하지 않을 수 있습니다. 

 

7.x 에서는 아래와 같이 설정 하신 후 custom dic 을 적용 하시면 사용 하실 수 있습니다.

 

수정 할 파일)

$ bin/elasticsearch-env

- 5.x에서는 elasticsearch.in.sh 파일을 수정 했으나 7.x 에서는 변경이 되었습니다.

 

수정 내용)

ES_CLASSPATH="$ES_HOME/lib/*"

- 이 위치에 사전 파일에 대한 path 설정을 하시면 안됩니다.

- 이유는 ES_PATH_CONF 환경 변수에 대한 설정이 되어 있지 않기 때문에 인식을 못합니다.

- 아래와 같이 ES_CLASSPATH 를 라인에 추가해 주시면서 dictionary path 를 추가 하셔야 합니다.

 

ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/config/dictionary"

# check the Java version
"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.java_version_checker.JavaVersionChecker

 

이와 같이 설정을 맞쳤다면 elasitcsearch 를 실행 시켜서 정상적으로 형태소 분석이 이루어 지는지 확인 하시면 됩니다.

인명 사전 정보가 없기 때문에 본인 이름을 넣어서 테스트 해보시면 됩니다.

 

:

[Elasticsearch] Arirang plugin build commands.

Elastic/Elasticsearch 2019. 11. 14. 16:46

이런 단순한 루틴도 본능적이지 못하다니 ㅡ.ㅡ;

나이는 못 속이는 것인가라는 핑계를 ...

 

arirang-analyzer-6$ git checkout -b 8.2.0
arirang-analyzer-6$ mvn clean
arirang-analyzer-6$ git add *
arirang-analyzer-6$ git commit -m '8.1.0 to 8.2.0'
arirang-analyzer-6$ git push origin 8.2.0
arirang-analyzer-6$ mvn clean package -DskipTests=true

elasticsearch-analysis-arirang$ git checkout -b 7.4.0
elasticsearch-analysis-arirang$ git add *
elasticsearch-analysis-arirang$ git commit -m '7.3.0 to 7.4.0'
elasticsearch-analysis-arirang$ git push origin 7.4.0
elasticsearch-analysis-arirang$ mvn clean install -DskipTests=true

 

:

[Elasticsearch] elasticsearch-analysis-arirang 7.4.0, 7.4.2

Elastic/Elasticsearch 2019. 11. 14. 16:29

Elasticsearch Analysis Arirang Plugin 7.4.0 과 7.4.2 올렸습니다.

 

https://github.com/HowookJeong/elasticsearch-analysis-arirang/releases/tag/7.4.0

https://github.com/HowookJeong/elasticsearch-analysis-arirang/releases/tag/7.4.2

 

설치 방법은 아래와 같습니다.

 

로컬 빌드 후 파일로 설치)

elasticsearch-7.4.0$ bin/elasticsearch-plugin install file:///git/elasticsearch-analysis-arirang/target/elasticsearch-analysis-arirang-7.4.0.zip

불러오는 중입니다...

 

github 에 올라간 release 파일로 설치)

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

 

: