๐ง ํํ์ ๋ถ์๊ธฐ์ Analyzer ๋น๊ต
์ด ๋ฌธ์๋ Elasticsearch์์์ ํํ์ ๋ถ์ ๊ฐ๋ ๊ณผ
๋ค์ํ analyzer์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํ ์ค์ ์์ ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
5. ๐ง ํํ์ ๋ถ์๊ธฐ๋ ๋ฌด์์ธ๊ฐ?
- ํํ์ ๋ถ์๊ธฐ(morphological analyzer)๋ ๋ฌธ์ฅ์ ์๋ฏธ ๋จ์(ํํ์) ๋ก ๋ถ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- Elasticsearch์์๋ analyzer๋ฅผ ํตํด ์ด ์์ ์ ์ํํฉ๋๋ค.
โ๏ธ analyzer ๊ตฌ์ฑ ์์
analyzer = tokenizer + filter
- tokenizer: ๋ฌธ์ฅ์ ๊ธฐ๋ณธ ๋จ์๋ก ์ชผ๊ฐฌ (์: ๋จ์ด ๊ธฐ์ค, n-gram ๋ฑ)
- filter: ์๋ฌธ์ ๋ณํ, ๋ถ์ฉ์ด ์ ๊ฑฐ ๋ฑ ํ์ฒ๋ฆฌ ์์ ์ํ
๐ฐ๐ท nori: ํ๊ธ ํํ์ ๋ถ์๊ธฐ
- Elasticsearch์์ ์ ๊ณตํ๋ nori analyzer๋ ํ๊ตญ์ด์ ํนํ๋ ํํ์ ๋ถ์๊ธฐ์ ๋๋ค.
- ๋์ด์ฐ๊ธฐ๋ง์ผ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ค์ด ์ด๋ฏธ, ์กฐ์ฌ, ์ ๋์ด, ๋ณตํฉ์ด ๋ฑ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์:
"์ผ์ฑ์ ์์ ์ฃผ๊ฐ๋"
โ์ผ์ฑ์ ์
,์
,์ฃผ๊ฐ
,๋
6. ๐ฌ ๋ค์ํ analyzer ๋น๊ต
ํ ์คํธ ๋ฌธ์ฅ
์ผ์ฑ์ ์์ ์ฃผ๊ฐ๋ 7๋ง ์์ด๋ค.
1๏ธโฃ standard analyzer (๊ธฐ๋ณธ)
POST http://localhost:9200/_analyze
{
"analyzer": "standard",
"text": "์ผ์ฑ์ ์์ ์ฃผ๊ฐ๋ 7๋ง ์์ด๋ค."
}
๐ ๊ฒฐ๊ณผ ์์:
์ผ์ฑ์ ์์
์ฃผ๊ฐ๋
7๋ง
์์ด๋ค
- ๋์ด์ฐ๊ธฐ ๊ธฐ์ค ๋ถํ , ์กฐ์ฌ/์ด๋ฏธ ์ฒ๋ฆฌ ๋ถ๊ฐ
2๏ธโฃ whitespace analyzer
POST http://localhost:9200/_analyze
{
"analyzer": "whitespace",
"text": "์ผ์ฑ์ ์์ ์ฃผ๊ฐ๋ 7๋ง ์์ด๋ค."
}
๐ ๊ฒฐ๊ณผ ์์:
์ผ์ฑ์ ์์
์ฃผ๊ฐ๋
7๋ง
์์ด๋ค.
- ๊ณต๋ฐฑ๋ง ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌ, ๋ฌธ์ฅ ๋ถํธ ํฌํจ๋จ
3๏ธโฃ nori analyzer (ํ๊ธ ์ ์ฉ)
POST http://localhost:9200/_analyze
{
"analyzer": "nori",
"text": "์ผ์ฑ์ ์์ ์ฃผ๊ฐ๋ 7๋ง ์์ด๋ค."
}
๐ ๊ฒฐ๊ณผ ์์:
์ผ์ฑ์ ์
์
์ฃผ๊ฐ
๋
7
๋ง
์
์ด๋ค
- ์กฐ์ฌ(
์
,๋
)๊น์ง ๋ถ๋ฆฌ - ์ซ์ ๋ฐ ๋ณตํฉ์ด๋ ์ ํํ ๋ถํด
โ nori analyzer๊ฐ ํ๊ตญ์ด์ ์ ํฉํ ์ด์
๊ธฐ๋ฅ | ์ค๋ช |
---|---|
ํํ์ ๋จ์ ๋ถ๋ฆฌ | ์กฐ์ฌ, ์ด๋ฏธ, ์ ์ฌ ๋ฑ์ ์ ํํ ๊ตฌ๋ถ |
์ฌ์ฉ์ ์ฌ์ ์ง์ | ์ฌ์ฉ์ ์ ์ ๋จ์ด ๋ฑ๋ก ๊ฐ๋ฅ (nori_user_dict.txt ) |
๋ณตํฉ์ด ์ฒ๋ฆฌ | “๋ํ๋ฏผ๊ตญ์ ๋ถ” โ “๋ํ๋ฏผ๊ตญ”, “์ ๋ถ” ์ฒ๋ผ ์๋ฏธ ๋จ์ ๋ถํด ๊ฐ๋ฅ |
๋ถ์ฉ์ด(stopword) ์ค์ | ์๋ฏธ ์๋ ๋จ์ด ํํฐ๋ง ๊ฐ๋ฅ (๋ , ์ด , ๊ฐ ๋ฑ) |
๐ ์ ๋ฆฌ
analyzer | ์ค๋ช | ํ๊ตญ์ด ์ ํฉ์ฑ |
---|---|---|
standard | ๋์ด์ฐ๊ธฐ ๊ธฐ๋ฐ ๊ธฐ๋ณธ ๋ถ์๊ธฐ | โ |
whitespace | ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก๋ง ๋ถ๋ฆฌ | โ |
nori | ํํ์ ๊ธฐ๋ฐ ํ๊ธ ์ ์ฉ ๋ถ์๊ธฐ | โ |