Inflearn brand logo image

인프런 커뮤니티 질문&답변

focandlol님의 프로필 이미지
focandlol

작성한 질문수

실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)

nori 관련 질문드립니다.

작성

·

41

·

수정됨

0

안녕하세요 강사님 강의 잘 보고 있습니다.
다름 아니라 nori 토큰화 과정에서 이해가 안되는 부분이 있어서 질문드립니다.

get /_analyze
{
  "text":"",
  "analyzer":"nori"
}

 간단한 nori analyzer 테스트 쿼리입니다.

해운대 결과

{
  "tokens": [
    {
      "token": "해운",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 0
    },
    {
      "token": "대",
      "start_offset": 2,
      "end_offset": 3,
      "type": "word",
      "position": 1
    }
  ]
}


해운대로 결과

{
  "tokens": [
    {
      "token": "해운",
      "start_offset": 0,
      "end_offset": 2,
      "type": "word",
      "position": 0
    },
    {
      "token": "대",
      "start_offset": 2,
      "end_offset": 3,
      "type": "word",
      "position": 1
    }
  ]
}


해운대구 결과

{
  "tokens": [
    {
      "token": "해운대",
      "start_offset": 0,
      "end_offset": 3,
      "type": "word",
      "position": 0
    },
    {
      "token": "구",
      "start_offset": 3,
      "end_offset": 4,
      "type": "word",
      "position": 1
    }
  ]
}


해운대, 해운대로 결과에서는 해운대가 해운 + 대 로 토큰화 되었습니다.
해운대구 결과에서는 마찬가지로 해운 + 대 + 구 로 토큰화 될 것이라 예상했지만 해운대 + 구 로 토큰화 되었습니다.
어떤 이유로 이렇게 동작하는지 궁금합니다.

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 focandlol님! 질문 잘 해주셨습니다:)

 

nori analyzer는 자체적인 로직으로 형태소를 분리합니다.

이 때, 문맥과 텍스트의 길이에 따라 형태소가 다르게 분리되기도 합니다.

이러한 원리 때문에 말씀해주신 상황이 발생한 것으로 유추됩니다!

 

이를 해결하기 위해서는 사용자 사전(user dictionary) 기능을 활용하셔야 합니다.

이와 관련해서는 링크에 설명이 잘 되어 있어서 링크 첨부드릴게요~!

https://esbook.kimjmin.net/06-text-analysis/6.7-stemming/6.7.2-nori

https://discuss.elastic.co/t/dec-17th-2020-kr-elastic-cloud/258379

https://daram.tistory.com/560

 

이 외로 궁금하신 점 있으시면 또 질문 남겨주세요~~

0

안녕하세요, 인프런 AI 인턴입니다. focandlol님.

Nori Analyzer가 작동하는 방식에 대한 궁금점을 해결해드리겠습니다. Nori Analyzer는 한국어의 형태소 분석을 통해 텍스트를 토큰화하는 기능을 제공합니다. 형태소 분석은 단어의 의미를 고려하여 가능한 가장 긴 형태소들을 우선적으로 추출하는 특징을 갖고 있습니다. 이 과정에서 Nori는 어근 및 접미사 등 어휘적 구조를 분석하여 의미적으로 가장 긴 형태소를 우선적으로 인식합니다.

주제 요약:

  • 형태소 분석 특징: Nori Analyzer는 가능한 고유한 의미를 가지는 가장 긴 형태소를 우선 인식합니다. 해운대구의 경우 해운대라는 단어가 하나의 지명으로 인식되며, 따라서 ‘해운대’가 하나의 형태소로 뽑힙니다.
  • 예시 설명:
    • 해운대와 같은 경우에는 명확한 의미적 구분 없이 더 작은 단위, ‘해운’과 ‘대’로 쪼개질 수 있습니다.
    • 반면 해운대구는 ‘해운대’라는 의미적 단위를 인식하여 ‘해운대’를 독립된 단위로 간주하고 다음에 오는 ‘구’와 따로 토큰화합니다.

이러한 방식은 다소 복잡하게 보일 수 있지만, 실제 검색 성능 향상에 도움이 되는 방식으로 설계되었습니다.

아래 URLs에서 Nori Analyzer에 대한 더 많은 정보와 예제를 참조하실 수 있습니다:
- Elasticsearch Nori Analyzer on Stack Overflow
- Nori Analyzer 공식 Elasticsearch 문서

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

focandlol님의 프로필 이미지
focandlol

작성한 질문수

질문하기