'개발새발'에 해당되는 글 56건

 

3.1 사전용 탐색 구조

  • 역색인과 질의가 제시되었을 수행할 작업
    • 질의 용어가 어휘집(Vocabulary) 포함되어 있는지를 판단
    • 만약 포함되어 있다면, 해당 문헌 포스팅에 상응하는 포인터를 확인
    • 어휘집 조회 연산은 사전(Dictionary)이라 불리는고전적인 자료 구조를 이용
      • 사전은 해싱과 탐색 트리라는 가지 갈래의 구현 방법이 있음
      •  가지 방법 선택 고려 사항
        • 개의 키를 가질 것인가?
        • 수를 고정시켜 놓을 것인가 혹은 번번히 변화시킬 것인가?
        • 변경시킬 경우 새로운 키를 사전에 삽입만 되게 것인가?
        • 아니면 몇몇 키는 삭제도 되게 것인가?
        • 다양한 키에 접근하는 상대적 빈도는 어떠한가?
  • 해싱(Hashing)
    • 몇몇 검색 엔진에서 사전 조회용으로 사용됨
    • 어휘집 용어() 해시 충돌이 일어나지 않도록 충분한 저장 공간에서 정수값으로 해시됨
  • 탐색 트리
    • 가장 알려진 탐색 트리는 이진트리(Binary tree) 내부 노드가 개의 자식 노드를 가짐
    • 용어 탐색은 트리의 루트부터 시작됨
    • 효율적인 탐색이 되기 위해서는 트리가 균형을 이루어야 하며, 노드에 달려있는 개의 하부 트리에 저장된 용어의 수가 동의하거나 1 차이를 가져야
    • 가장 중요한 이슈는 트리를 재균형화하는 문제로서, 용어가 이진 탐색 트리에 삽입되거나 삭제될 경우에도 트리의 균형성이 유지되도록 균형이 재조정되어야
    • B-트리(B-tree): 재균형화의 부담을 덜기 위해 내부 노드에 붙어있는 하부 트리의 수가 일정한 간격을 두고 변하도록 하는
 

3.2 와일드 카드 질의

  • 후방 절단 질의(Trailing wildcard query)
    • mon* 경우 B-트리에서 mon 가진 용어들의 집합 W 열거함
  • 전방 절단 질의(Leading wildcard query)
    • *lemon 경우 B-트리에서 ‘root-n-o-m-e-l’ 경로에 따라 집합 R 열거함
  • 순열 색인(Permuterm index)
    • 특수 기호 $ 사용하여 용어의 끝을 표시 다양한 형태로 회전된 각각의 용어가 어휘집 용어와 연결되며, 순열 어휘집(Permuterm vocabulary) 만듦
    • 예를 들어 m*n 경우 $ 붙이고 회전을 통해 n$m* 찾으면 man moron이라는 용어가 회전하며 * 여러개일 경우 * 위치에 기반하여 부분으로 하나씩 확인하면서 없는 것들을 걸러냄
    • 따라서 순열 색인은 용어를 모두 회전시켜야 하기 때문에 사전의 규모가 커지는 단점이 있음
  • 와일드카드 질의를 위한 k-gram 색인
    • K 문자들의 연속으로 집합을 구성함
      • castle 경우 $ca, cas, ast, stl, tle, le$
    • 사후 필터링(Postfiltering)
      • red* 경우$re red라는 2가지 3-gram색인을 논리곱 연산한 것을 포함하고 있지만, 원래의 와일드카드 질의인 red*과는 매치되지 않기 때문에 단순 문자열-일치 연산으로 오류를 해소함
 

3.3 철자 교정

  • 철자 교정의 단계는 다음과 같음
    • 편집거리(Edit distance) 기반하는 방법
    • k-gram 중복(k-gram overlap) 기반하는 방법
  • 철자 교정의 원칙
    • 가장 근접한 철자로 수정
    • 근접한 철자가 다수일 경우 다른 사용자들이 보다 많이 이용하는 질의를 철자 교정에 이용함
  • 고립 단어 교정(Isolated-term correction)
    • 번에 하나의 질의 용어를 수정함
    • 편집 거리는 문자열 s1 s2 변환하는데 필요한 편집 연산(Edit operation) 최소수로 Levenshtein 거리(Levenshtein distance)라고도
    • 철자 교정을 위해 k-gram 색인을 이용하는 경우 선형 스캔 교집합(Linear scan intersection) 연산을 통해 질의 q로부터 고정된 수의 k-gram 포함하고 있는 어휘집 용어와 단순히 일치되는 것을 찾는 단점이 바로 드러남
      • 이는 |A B| / |A B| 정의되는 Jaccard 계수(Jaccard coefficient) 사용하여 A B 집합 사이의 중복 부분을 측정할 있음
    • 음성학적 교정
      • 사용자가 자신이 목표한 용어처럼 소리나는 질의를 입력하기 때문에 생긴 철자 오류를 교정하는
      • 특히 사람 이름을 검색할 적용할 있음
      • 각각의 용어에 대한 음성 해시(Phonetic hash) 생성하는 것으로 통칭하여 Soundex 알고리즘(Soundex algorithm)이라고

 

 

 

블로그 이미지

나뷜나뷜

,