SlideShare a Scribd company logo
1 of 46
1
김종민
Community Engineer @Elastic
kimjmin@gmail.com / jongmin.kim@elastic.co
Elasticsearch
한글 형태소 분석기
nori
2
오늘 발표는 재탕입니다…
작년 데놀, 그리고 SOSCON, Nori 웨비나
발표자료 만드는데
몇시간이 걸리는데,
몇십 분짜리 발표에 한번만
쓰고 끝내면 아깝잖아요?
3
Elastic?
4
Most think of search as…
5
SEARCH
6
Multilingual
Full Text Search
Stemming
Type ahead
7
Mobile
Geo search
Influenced by Rating
Personalized Ranking
Time Range
8
9
Stemming /
Highlighting
Geo range Filter
Search
Time range Filter
Pagination
Numeric Filter
10
Building search needs ...
11
All this.
SecureMulti-lingual
Query language
Drill down
APIs Enrichment
Alerting
Query Language
Unstructured
Search
Type ahead
High availability
Fast
Highlighting
Scalable
12
Elastic has all this.
Secure
Multi-lingual
Query language
Real-time Drill down
APIs
Data Sources
Enrichment
Alerting
Query Language
Unstructured
Search
Type ahead
High availability
Fast
Highlighting
Scalable
1313
Elastic Stack
Store, Search, & AnalyzeElasticsearch
Visualize & ManageKibana
Beats IngestLogstash
1414
Metrics
Logging
APM
Site
Search
Application
Search
Business
Analytics
Enterprise
Search
Security
Analytics
Future Solutions
Elastic Stack
Store, Search, & Analyze
Visualize & Manage
Ingest
Kibana
Elasticsearch
Beats Logstash
1515
APM Site Search App Search
Solutions
1616
Metrics
Logging
APM
Site
Search
App
Search
Business
Analytics
Enterprise
Search
Security
Analytics
Future Solutions
SaaS
Elastic Cloud
Self Managed
Elastic Cloud
Enterprise
Standalone
Deployment
Elastic Stack
Store, Search, & Analyze
Visualize & Manage
Ingest
Kibana
Elasticsearch
Beats Logstash
1717
SaaS Self Managed
Elastic Cloud Elastic Cloud
Enterprise
Standalone
Elasticsearch
Service
Site Search App Search
1818
Elastic Stack
Store, Search, & AnalyzeElasticsearch
Visualize & ManageKibana
Beats IngestLogstash
Metrics
Logging
APM
Site
Search
Application
Search
Business
Analytics
Enterprise
Search
Security
Analytics
Future Solutions
SaaS
Elastic Cloud
Self Managed
Elastic Cloud
Enterprise
Standalone
Deployment
19
20
RDBMS 에서는 데이터를 테이블 형태로 저장합니다.
열을 기준으로 인덱스를 만듭니다.
책의 맨 앞에 있는 제목 리스트와 같습니다.
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
21
검색엔진에서는 inverted index 라는 구조로
저장합니다.
RDBMS 와 반대 구조입니다.
텍스트를 다 뜯어서 검색어 사전을 만듭니다. (Term 이라고 합니다)
책의 맨 뒤에 있는 페이지를 가리키는 키워드 같습니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast 2 jumps 1
The 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
22
실제로는 이렇게 저장됩니다.
텍스트를 저장할 때 몇가지 처리 과정을 거칩니다.
이 과정을 텍스트 분석 (Text Analysis) 라고 합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
23
텍스트 분석 과정
문장을 분리합니다. 이 과정을 Tokenizing 이라고 합니다.
보통은 Whitespace Tokenizer 가 사용됩니다.
TOKEN (TERM) TOKEN (TERM) TOKEN (TERM) TOKEN (TERM)
Fast dog jumps quick
The fox lazy rabbits
brown jumping over the
TEXT
The quick brown fox jumps over the lazy dog
Fast jumping rabbits
24
텍스트 분석 과정
Tokenized 된 Term 들을 가공합니다. 이 과정을 Token Filtering 이라고 합니다.
먼저 Lowercase Token Filter로 대소문자를 변환 합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast  fast 2 jumps 1
The  the 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
25
텍스트 분석 과정
토큰을 (보통 ascii 순서로) 재 정렬합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
26
텍스트 분석 과정
불용어(stopwords, 검색어로서의 가치가 없는 단어들) 를 제거합니다.
a, an, are, at, be, but, by, do, for, i, no, the, to … 등등
Stop Token Filter 가 사용됩니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
27
텍스트 분석 과정
형태소 분석 과정을 거칩니다. 보통 ~s, ~ing 등을 제거하는 과정입니다.
보통 Snowball Token Filter 를 사용합니다.
한글은 의미 분석을 해야 해서 좀 더 복잡합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy  lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits  rabbit 2
jumping  jump 2
jumps  jump 1
28
텍스트 분석 과정
jumping, jumps가 jump 로 똑같이 바뀌었으므로 토큰을 병합 해 줍니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbit 2
jump 1 , 2
29
텍스트 분석 과정
동의어를 처리합니다.
Synonym Token Filter 를 이용해 동의어 사전을 정의할 수 있습니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
30
검색 과정
검색어도 똑같이 텍스트 처리를 합니다.
“The lazy rabbits” 라고 검색하면
The lazy rabbits
lazi
rabbit
1
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
2
31
검색엔진은
RDBMS 검색엔진
데이터 저장 방식 정규화 역정규화
전문(Full Text) 검색 속도 느림 빠름
의미 검색 불가능 가능
Join 가능 불가능
수정 / 삭제 빠름 느림
32
한글 검색
한글은 복합어로 이루어진 언어입니다.
단순한 whitespace 기반이 아닌 단어 사전 기반의 분석이 필요합니다.
• 동해물과 백두산이
– 동해 + 물 / 백두 + 산
– 동 + 해물 / 백 + 두산
• 대학생선교회
– 대학생 + 선교 + 회
– 대학 + 생선 + 교회
33
한글 형태소 분석기
Elasticsearch 에서 사용 가능한 한글 형태소 분석기는
아래와 같은 프로젝트들이 있습니다.
- 아리랑 : 이수명, 정호욱님
- 은전한닢 : 유영호, 이용운님
- open-korean-text : 유호현님
34
2018. 08 – Nori 출시
https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-for-
korean-language-analysis
35
What is Nori?
• https://github.com/jimczi
• Creator of Kuromoji – Japanese Text Analyzer
• Contributor of MeCab
• 은전한닢의 mecab-ko-dic 사전을 사용합니다.
http://eunjeon.blogspot.com
• Nori는 Kuromoji 엔진의 코드를 fork 해서 mecab-ko-dic 사전을 적용시킨
Elasticsearch 독자적인 형태소 분석기 입니다.
Created by Jim Ferenczi
36
Why Nori?
https://issues.apache.org/jira/browse/LUCENE-8231
37
Why Nori?
https://issues.apache.org/jira/browse/LUCENE-8231
😳
38
How Nori?
https://github.com/apache/lucene-solr/tree/master/lucene/analysis
39
How Nori?
mecab-ko-dic 사전 사이즈 : 약 200MB
40
How Nori?
nori 사전 사이즈 : 24MB
41
How Nori?
mecab-ko-dic 사전 구조
NNG.csv
42
How Nori?
Korean POS (Part Of Speech) Table
출처 : 꼬꼬마 한국어 형태소 분석기
http://kkma.snu.ac.kr/documents/?doc=postag
43
• CSV(array) 형식의 텍스트로
저장된 사전을 FST (finite state
transducer)로 부호화 하고 Binary
구조로 재구성.
• Matrix.def 파일 가변 길이로 변경
후 직렬화
How Nori?
nori 사전 구조 :
44
How Nori?
• 명사와 합성어의 부분들을 부호화  사전에서 중복 제거
• 오른쪽 어절이 왼쪽 어절과 다른 경우에만 저장하고 다르면 저장하지 않음. (중복
제거)
nori 사전 구조 :
45
자세한 사용법은 Elastic 공식 도큐먼트에 있습니다.
https://www.elastic.co/guide/en/elasticsearch/plugins/6.4/analysis
-nori.html
46
https://www.elastic.co
https://www.facebook.com/groups/elasticsearch.kr/
감사합니다

