nori에서 기본적으로 검색할 때 "조사", "어미", "감탄사" 등 검색에 불필요한 단어도 모두 형태소 분석이 된다.
형태소 분석이 불필요한 불용어를 설정해보자.
"사랑하다"를 nori로 형태소 분석을 해보자.
POST _analyze
{
"tokenizer": "nori_tokenizer",
"text": "사랑하다"
}
결과
{
"tokens" : [
{
"token" : "사랑",
"start_offset" : 0,
"end_offset" : 2,
"type" : "word",
"position" : 0
},
{
"token" : "하",
"start_offset" : 2,
"end_offset" : 3,
"type" : "word",
"position" : 1
},
{
"token" : "다",
"start_offset" : 3,
"end_offset" : 4,
"type" : "word",
"position" : 2
}
]
}
위에서 실제 필요한 단어는 "사랑"이며 "하"(동사파생접미사)와 "다"(어미)는 필요 없을 것 같다.
이를 위해서 token_filter에 stoptags를 설정해주면 된다. (type: nori_part_of_speech)
PUT nori_test
{
"settings": {
"index": {
"analysis": {
"tokenizer":{
"korean_tokenizer": {
"type": "nori_tokenizer"
}
},
"analyzer": {
"my_nori_analyzer": {
"tokenizer": "korean_tokenizer",
"filter": [
"nori_filter"
]
}
},
"filter": {
"nori_filter": {
"type": "nori_part_of_speech",
"stoptags": []
}
}
}
}
}
}
POST nori_test/_analyze
{
"analyzer": "my_nori_analyzer",
"text": "사랑하다"
}
결과
{
"tokens" : [
{
"token" : "사랑",
"start_offset" : 0,
"end_offset" : 2,
"type" : "word",
"position" : 0
}
]
}
이런식으로 "하"와 "다"는 탈락된 결과를 나타낸다.
stoptags의 품사는 아래를 참고하면 된다.
태그 | 영문명 | 한글명 | 예시 |
---|---|---|---|
E (*) | Verbal endings | 어미 | - 사랑/하/다(E) - 고맙/다(E) |
IC (*) | Interjection | 감탄사 | - 와우(IC), 맙소사(IC) - 아(IC) 놀랍다 |
J (*) | Ending Particle | 조사 | - 나/는(J)/너/에게(J) - 추석/연휴/를(J) |
MAG (*) | General Adverb | 일반 부사 | - 빨리(MAG)/달리다 - 과연(MAG)/범인/은/누구/인가 |
MAJ (*) | Conjunctive adverb | 접속 부사 | - 그런데(MAJ) - 그러나(MAJ) |
MM (*) | ES:Modifier(한정사), 루씬 API:Determiner(관형사) | 설명이 다름 | - 맨(MM)/밥 |
NA (*) | Unknown | 알 수 없음 | |
NNB | Dependent noun (following nouns) | 의존명사 '것', '따름', '뿐', '데' |
- 볼/것(NNB) |
NNBC | Dependent noun | 의존명사(단위를 나타내는 명사) 개, 마리, 장, 권, 켤레, 줄, 몰 |
- 책/2/권(NNBC) |
NNG | General Noun | 일반 명사 | 강아지(NNG) |
NNP | Proper Noun | 고유 명사 | 비숑(NNP) |
NP | Pronoun | 대명사 | 그것(NP), 이거(NP) |
NR | Numeral | 수사 | 하나(NR)/밖에, 칠(NR)/더하기/삼(NR) |
SC (*) | Separator (· / :) | 구분자 | nori_tokenizer가 특수문자 제거 |
SE (*) | Ellipsis | 줄임표(...) | nori_tokenizer가 특수문자 제거 |
SF | Terminal punctuation (? ! .) | 물음표, 느낌표, 마침표 | nori_tokenizer가 특수문자 제거 |
SH | Chinese character | 한자 | 中國(SH) |
SL | Foreign language | 외국어 | hello(SL) |
SN | Number | 숫자 | 1(SN) |
SP (*) | Space | 공백 | |
SSC (*) | Closing brackets | 닫는 괄호 ),] | nori_tokenizer가 특수문자 제거 |
SSO (*) | Opening brackets | 여는 괄호 (,[ | nori_tokenizer가 특수문자 제거 |
SY | Other symbol | 심벌 | |
UNA (*) | Unknown | 알 수 없음 | |
UNKNOWN | Unknown | 알 수 없음 | |
VA | Adjective | 형용사 | 하얀(VA)/눈 |
VCN | Negative designator | 부정 지정사(서술격조사) | 사람/이/아니(VCN)/다 |
VCP | Positive designator | 긍정 지정사(서술격조사) | 사람/이(VCN)/다 |
VSV (*) | Unknown | 알 수 없음 | |
VV | Verb | 동사 | 움직이(VV)/다,먹(VV)/다 |
VX | Auxiliary Verb or Adjective | 보조 용언 | 가지/고/싶(VX)/다, 먹/어/보(VX)/다 |
XPN(*) | Prefix | 접두사(체언 접두사?) | ES에서 매핑되는 단어를 찾지 못함 |
XR(*) | Root | 어근 | ES에서 매핑되는 단어를 찾기 못함 |
XSA (*) | Adjective Suffix | 형용사 파생 접미사 | 멋/스럽(XSA)/다 |
XSN (*) | Noun Suffix | 명사 파생 접미사 | ES에서 매핑되는 단어를 찾기 못함 |
XSV (*) | Verb Suffix | 동사 파생 접미사 | 사랑/하(XSV)/다 |
- 위의 태그에서 (*)표시는 nori_part_of_speech 토큰 필터에서 디폴트로 설정된 태그
반응형