數奇雜記  

20070615 바위처럼, 한글초성색인
 2007년 6월 15일 (금요일) 대전/서울 흐림, 오후에 대전은 맑음 

바위처럼 (유인혁 글, 가락)

바위처럼 살아가보자.
모진 비바람이 몰아친데도
어떤 유혹의 손길에도 흔들림없는 
바위처럼 살자꾸나 

바람에 흔들리는 건,
뿌리가 얕은 갈대일뿐.
대지에 깊이 박힌 저 바위는
굳세게도 서 있으리. 

우리모두 절망에 굴하지 않고,
시련속에 자신을 깨우쳐 가며,
마침내 올 해방세상 주춧돌이 될
바위처럼 살자꾸나 

Get the Flash Player to see this player.

글, 가락 유인혁 / 노래 천리마 / 앨범 97 새내기 

한때 가장 좋아했던 노래다. 물론 지금도 좋아해서 가사를 외운다. 지금 들리는 것은 천리마의 97새내기라는 앨범에 실렸던 노래다. 앨범으로 처음 발표된 것은 1993년에 꽃다지 2집에서다. 그런데 노래방에는 없다. 운동권 또는 노동계에서 주로 부르던 노래여서인지 대중속으로는 파고 들지 못했나 보다. 노래방에 갈 때마다 이 점이 아쉽다... 마지막 소절을 가장 좋아하는데, 나에게 있서 그때와 지금은 해방세상의 의미가 달라진 것 같다. 또한 그때와 지금이 달라진 점은 세상을 움직이는 원동력이 일부 권력있는 사람에서 인터넷으로 옮겨졌다는 것이다. 노무현 대통령이 평민으로서 왕이 된 것을 보면 알 수 있는 일이다. 지금 우리에게 해방세상은 어떤 의미일까?

Get the Flash Player to see this player.

꽃다지의 2집에 실린 원곡도 한번 들어볼까나... 

모바일환경을 위한 한글초성색인

나는 휴대전화가 없다. 오늘 출장을 가면서 다른 이의 핸드폰에서 이름목록을 찾아서 대신 전화를 걸 일이 있었다. 입력은 "ㅈㅎ"으로만 해서 범위를 크게 줄일 수 있었고 "진ㅎ"으로 검색함으로써 거의 정확한 이름을 찾을 수 있었다. 나중에 다시 확인해 보니 "ㅈ호"로 괜찮은 결과를 얻을 수 있었다. 휴대전화의 전화번호부와 같은 경우에는 항목의 수가 수백~수천 건밖에 안될 것이므로 아마도 문자열 비교만으로도 빠르게 검색해줄 수 있을 것이다.

이 기능을 보니 지금 한창 논의와 개발이 진행중인 모바일 검색에 초성색인을 지원하게 되면 편리한 기능이 될 것같다. 모든 섹션에 대해서 초성 색인을 하는 것은 무리가 있을 것 같고, 검색을 위한 전 단계로서 용어사전이나 온톨로지 또는 시소러스를 대상으로 한다면 색인의 양은 작아질 것이고 사용자는 적은 수의 입력으로도 검색어를 선택할 수 있게 되어 검색에 도움을 줄 수 있을 것 같다. 인물 DB 등에서는 직접적으로 이런 색인방식을 적용할 수도 있을 것이다.

기능 분석

  1. 초성 자음 배열 지원 ("김진숙"은 "ㄱㅈㅅ"으로 표현)
  2. 온음+초성 혼용 검색/색인 지원 ("김ㅈ", "ㄱ진"으로도 검색가능해야 함)
  3. 좌절단/우절단 동시 지원 ("ㅈㅎ"은 '이진호', '조혜련' 등을 찾아주어야 함)
  4. 자음 낱자의 검색을 지원해야 할 지의 여부는 고려할 일이나 일단 지원해야 한다고 가정

색인방법

위의 모든 기능을 지원하기 위해서는 하나의 단어를 세 가지 형태의 색인을 동시에 추출해야 한다. 첫번째는 낱자 방식의 색인이며 두번째는 초성자음 색인, 세번째는 초성과 낱자의 복합 바이그램이다.

첫번째의 낱자 색인 방식은 각 음절과 두음절씩을 동시에 색인한다. (KRISTAL의 INDEX_BY_CHAR 색인방식에 bigram을 적용하는 것과 유사하다. 기능 분석에서 보듯이 만약 낱자 검색을 지원하지 않을 수 있다면 bigram만 색인해도 될 것 같다. 그러나 경험상 이렇게 제약한다면 언젠가는 또 풀어야 하게 되지 않을까.)

두번째의 초성 색인 방식은 어절로부터 초성 자음만을 추출하여 위와 동일하게 적용하는 것이다. 예를 들어 "김진숙"은 "ㄱㅈㅅ"으로 변환하여 각 자음과 자음을 색인한다. 더불어 검색속도를 향상시키기 위해서는 낱자의 바이그램(bi-gram)을 색인해야 한다.