More Related Content

What's hot

Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기AWSKRUG - AWS한국사용자모임
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나종민 김
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントNTT DATA OSS Professional Services
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Seongyun Byeon
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into ElasticsearchKnoldus Inc.
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기NAVER D2
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lakeDaeMyung Kang
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
 
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지Changje Jeong
 
[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델NHN FORWARD
 
엘라스틱 서치 세미나
엘라스틱 서치 세미나엘라스틱 서치 세미나
엘라스틱 서치 세미나종현 김
 
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?Juhong Park
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝NAVER D2
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법Jeongsang Baek
 
데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립승화 양
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearchhypto
 
Elastic stack Presentation
Elastic stack PresentationElastic stack Presentation
Elastic stack PresentationAmr Alaa Yassen
 

What's hot (20)

Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into Elasticsearch
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
 
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지
AWS를 활용하여 Daily Report 만들기 : 로그 수집부터 자동화된 분석까지
 
[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델[2018] 구조화된 검색 모델
[2018] 구조화된 검색 모델
 
엘라스틱 서치 세미나
엘라스틱 서치 세미나엘라스틱 서치 세미나
엘라스틱 서치 세미나
 
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
 
[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝[211] 네이버 검색과 데이터마이닝
[211] 네이버 검색과 데이터마이닝
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립
 
Soma search
Soma searchSoma search
Soma search
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
 
Elastic stack Presentation
Elastic stack PresentationElastic stack Presentation
Elastic stack Presentation
 

Elasticsearch 한글 형태소 분석기 Nori 노리