2015년 8월 25일 화요일

Elasticsearch Analysis (by Elasticsearch Korea)

Elasticsearch에 Mecab Ko 사전경로 설정하는 방법을 설명하기 전에 Analysis 개념을 먼저 정리한다.

본 내용은 Elasticsearch Korea의 Youngsik Yun님 발표자료를 옮긴 것입니다.
(* 원문: http://elasticsearch-kr.github.io/presentations/2014-04-30-analysis/#/)

1. Analysis개념


Index analysis는 Analyzer, Tokenizer, TokenFilter로 구성되면 Terms 인덱스를 만든다.

2. Analyzer 구성요소


Character Filtering: Turns the input string into a different string  (Pre-processes)
Tokenization: Divide the char-filtered string into an array of tokens
Token Filtering: Post-processes the filtered tokens into a mutated token array


3. ANALYZER 종류


default  analyzer : 8종류
or
custom analyzer 작성

3.1 DEFAULT ANALYZER

standard
simple
whitespace
stop
keyword
pattern
language
snowball

1) STANDARD ANALYZER

standard Tokenizer
+ standard TokenFilter
+ lowercase TokenFilter
+ stop TokenFilter

언제 사용? 지정 한하면 기본 적용되는 analzyer이다

2) SIMPLE ANALYZER
only lower case tokenizer 만 구성

3) WHITESPACE ANALYZER
whitespace tokenizer 만 구성

4) STOP ANALYZER
lower case tokenizer
+
stop token filter
언제 사용?  stopwords 를 등록한다

5) KEYWROD ANALYZER
not_analyzed로 마킹 (이해불가)

6) PATTENRN ANALYZER
regular expression을 통해서 텍스트 분류
lowercase + pattern + flags + stopwords 옵션

7) LANGUAGE ANALYZER
지정한 단어가 나오면 analyzing 하는 목적

8) SNOWBALL ANALYZER
standard tokenizer
+ standard filter, lowercase filter
+ stop filter, snowball filter
언제 사용? streaming 분석기

3.2 CUSTOM ANALYZER
Tokenizer
+ Token Filter (zero or more)
+ Char Filters (zero or more)


4. TOKENIZER 종류

10개
standard
edge ngram
keyword
letter
lowercase
ngram
whitespace
pattern
uax email url
path heirarchy

1) STANDARD TOKENIZER
Unicode Text Segment Algorithm
basic grammer tokenizer
max_token_length (default 255)
길이 넘으면 무시

2) EDGE NGRAM TOKENIZER
nGram 과 유사
"tokenizer" : {
    "my_edge_ngram_tokenizer" : {
        "type" : "edgeNGram",
        "min_gram" : "2",
        "max_gram" : "5",
        "token_chars": [ "letter", "digit" ]
    }
}

3) KEYWORD TOKENIZER
Keyword
buffer_size   256


4) WHITESPACE TOKENIZER
text를 whitespace 별로 나눈다

5) LETTER TOKENIZER
text에서 letter 아닌 것 제거

6) LOWERCASE TOKENIZER
letter tokenizer + lowercase tokenfilter
즉, letter가 아닌 것 제거하고 lower case 로 만듦

7) NGRAM TOKENIZER
"tokenizer" : {
    "my_ngram_tokenizer" : {
        "type" : "nGram",
        "min_gram" : "2",
        "max_gram" : "3",
        "token_chars": [ "letter", "digit" ]
    }
}

8) PATTERN TOKENIZER
regular expression 사용
pattern + flags + group 옵션

9) UAZ EMAIL URL TOKENIZER
standard tokenizer 같고 email, url 나누기
max_token_length (default 255)


10) PATH HIERARCHY TOKENIZER
path 나누기
/something/something/else
And produces tokens:

/something
/something/something
/something/something/else
옵션
delimiter (default /)
replacement (option, delimiter 나오면 대체)
buffer_size (default 1024)
reverse (default false)
skip (처음 건너뛰기, default 0)


5. TOKEN FILTER 종류


33개
tokenizer로 부터 token stream을 받아서 token에 대해 lower case, add, delete 등을 처리

1) STANDARD TOKEN FILTER
normalize token

2) ASCII FOLDING TOKEN FILTER
알파벳, 숫자, 기호를 ascii 로 변환
"index" : {
    "analysis" : {
        "analyzer" : {
            "default" : {
                "tokenizer" : "standard",
                "filter" : ["standard", "asciifolding"]
            }
        }
    }
}
이렇게 FILTER를 표현
"index" : {
    "analysis" : {
        "analyzer" : {
            "default" : {
                "tokenizer" : "standard",
                "filter" : ["standard", "my_ascii_folding"]
            }
        },
        "filter" : {
            "my_ascii_folding" : {
                "type" : "asciifolding",
                "preserve_original" : true
            }
        }
    }
}

3) LENGTH TOKEN FILTER
min~max 주어서 remove word

4) LOWERCASE TOKEN FILTER
5) UPPERCASE TOKEN FILTER
6) NGRAM TOKEN FILTER
min_gram ~ max_gram

7) EDGE NGRAM TOKEN FILTER
그외 ...


6. CHARACTER FILTER 종류


Tokenizer를 통과하기 전에 string에 대한 전처리기

3개
mapping
html strip
pattern replace

1) MAPPING CHAR FILTER

맵핑 설정한 문자로 바꾸어 준다
{
    "index" : {
        "analysis" : {
            "char_filter" : {
                "my_mapping" : {
                    "type" : "mapping",
                    "mappings" : ["ph=>f", "qu=>q"]
                }
            },
            "analyzer" : {
                "custom_with_char_filter" : {
                    "tokenizer" : "standard",
                    "char_filter" : ["my_mapping"]
                },
            }
        }
    }
}

2) HTML STRIP CHAR FILTER
html strip


3) PATTERN REPLACE CHAR FILTER
regex



7. ICU ANALYSIS PLUGIN


ICU? International Components for Unicode

종류
icu_normalization
icu_folding
filtering
icu_collation

댓글 없음:

댓글 쓰기