쌍자음의 빈도는 많지 않으므로 낱자의 경우에는 14개, 바이그램의 경우 144개가 주를 이룰 것이므로 색인관리의 부담이 매우 커지는 단점이 있을 것 같다.

초성-온음 복합색인에서는 초성과 음절간 바이그램을 색인한다. 이어지는 두음절에 대해서 초성-온음, 온음-초성의 두가지 경우를 무조건 바이그램을 만들면 될 것 같다.

이렇게 세가지 방식으로 색인을 하게 되면 삼음절에 대해서 총 14개의 색인이 추출되는 매우 부담이 큰 색인방식이 되어 아마도 사전류의 용어 항목, 인명 데이터베이스의 이름 항목 등에만 적용할 수 있는 제한된 색인방식이 될 것 같다. 한국통신의 전화번호부와 같이 수천만건의 이름에 대해서도 적용이 가능할 수 있을까?

외국어의 경우에는 어떻게 처리해야 할까? 한글을 제외하고는 모두 풀어쓰기가 기본이므로 낱자와 바이그램으로 색인하면 되지 않을까?

다어절 색인

어절이 두 개이상 출현하는 경우에는 단어 위치를 한칸 건너띈다. 다음은 그 예이다.

 예: "동물 그림"
 색인
    1: ㄷ, ㄷㅁ, 동, 동물, ㄷ물, 동ㅁ
    2: ㅁ, 물
    3:
    4: ㄱ, ㄱㄹ, 그, 그림, ㄱ림, 그ㄹ
    5: ㄹ, 림 

시스템 구현상 편의를 위해 낱자와 바이그램의 구분은 문단번호(passage 번호)를 이용하여 구분할 수 있을 것다. 즉 낱자의 경우에는 문단번호를 0으로 하고, 바이그램은 -1과 같은 방식으로 하는 따위이다.

검색방법

질의확장에 의한 불리안 검색으로 지원한다. 모든 낱자와 바이그램이 색인되어 있으므로 WITHIN 근접연산을 활용하면 될 것 같다. KRISTAL의 질의처리기는 거의 고치지 않아도 될 것 같다. 다음은 그 예이다.

  문서: "이진호"
  색인(위치별)
      1 = ㅇ, ㅇㅈ, 이, 이진, ㅇ진, 이ㅈ
      2 = ㅈ, ㅈㅎ, 진, 진호, ㅈ호, 진ㅎ
      3 = ㅎ, 호 

색인에 출현하는 모든 질의는 바로 검색가능하다. 예를 들어 "ㅇ", "ㅇㅈ", "진ㅎ" 등을 입력하면 위의 문서도 결과에 포함될 것이다. 다음은 질의가 이보다 길어질 경우의 예들이다.

검색어에 대한 색인에서는 세가지 형태의 색인에서 중복되어 출현하는 것이 발생할 수 있으므로 이를 색인결과에서 제거해야 한다. "ㅇㅈㅎ"의 경우 초성과 낱자가 동일하므로 초성색인과 음절색인은 완전히 동일한 색인결과가 나올 것이며, 복합색인의 경우에는 초성 또는 음절색인의 바이그램과 동일할 것이다.

질의처리기는 낱자를 포함하는 bigram이 있을 경우에는 해당 낱자를 질의에서 제거해야 한다. (예를 들어 질의가 "ㅊㅇㅅ"라면 이에 대한 색인은 1번 위치에 "ㅊ"과 "ㅊㅇ", 2번 위치에 "ㅇ"과 "ㅇㅅ", 3번 위치에 "ㅅ"으로 분석된다. 그런데 낱자(unigram)는 모두 bigram에 포함되어 있으므로 낱자는 검색에서 제거해도 된다. 다만 질의가 "ㅊ ㅇㅅ"일 경우에는 1에는 ㅊ, 2는 건너뛰고(공백), 3에 ㅇ과 ㅇㅅ, 4에 ㅅ이 출현한다. 이 경우 ㅇ과 ㅅ은 ㅇㅅ이라는 bigram에 포함되어 있으나 ㅊ은 포함되어 있지 않으므로 검색에 포함하여야 한다. "ㅊ ㅇㅅ"의 검색은 아마도 (ㅊ AND ㅇㅅ)으로 확장되어야 할 것이다.)

모바일 환경에서의 서비스 시나리오

고려사항

만약 KRISTAL에 이를 적용한다면 이 색인방식의 경우 바이그램을 기본적으로 포함하고 있기 때문에 use-bi-gram 옵션은 적용되지 않아야 한다. 색인이름은 INDEX_MOBILE이라고 할까?

문의나 조언은 메일로... | 저작권처음으로