KR100459832B1 - N-그램워드(n-gramword)분해원리를이용하여이식가능한문서를인덱싱하는시스템및방법 - Google Patents

N-그램워드(n-gramword)분해원리를이용하여이식가능한문서를인덱싱하는시스템및방법 Download PDF

Info

Publication number
KR100459832B1
KR100459832B1 KR1019960707052A KR19960707052A KR100459832B1 KR 100459832 B1 KR100459832 B1 KR 100459832B1 KR 1019960707052 A KR1019960707052 A KR 1019960707052A KR 19960707052 A KR19960707052 A KR 19960707052A KR 100459832 B1 KR100459832 B1 KR 100459832B1
Authority
KR
South Korea
Prior art keywords
page
gram
index
map
bank
Prior art date
Application number
KR1019960707052A
Other languages
English (en)
Inventor
비자야쿠마 랑가라잔
나타라잔 라비찬드란
Original Assignee
리버스 테크놀로지, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 리버스 테크놀로지, 인크. filed Critical 리버스 테크놀로지, 인크.
Priority to KR1019960707052A priority Critical patent/KR100459832B1/ko
Application granted granted Critical
Publication of KR100459832B1 publication Critical patent/KR100459832B1/ko

Links

Abstract

n-그램, 또는 선형 워드 서브유닛으로 된 문서 내의 워드의 분해를 사용하여 저장된 문서를 인덱싱 및 검색하기 위한 시스템 및 방법이 제공된다. 문서는 다수의 뱅크 내에 페이지로서 인덱스된다. 각각의 뱅크에 대해 뱅크 인덱스가 있다. 개개의 n-그램은 각 페이지에 대해 식별되고 뱅크 인덱스 내에 저장된다. 각각의 뱅크 인덱스는 소정의 n-그램이 뱅크의 어느 페이지에든지 존재하는가의 여부를 표시하는 엔트리 맵을 더 포함하여, 뱅크 내의 어떤 페이지가 n-그램을 포함한다는 것을 또한 표시하는 페이지 맵에 인덱스를 제공한다. 서치 조회가 입력될 때, 조회 워드는 그들의 n-그램으로 분해된다. 조회 워드 n-그램은 먼저 엔트리 맵과 비교되어, 조회 워드 n-그램이 뱅크 내의 임의의 페이지 상에 나타나는지를 결정한다. 그렇다면, 관련된 페이지 맵은 뱅크 내의 어떤 페이지가 조회 워드 n-그램을 포함하는지를 결정하기 위해 고찰된다. 페이지 상의 n-그램은 조회 워드 n-그램과 비교되어, 그 사이의 매치의 존재를 결정한다. 매칭 페이지는 플래그된다. 모든 뱅크 내의 모든 페이지가 처리될 때, 상기 페이지들은 그들이 속하는 문서에 대하여 통합되어, 서치 조회와 매치하는 문서의 리스트를 발생시킨다. 이 결과는 사용자에게 디스플레이된다.

Description

N-그램 워드(N-GRAM WORD) 분해 원리를 이용하여 이식가능한 문서를 인덱싱하는 시스템 및 방법
본 발명은 광학식 스캐너 및 광학식 문자 인식을 사용해서 문서를 처리하는 분야에 관한 것이며, 보다 구체적으로는 향후 서치 및 검색을 위해 문서 내의 워드(word)를 인덱스하는 시스템 및 방법에 관한 것이다.
인쇄된 또는 수기된 문서를 컴퓨터가 판독할 수 있는 형태로 포착해서 차후에 정보 검색 시스템을 사용하여 이들 문서를 서치 및 검색할 수 있게 해주는 광학식 문자 인식(OCR:Optical character recognition)이 널리 사용되고 있다. 풀 텍스트 검색 능력을 갖추고 있는 전형적인 정보 검색 시스템은, 그 시스템으로 입력된 문서 내의 중요한 모든 워드를 인덱스하고, 일반적으로 문서, 페이지, 및 몇가지 형태의 워드 오프셋(word offset), 혹은 다른 유사한 연결 형태에 의해서 인덱스 내의 각 워드에 대해 워드가 발생된 곳의 식별자의 리스트를 제공한다. 문서들은 서치 조회의 워드들을 인덱스에 실린 워드들과 정확히 매칭하고, 워드들에 인덱스된 문서들을 검색하는 방법에 의해서 입력된 서치 조회에 응답하여 검색을 받는다. 일반적으로 부울(Boolean) 서치 연산자가 복잡한 서치 조회를 할 수 있도록 제공된다.
따라서, 입력된 문서들을 정확히 검색하는데는 정확한 입력과 OCR 분석이 관건이다. 일반적으로, OCR 시스템은 문자(character), 폰트(font) 형태, 폰트 크기, 페이지 레이아웃, 이미지 분해능, 및 이미지 품질 간의 공간적 차이에 매우 민감하게 반응한다. 따라서, 정확도가 약 99 %에 달하는 상당히 정확한 OCR 시스템이라 하더라도 100개의 문자 중에서 하나의 문자를 잘못 해석하게 되어, 결국 레터(letter) 치환, 레터 손실, 혹은 유사한 스펠링 에러를 범하게 된다. 그 결과, 통상적인 OCR로 처리된 문서는 페이지마다 어딘가에 3 내지 8 혹은 그 이상의 잘못 스펠된 곳 혹은 에러가 있을 수 있다. 이것은 문서에 원래부터 존재했을지 모르는 타이핑 에러는 포함하고 있지는 않다. 다른 문제는 OCR 시스템이 개별 워드들을 결합시킨다는 점이다.
잘못 스펠된 워드들이 적절하게 인덱스되지 않기 때문에 적절히 스펠된 워드를 포함하는 서치 과정에서의 조회에 응답하는 동안 검색되지 않게 된다. 이와 유사하게, 조합된 워드열(string) 내의 개개의 워드들이 전혀 인덱스되지 않고 단지 전체 워드열의 일부로서 인덱스되므로 워드열 내의 임의의 개개의 워드를 포함하는 문서를 이러한 워드들을 특정하는 서치 조회에 응답하여 검색되지 않게 된다.
잘못된 스펠링에 대한 문제의 전형적인 해결 수단은 범하기 쉬운 잘못된 스펠링을 올바르게 스펠된 소스로 인덱스해주는 검색용 색인 장치(thesaurus) 혹은 유사한 장치에 달려있다. 이러한 접근 방법에 따른 하나의 문제점은 이것이 흔치않은 잘못 스펠된 워드를 고려하지 않고 있다는 점이다. 이러한 접근 방법은 또한 인덱스의 크기를 상당히 증가시키므로, 결국 이것이 정보 검색 시스템 설계의 또다른 양태로 발전될 수 있다는 점이다.
정보 검색 시스템에 있어서의 제2의 주요 현안은 인덱스를 생성하고 유지하는데 필요로 되는 성과 및 시간이다. 일반적으로, 변환된 인덱스는 이중 연결된 리스트(doubly linked list)와 같은 단일 모놀리식(monolith) 데이타 구조, 혹은 트리 구조로서 유지된다. 온 라인 데이타 베이스를 통해서 매일 새로운 문서가 시스템에 추가될 때마다, 전체 인덱스가 조정되어야 하고, 입력된 문서에 나타난 인덱스 내의 각 워드 엔트리는 입력된 문서에 관련된 데이타이어야 한다. 이것은 온라인 인덱싱이 대규모 시스템에는 부적합하게 되도록 하여, 인덱싱은 추가된 문서의 서치 속도를 제한하는 오프 라인으로 행해진다. 게다가, 인덱스가 상세하면 상세할 수록 인덱싱 처리에 더 많은 시간이 소모된다. 그러나, 상세한 인덱스는 서치 시간이 감소되는 특혜를 제공할 수 있다. 따라서, 인덱싱 시간과 서치 시간 간에는 교환 조건이 성립된다.
마지막으로, 정보 시스템에 대한 다른 관심사는 사용 중인 인덱스된 문서를 보조 혹은 클라이언트 시스템과 교환할 수 있는 능력이다. 현재, 많은 소프트웨어 응용 프로그램, 특히 데이타 베이스 및 정보 시스템은 클라이언트 서버 계통으로 되어 있다. 게다가 휴대용 컴퓨터의 수도 상당한 증가 추세를 보이고 있다. 이러한 요인들로 인해 인덱스된 문서가 재인덱싱을 위해 실질적인 오버헤드(overhead)없이 서치를 위해 시스템으로부터 효율적으로 추가 혹은 삭제될 수 있는 인덱싱 시스템을 제공하는 것이 바람직하다. 종래의 정보 검색 시스템은 인덱스가 메가바이트, 혹은 기가바이트 정도일 수 있으므로, 이식이 불가능한 모놀리식 인버트형 인덱스를 사용하고, 수만(tens of thousands) 페이지의 문서를 인덱스한다. 이러한 크기 혹은 복잡성이 있는 인덱스는 원격 클라이언트, 휴대용 컴퓨터 장치, 혹은 이식가능한 저장 매체로 편리하게 전달될 수 없다.
따라서, OCR 분석 방법이든 그 밖의 다른 방법에 의해서든 입력된 문서 내의 에러를 보상하고, 잘못된 스펠링 혹은 다른 타이핑 에러를 포함하는 문서의 고속 인덱싱 및 정확한 검색을 할 수 있는 인덱싱 시스템을 제공하는 것이 바람직하다.
또한, 서치 시간을 지나치게 증가시키지 않고 고속으로 인덱싱할 수 있고 인덱스된 문서의 이식성을 지원해주는 시스템을 제공하는 것이 바람직하다.
본 발명의 개선된 인덱싱 및 검색 방법, 및 시스템은 각 워드를 다수의 "n-그램(n-grams)" 혹은 워드 서브유닛(word subunit)으로 분해함으로써 기존의 정보 검색 시스템의 한계점을 극복한 것이다. n-그램은 n개의 문자(character)들이 소정의 워드(word)로, 특히 "cho", "thi", "ment"와 같은 레터(letter) 혹은 다수의 수로 나타날 때, n개의 문자를 순서 매겨서 선형적으로 조합시킨 것이다. 일반적으로, n-그램은 n-그램이 갖고 있는 문자의 수인 n-그램 파라미터 Np를 갖는다. 3개 문자로 된 n-그램 파라미터 Np를 갖는 n-그램을 간편하게 "트리그램(trigram)"이라 부른다. 예를 들면, 워드 "houseboat"는 "hou", "ous", "use", "seb", "ebo", "boa", "oat"의 트리그램들로 구성되어 있다. 워드 속에서 나타나는 레터의 순서 및 관계가 중요하기 때문에, "tbh" 혹은 "hbt"는 상기 워드, "houseboat" 속에 존재하는 자구이기는 하지만, "houseboat"의 트리그램으로서 간주되지 않음을 유의해야 한다.
본 발명에서는 문서의 각 페이지 상의 비 정지 워드(non-stop words)가 인덱스되어 기억되는 그들의 n-그램으로 분해된다. 완전한 워드보다는 워드를 n-그램씩 인덱싱함으로써, 잘못된 스펠링, 부분적 워드, 혹은 워드열에 끼워 넣어진 워드들이 전체 워드들 간의 매치(match)보다는 문서 내에서의 조회 워드의 n-그램과 n-그램 간의 매치를 서치함으로써 식별될 수 있다. 예를 들어, 워드 "factory"가 문서 내에서 "factori"로 잘못 표기되었다고 가정하자. 이의 n-그램들은 "fac", "act", "cto", 및 "ori"로서 기억된다. 이들은 올바르게 표기된 "factory"의 서치 조회 워드의 n-그램, "fac", "act", "tor", "ory"와 비교된다. 이들 5개의 n-그램 중 4개는 일치하고 문서는 검색되게 된다. 유사하게, 첫번째 레터가 OCR 분석 문제로 인해 삭제되었다고 해도, n-그램들은 여전히 "act", "cto", "tor" 및 "ory"로 되어 있다. 이 때, 5개의 n-그램 중 4개가 여전히 일치하므로, 워드가 검색되게 된다. 명백히, 조합된 워드열 내에서 워드들에 대한 n-그램이 유사하게 식별되거나 분리적으로 매칭(matching)될 수 있다.
따라서, 문서를 서칭하고 검색하기 위해, 서치 조회(search query)가 입력되고 서치 조회내의 워드가 유사하게 그들의 n-그램으로 분해된다. 이어서, 조회 워드 n-그램은 다수의 문서의 페이지상의 워드들에 대한 n-그램과 비교된다. 임의의 조회 워드 n-그램이 페이지 상에서 임의의 워드의 n-그램과 일치하면, 페이지가 검색되고, 조회 워드 n-그램은 각 워드의 n-그램과 더 비교된다. 이것은 페이지 상에서 조회 워드와 워드들 간의 매칭의 정도를 결정할 수 있게 한다. 페이지를 포함하는 문서가 검색되어 사용자에게 표시될 수 있다. 부울 서칭(Boolean searching)은 조회 워드와 문서 워드들 간의 매칭의 결정이 이루어지면 행해질 수 있다.
상술한 것은 n-그램 분해 및 인덱싱 처리의 기본적 개념을 설명한 것이다. 워드 혹은 문서를 분석하는데 n-그램을 사용하는 많은 다른 시스템이 고안될 수 있다. 그러나, 높은 정확성을 갖고 효과적인 인덱싱 및 고속 서칭을 제공하고 인덱싱 및 문서의 이식가능성을 더 제공하는 시스템에서 n-그램 분해를 사용하는 것이 바람직하다. 따라서, 본 발명의 차별적이면서 추가의 특징은 다수의 드로워(drawer)로 문서를 표시하는 데이타를 기억하는 분류 체계적 인덱싱 방법을 사용하는 것이며, 여기서 각 드로워는 텍스트의 페이지로 이루어진 문서 및 이미지 데이타를 포함한다. 페이지들은 드로워의 다수의 뱅크에 리스트되어 있다. n-그램 분해 및 인덱싱은 전체 문서에 대하여 행해지기 보다는 개별 페이지들에 대하여 행해진다.
각 드로워는 다수의 뱅크를 포함한다. 각 뱅크에는 뱅크 인덱스가 있다. 뱅크 인덱스는 관련된 뱅크 내에서 각 페이지 상에서 실제로 나타나는 n-그램을 나타내는 데이타를 저장한다. 뱅크 인덱스에는 소정 크기의 일정한 n-그램의 수가 알려져 있으므로, 각 뱅크 인덱스는 각각의 가능한 n-그램에 대하여 뱅크에 리스트된 임의의 페이지 상에 임의의 n-그램의 일례가 있는지의 여부를 표시하는 엔트리 맵을 포함한다. 각 n-그램에 대하여 뱅크의 임의의 페이지 상에 예가 있으면, 엔트리 맵은 n-그램을 포함하는 뱅크 내의 각 페이지를 특정하게 식별하는 추가의 페이지 맵에 대한 액세스를 제공한다. 이런 형태의 저장 구조로 인덱싱 및 검색 동안 메모리를 매우 집약적이고 효율적으로 사용할 수 있다.
뱅크 및 뱅크 인덱스는 고속 검색 시스템을 제공한다. 조회가 입력되었을 때, 조회 워드의 n-그램이 결정된다. 조회 워드 내의 각 n-그램은 뱅크의 임의의 페이지에 임의의 n-그램의 실예가 있는지를 결정하기 위해 엔트리 맵과 먼저 대비된다. 엔트리 맵이 일부 페이지가 n-그램을 포함하고 있음을 표시하면, 페이지 맵이 특별히 어떤 페이지가 더 처리될 필요가 있는지를 결정하도록 검사를 받는다. 이러한 초기의 전처리에서는 소정의 조회 워드를 더 서칭할 필요가 있는 페이지들만을 대상으로 매우 신속하게 이루어지며, 조회 워드의 임의의 n-그램을 포함하지 않는 페이지들은 고려 대상에서 제외된다.
제2 처리 단계는 뱅크 내에서 조회 부분을 포함하는 페이지만을 대상으로 액세스한다. 이러한 각 페이지에 대하여, 뱅크 인덱스에 기억된 페이지 상의 n-그램이 조회 워드의 n-그램과 비교된다. 이들 중 충분한 퍼센테이지가 조회 워드의 n-그램과 일치하면, 그 페이지와 관련된 문서가 검색을 위해 표시된다.
이러한 문서 및 인덱싱의 조직은 그의 드로워, 문서, 뱅크, 및 뱅크 인덱스를 포함하는 전체 드로워가, 문서가 인덱스되었던 컴퓨터 시스템으로부터 다른 컴퓨터 시스템으로 전달될 수 있어, 드로워에 있는 문서를 재인덱스할 필요없이 거기서 서치될 수 있으므로 문서의 이식가능성을 제공한다.
도 1은 n-그램 분해 방법을 사용한 문서의 인덱싱 및 검색 시스템의 블럭도 이다.
도 2a는 드로워, 폴더(folder), 문서, 뱅크, 뱅크 리스트, 뱅크 인덱스, 프리 리스트(free list), 및 문서 리스트의 결합 관계를 나타내는 시스템의 저장 소자의 대상 모델이다.
도 2b는 이들 저장 소자에대한 사용자와의 상관 관계를 도시한 도면이다.
도 3은 문서 리스트의 구조를 나타내는 도면이다.
도 4는 뱅크 구조를 나타내는 도면이다.
도 5는 뱅크 인덱스의 구조를 나타내는 도면이다.
도 6은 뱅크와 뱅크 인덱스 간의 관계의 일례를 나타내는 도면이다.
도 7은 문서를 인덱싱하고 서칭하는 전반적인 방법의 흐름도이다.
도 8은 문서의 인덱싱 처리 방법을 나타내는 흐름도이다.
도 9는 문서 내의 페이지를 인덱싱하는 처리의 흐름도이다.
도 10은 뱅크 인덱스 내의 저장을 위해 페이지 내에서 워드키를 생성하는 처리의 흐름도이다.
도 11은 서칭 처리의 흐름도이다.
도 12는 뱅크 상에서의 전처리 작업의 흐름도이다.
도 13은 전처리에 후속하여 뱅크의 선택된 페이지를 서칭하는 처리의 흐름도 이다.
도 14는 페이지 상에서의 조회 워드의 n-그램을 워드의 n-그램과 매칭시키는 처리의 흐름도이다.
시스템 아키텍쳐
이제부터 도 1을 참조하여 설명하면, 도 1에는 본 발명의 개선된 문서 인덱싱 및 검색 시스템을 사용하는 시스템이 도시되어 있다. 이 시스템(100)은 스캔된 문서를 장기간 저장하기 위한 2차 저장부(107), 코맨드 및 데이타를 수신 및 출력하기 위한 입력 장치(109) 및 출력 장치(116), 프로세서(111)가 실행할 수 있도록 다양한 코드 모듈을 저장하는 어드레스가능 메모리(113)를 가진 컴퓨터(101)를 포함한다.
입력 장치(109)는 입력된 문서를 스캐닝할 수 있으며 입력된 문서에 대한 계조, 복조(bitonal), 혹은 컬러 비트 맵 화일을 생성하는 스캐너(115)를 포함한다. 스캐너(115)는 적어도 200 dpi 분해능을 갖는 것이 바람직하다. 또한 입력 장치(109)는 코맨드 및 데이타를 입력하기 위한 키보드(149)를 포함한다. 출력 장치(116)는 스캔된 문서, 혹은 시스템(100) 내에 상주하는 다른 문서를 포함하는 문서를 프린팅하기 위한 프린터(117)를 포함한다. 출력 장치(116)는 또한 서치 결과 및 다른 정보와 함께, 시스템에 대한 사용자 인터페이스를 사용자에게 표시하기 위한 디스플레이(151)를 포함한다.
어드레스가능 메모리(113)는 본 발명의 시스템(100)을 관리하는 실행가능한 응용 프로그램을 함께 포함하는 다수의 코드 모듈을 포함한다. 보다 구체적으로, 어드레스가능 메모리(113)는 응용 실행부(119), 인덱스 실행부(121), 서치 실행부(123), 문서 참조 모듈(125), 페이지 인덱싱 모듈(127), 서치 실행 모듈(129), 서치 리스트 모듈(131), 및 광학식 문자 인식 모듈(133)을 포함한다. 이들 다수의 모듈의 동작 관계는 이식가능한 문서 인덱싱을 지원하는 저장 소자에 대한 설명 이후에 설명될 것이다. 인덱스/서치 버퍼(143)는 인덱싱 및 서칭 단계동안 발생된 데이타를 일시적으로 저장하는데 사용된다. 페이지 버퍼(145)는 서칭동안 문서로부터의 데이타를 일시적으로 저장하는데 사용된다. 정지 워드 화일(135)은 인덱싱으로부터 배제된 워드의 리스트를 관리한다. 정지 워드 화일(135)은 시스템(100)을 제공받으며 사용자에 의해 변경될 수 있다.
시스템(100)은 적절한 사용자 인터페이스를 디스플레이(151) 상에 제공하는 응용 실행부(119)를 통해 액세스되며, 사용자로 하여금 스캐너(115), 혹은 다른 소스를 통하여, 기존의 텍스트 화일, 이미지 화일, 그래픽 화일 등과 같은 문서를 시스템(100) 내로 입력하게 하고, 워드, 범용 문자, 및 부울 대수 혹은 SQL 연산자의 조합을 포함하는 서치 조회(search query)를 입력하게 하며, 서치 조회의 결과를 디스플레이(115) 혹은 프린터(117) 등의 출력 장치에서 재검토해볼 수 있게 한다.
어드레스가능 메모리(113)는 본 발명의 n-그램 분해 인덱싱을 구현하는데 유리한 저장 구조의 데이타 베이스(141)를 더 포함한다. 이제부터 도 2a를 참조하여 설명하면, 도 2a에는 어드레스가능 메모리(113)에 이러한 저장 구조의 대상 모델이 도시되어 있다. 도 2b는 이들 저장 구조를 사용자와의 상관 관계로 나타내고 있다.
어드레스가능 메모리(113)는 하나 또는 그 이상의 드로워(drawer)(201)를 포함한다. 각 드로워(201)는 드로워명, 논리명, 및 이동가능한지 혹은 고정된 매체인지에 관한 매체 형태를 갖고 있다. 이 최종 속성은 드로워(201)가 이식가능한 저장 매체 상의 다양한 컴퓨팅 장치로 전달되게 한다.
각 드로워(201)는 제로(0) 혹은 그 이상의 폴더(203)의 계층 분류적 리스트를 포함한다. 각 폴더(203)는 폴더명을 가지며 0 또는 그 이상의 문서(205) 혹은 다른 폴더(203)를 포함한다.
각 문서(205)는 사용자가 인식할 수 있는 문서명, 및 시스템(100)에서 사용되는 고유한 문서 번호를 갖는 것이 좋다. 문서(205)는 적어도 텍스트 화일(207)로 구성된다. 게다가, 문서(205)는 이미지 화일(209), 아이콘 화일(213), 및 문서 화일 구조(DFS) 화일(211)을 포함할 수 있다. 텍스트 화일(207)은 ASCII 혹은 유사한 포맷으로 된 문서의 텍스트 데이타를 포함한다. 텍스트 데이타는 일반적으로 이미지 데이타에 대한 OCR 처리로부터 생성되게 된다. 텍스트 데이타는 사용자의 입력으로부터 직접적으로 생성될 수 있다. 또, 텍스트 데이타는 예를 들면 문서(205)가 비트 매핑된 혹은 벡터 그래픽 화일되는 경우에 입력될 수 있고, 사용자는 인덱싱을 위해 화일의 코맨트 혹은 설명을 포함하기를 바란다. 텍스트 화일(207)은 하나 혹은 그 이상의 페이지(215)에 그의 데이타를 포함한다. 각 페이지는 그의 페이지 번호, 문서명, 폴더명, 및 드로워명에 의해 식별된다.
이미지 화일(209)은 대응하는 입력된 문서의 스캐닝 및 디지탈화, 혹은 다른 유사한 처리로부터의 결과에 의한 복조성(bitonal), 계조, 혹은 컬러 비트맵이 있다. 이미지 화일(209)의 데이타는 페이지(215)에 유사하게 저장된다.
DFS 화일(211)은 텍스트 화일 데이타를 이미지 화일 데이타로 매핑한다. DFS 화일(211)은 텍스트 화일(207)의 텍스트의 모든 라인에 대하여 이미지 페이지(215)에 대한 맵핑, 및 이미지 페이지(215)에서 텍스트의 라인이 나타나는 곳의 픽셀 좌표(바람직하게는 상부 좌측 및 하부 우측 코너 부분)로 정의된 한정된 장방형을 포함한다. 이러한 맵핑으로 인해 사용자는 페이지의 이미지를 검토할 때 페이지 상의 텍스트 데이타를 액세스할 수 있게 된다. DFS 화일(211)은 또한 문서(205) 내의 텍스트 및 이미지 페이지의 수에 대한 페이지 카운트를 바람직하게 유지한다. 또한 DFS 화일(211)은 문서(205)에서의 각 페이지(215)에 대하여 페이지 번호, 문서 번호 및 문서명, 완전한 경로명, 및 아이콘 화일명을 포함하는 참조 데이타를 관리한다.
아이콘 화일(213)은 문서(205)의 각 페이지의 약술된 비트 맵(thumbnail bitmapped) 이미지를 포함한다. 약술된 이미지는 서치 및 검색 동작동안 혹은 문서(205)가 사용자에 의해 액세스되는 동안 사용자에게 표시된다. 바람직한 실시예에서는, 문서가 단지 발생된 텍스트 데이타만을 포함하고 있는 경우에, 스캐닝등을 하지 않고 이미지 화일(209)이나 아이콘 화일(213)이 수반되지 않는다.
각 드로워(201)는 문서 리스트(225)와 관련되어 있다. 문서 리스트는 드로워(201) 내의 모든 문서(205)의 인덱스이다. 도 3은 문서 리스트(225)의 구조를 나타낸다. 문서 리스트(225)는 엔트리의 변수(311)를 최대 한계 Dmax까지 저장한다. 바람직한 실시예에서 Dmax는 드로워(201)의 모든 문서에 있는 전체 페이지의 수만큼 제한되며, 각 드로워(201)는 1,044,480 페이지까지 처리할 수 있다. 각 엔트리(311)는 드로워(201)의 각 문서(205)의 풀 경로명을 포함한다. 각 문서(205)는 문서 리스트(225)의 오프셋의 결과로서 문서 리스트(225) 내의 고유한 문서 번호(301)를 갖는다. 상태값(303)은 각 엔트리(311)에 대하여 문서의 저장이 가능한지의 여부를 표시하도록 바람직하게 유지된다. 문서 리스트(225)는 기존의 문서가 제거되었을 때 발생되는, 문서 엔트리(311)의 수(307)의 카운트, 및 미사용된 엔트리 수(309)의 카운트를 관리한다.
시스템(100)은 적어도 하나 이상의 뱅크(217)를 포함한다. 도 4는 뱅크(217)의 구조를 나타내는 도면이다. 각 뱅크(217)는 시스템(100) 내의 다수의 문서의 페이지의 리스트를 엔트리(413)의 소정의 수 Pmax까지 포함한다. 바람직한 실시예에서, 뱅크(217)는 255 엔트리 혹은 페이지 참조까지를 포함한다. 다른 실시 형태에서, Pmax는 클 수 있는데, 이 때에는 보다 많은 페이지가 인덱싱되고, Pmax가 작으면 소수의 페이지만이 인덱스가 가능하여 저장 용량도 적게 된다. 문서 페이지는 드로워(201)에 대한 문서 리스트(225)로부터 그들의 문서 번호(301)로 리스트된 후에 문서(205) 내의 페이지 번호(403)에 의해 리스트된다. 각 엔트리(413)에 대하여 상태 값(405)은 바람직하게는 페이지가 엔트리에서 조회되었는지를 표시하면서 유지된다. 각 엔트리(413)는 뱅크(217) 내의 엔트리(413)의 오프셋인 관련된 뱅크 오프셋(411)를 더 가지며, 뱅크 오프셋(411)은 실질적으로 엔트리(413)에 저장되지 않는다. 각 뱅크(217)는 바람직하게는 새로운 페이지가 참조될 때 갱신되는 다수의 미사용된 엔트리(407)를 유지하고 나머지는 뱅크(217)에서 참조되지 않는다. 바람직한 실시예에서, 드로워(201)는 4096 뱅크(217)를 포함하므로 각 드로워(201)에 대하여 인덱스된 데이타의 1,044,480 페이지까지 포함한다. 각 뱅크(217)는 드로워(201) 및 뱅크 리스트(219)에서 이것을 고유하게 식별하는 뱅크 번호(409)를 가지며, 뱅크 번호(409)는 뱅크(217) 자체에 저장되거나 또는 뱅크(217)의 화일명에 의해 식별될 수 있다. 이와 함께 뱅크 번호(409) 및 뱅크 오프셋(411)은 페이지에 대한 뱅크 참조를 형성한다.
각 뱅크(217)는 뱅크 인덱스(223) 및 프리(free) 리스트(221)와 관련되어 있다. 각 뱅크 인덱스(223)는 뱅크(217) 내의 각 페이지 엔트리(413)에서 발견된 n-그램을 식별한다. 이제 도 5를 참조하면, 도 5는 뱅크 인덱스(223)의 바람직한 구조를 도시한다. 바람직한 실시예에서 뱅크 인덱스(223)는 데이타처럼 모든 n-그램의 리스트를 직접적으로 포함하지 않는다. 오히려, 각 n-그램은 고유한 번호로 할당되어 n-그램 엔트리 맵(505)의 일정한 번호를 인덱스하도록 사용된다.
먼저, 인덱싱을 위해 시스템(100)에 의해 인덱스가능한 문자 세트와 문자 범위가 선택된다. 인덱스가능한 문자의 총수를 Cmax라 한다. 그러면 n-그램의 총수 L은
L = [Cmax]Np
가 된다.
바람직한 실시예에서, 인덱스가능한 문자는 "A"-"Z", "0"-"9"이다. 일반적으로 데이타를 서치하는데 사용되지 않는 모든 구두점 및 특별한 문자는 "∼"와 같은 단일 문자로 맵되어 있다. 이 때문에 "AT&T"와 같은 워드의 인덱싱을 "AT∼T"로 할 수 있고, "3.1415926"과 같은 숫자를 "3∼1415926"과 같이 할 수 있다. 게다가, 워드의 최종의 여러개의 문자가 자체만으로는 n-그램의 수로 불충분한 경우, "∼"는 n-그램을 완료하는데 사용될 수 있다. 예를 들면 "at"의 트리그램은 "at∼"가 될 것이다. 국제적인 문자는 대응하는 영어의 등가물로 매핑될 수 있다. 소문자(lowercase charater)는 그들의 대문자로 변환된다. 이로써 바람직한 실시예에서는 n-그램의 각 위치에 37개의 다른 문자가 있을 수 있다. 따라서 바람직한 실시예에서는 50,563 (373) 트리그램이 된다. 37개의 문자는 그들의 ASCII값, 혹은 다른 수단들에 의한 임의의 유용한 방법으로 순서가 정해진다. 그러면, 가능한 n-그램이 리스트되고, n-그램 번호로 일렬로 번호가 매겨진다. 예를들면, 숫자가 먼저, 문자, 그리고 "∼"이라고 한다면, 순서는 "000", "001", …, "00A", …, "00Z", "00∼", …, "∼∼∼"이 된다. 바람직한 실시예에서, n-그램수는 다음과 같이 계산될 수 있다.
n-그램수 = (제1의 n-그램 레터 번호)* 최대_문자N-1 +
(제2의 n-그램 레터 번호)* 최대_문자N-2 +
(제3의 n-그램 레터 번호)* 최대_문자N-3 +
···
(N-1th n-그램 레터 번호)* 최대_문자 +
(Nth n-그램 레터 번호)
여기서, n-그램 레터(letter) 번호가 n-그램에서 나타날 때처럼 레터의 순서정해진 번호일 때, N은 n-그램 파라미터 Np이고, 최대_문자는 Cmax와 같다. 바람직한 실시예에서 Cmax는 37이고, n-그램 파라미터 Np는 3이므로, 이 식은
트리그램수 = (제1 트리그램 레터 번호)* 372 +
(제2 트리그램 레터 번호)* 37 +
(제3 트리그램 레터 번호)
다른 실시예에서, 룩업(lookup) 테이블(227)은 n-그램을 저장하며, 이 테이블 내의 소정의 n-그램의 오프셋은 그의 n-그램수이다.
각 뱅크 인덱스(223)는 사용되고 있는 n-그램의 총수 L과 숫자에 있어서 동일한 n-그램 엔트리 맵(505)의 고정된 수를 포함한다. 각 n-그램 엔트리 맵(505)은, 인덱스 페이지 맵(507)이 n-그램 엔트리(505)와 관련된 n-그램에 대해서 할당되었던 경우에는 인덱스 페이지 맵(407)에 대한 인덱스값을 유지한다. 각 인덱스값 단위는 인덱스 페이지 맵(407) 내의 엘리먼트의 총수를 나타낸다. 인덱스 오프셋(501)은 제 1 인덱스 페이지 맵(407)의 어드레스를 기억한다. n-그램 엔트리 맵(505)에서의 (인덱스값-1)은 인덱스 오프셋(501)에 가산되어 n-그램 엔트리 맵(505)과 관련된 인덱스 페이지 맵(507)에 도달한다. 많은 n-그램이 뱅크(217) 내의 임의의 페이지 엔트리(413)에 나타나지 않음에 따라, n-그램 엔트리 맵(505)은 시스템(100)이 그 n-그램이 페이지 내에 실례로서 들어있는지를 신속히 결정하여 서칭동안 실제 인덱스 페이지 맵(507)이 더 분석되게 한다.
인덱스값이 0이 아닌 각 n-그램 엔트리 맵(505)에 대해서는 인덱스 페이지 맵(507)이 있다. 각 인덱스 페이지 맵(507)은 뱅크(217) 내의 어떤 페이지(403)가 n-그램을 포함하고 있는지를 나타내는 데이타를 포함한다. 인덱스 페이지 맵(507)은 뱅크(217) 내의 각 가능한 페이지 엔트리(413)에 대하여 하나의 비트를 포함한다. 바람직한 실시예에서, 각 맵(507)에서의 비트의 수는 뱅크(217) 내의 엔트리의 최대 수 Pmax에 대응한다. 인덱스 페이지 맵(507)에서의 비트 위치는 뱅크(217) 내의 페이지 엔트리(413)의 뱅크 오프셋(411)에 대응한다. 이 비트는 페이지 엔트리(413)는 인덱스 페이지 맵(507)과 관련된 n-그램을 포함하고 있으면 설정되고, 그렇지 않으면 설정되지 않는다. 뱅크(217)에 255개의 페이지 엔트리(413)를 가진 바람직한 실시예에서, 각 인덱스 페이지 맵(407)은 n-그램을 페이지 엔트리(413)로 매핑하기 위하여 32 바이트(256 비트)를 포함한다. 다른 실시예에서, 포인터의 리스트와 같은 다른 형태의 매핑이 사용될 수 있다. 인덱스 페이지 맵(507)의 갱신에 대해서 이하에서 더 설명한다.
도 6은 뱅크(217)와 뱅크 인덱스(223) 간의 인덱싱 관계의 일례이다. 도 6에는 엔트리 총수 Pb를 갖고서, 다양한 페이지 엔트리(413a-f)를 내포한 뱅크(217)의 일부가 도시되어 있다. 엔트리들 중에서 몇개는 그들의 상태값(405)에서 "사용됨(used)"이라고 표시되어 있고, 그와 같은 각각의 엔트리(413)는 문서 리스트(225)(도시 안됨) 내의 어느 문서에 속하는지를 나타내는 문서 번호(303)와 그 문서 내의 어느 페이지인지를 나타내는 페이지 번호(403)를 포함한다. 엔트리들(413)은 많은 여러가지 문서로부터 생기고, 또 엔트리(413b, c)와 같은 동일 문서로부터의 짝수 엔트리들은 단지 그 문서의 선택된 페이지임에 유의한다. 각 엔트리(413)에 대한 뱅크 오프셋(411)이 표시된다.
뱅크 인덱스(223)는 n-그램 엔트리 맵(505a-f)의 완전한 리스팅의 일부를 포함한다. 이들 n-그램 엔트리 맵(505a-f) 각각은, 만일 n-그램 엔트리 맵에 관련된 n-그램에 대해서 할당된 인덱스 페이지 맵이 있다면, 어느 인덱스 페이지 맵(507a-f)이 할당되어 있는지를 나타내는 인덱스값(601)을 포함한다. 따라서, 제1(도시되어 있는 것처럼 이것은 뱅크 인덱스(223)에서 n번째 것이 될 수 있음) n-그램 엔트리 맵(505a)은 0과 동일한 인덱스값(601)을 가지며, 이것은 맵에 관련된 n-그램이 뱅크(217) 내의 어떤 페이지에도 나타나지 않고 따라서 n-그램 엔트리 맵(505)에 대해서 어떠한 페이지 맵(507)도 할당되지 않음을 나타낸다. 제3 n-그램 엔트리 맵(505c)에 대해서도 마찬가지이다.
그러나, 제2 n-그램 엔트리 맵(505b)은 인덱스값 2를 갖고 있는데, 이것은 제 2 인덱스 페이지 맵(507b)에 인덱스한 것이다. 따라서, n-그램이 무엇이 되든 간에 n-그램 엔트리 맵(505b)에 관련된 n-그램의 일례를 갖는 뱅크(217) 내에는 적어도 하나 이상의 페이지가 있다. 유사하게, 제4 n-그램 엔트리 맵(505d)은 제4 인덱스 페이지 맵(507d)에 인덱스되고, n-그램 엔트리 맵(505e)은 제3 인덱스 페이지 맵(507c)에 인덱스되고, n-그램 엔트리 맵(505f)는 제1 인덱스 페이지 맵(507a)에 인덱스된다.
인덱스 페이지 맵(507) 각각은 뱅크(217) 내의 엔트리(413)에 매핑되는 비트 세트를 포함한다. 인덱스 페이지 맵(507) 내의 m번째 비트값은 그 인덱스 페이지 맵(507)에 대해서 n-그램 엔트리 맵(505)에 관련된 n-그램이 m번째 엔트리(413)로 표현된 페이지 상에 나타나는지 여부를 나타낸다. 각 인덱스 엔트리 맵(507) 내의 제1 비트는 제1 엔트리(413a)에, 제2 비트는 제2 엔트리(413b)에, 등등으로 배치된다.
예컨대, 박스(603)에서는 뱅크(217)에서 제4 엔트리(413d)에 대한 맵핑이 도시되어 있다. 제1 및 제2 인덱스 페이지 맵(505a, b) 모두에서는 엔트리(413d)에 해당하는 비트가 설정되지 않는다. 이것은 n-그램 엔트리 맵(505b, 505f)에 관련된 n-그램이 문서 번호 711의 페이지 87에 나타나지 않는다는 것을 나타낸다. 그러나, 인덱스 페이지 맵(507c, d)에서의 비트는 설정되어 n-그램 엔트리 맵(505d, e)에 관련된 n-그램이 그 페이지에 나타난다. 유사하게, 인덱스 페이지 맵(507b)의 (Pmax)번째 비트는 이 맵에 관련된 n-그램이 문서 번호 818의 페이지 93에 나타남을 표시한다.
다시, 도 5를 참조로 설명하면, 뱅크 인덱스(223)는 뱅크(217) 내의 페이지 엔트리(413)에 의해 식별되는 페이지에 나타나는 n-그램을 표현하는 데이타를 더 저장한다. 이것은 입력 조회에 부합하는 서류의 위치를 정하도록 실제 탐색이 수행되는 뱅크 인덱스(223) 영역이다. 이 데이타는 각 페이지 엔트리(413)에 대해서 하나씩, 페이지 키(509)의 가변 길이 테이블(517)에 저장된다. 페이지 키(509)는 다음 형태의 가변 길이 필드이다.
[ki, n-그램 i1, n-그램 i2, …, n-그램 ik]
[k(i+1), n-그램 (i+1)1, n-그램 (i+1)2, …, n-그램 (i+1)k]
여기서, ki는 그 페이지 상의 i번째 워드에서의 n-그램 번호이고, n-그램 i(1…k)는 i번째 워드에서의 n-그램 번호 리스트이다. 각 그룹의 값 [k][n-그램 1, n-그램 2, …, n-그램 k]은 "워드 키"로 불리운다. 페이지 상의 모든 워드에 대한 워드 키 세트는 페이지 키(509)이다. 바람직한 실시예에서는 n-그램 그 자체가 저장되지 않고, 각각의 n-그램을 고유하게 식별하는 n-그램 번호가 페이지 키(509)에 저장된다는 점을 유의한다. n-그램 그 자체가 아닌 n-그램 번호를 이용함으로써 메모리가 절약된다. n-그램 각각은 각 문자에 대해서 1 바이트를 필요로 하므로, 트리그램(trigram)은 3 바이트이다. 그러나 n-그램 번호 각각은 단지 log2([Cmax]Np) 비트만을 필요로 한다. 따라서 트리그램은 15.6 비트, 즉 2 바이트를 필요로 한다.
한 페이지에 대해서 최대 텍스트 데이타 크기가 32 k라고 가정하면, 바람직한 실시예에서의 페이지 키(509)의 최대 크기는 단지 128 k이다. 실제로는 각 페이지의 평균 크기는 약 2 k이고, 따라서 각 페이지 키(509)는 약 8 k이다.
개별적인 페이지 키(509)에 액세스하기 위하여 고정 크기 페이지 오프셋 테이블(515)이 제공된다. 이 테이블 내의 엔트리 각각은 페이지 키(509) 각각에 대해서 페이지 키 오프셋(511)과 페이지 키 크기(513)를 포함한다. 바람직한 실시예에서는, 뱅크(217) 내의 페이지 엔트리(413) 각각에 대해서 하나의 엔트리가 있다. 페이지 키 오프셋(511)은 테이블 엔트리에 대응하는 가변 길이 페이지 키(509)의 시작에 대한 오프셋이다. 페이지 키 크기(513)는, n-그램 및 k값들에 대한 모든 엔트리를 포함하며, 대응하는 페이지 키(509)의 총 바이트수이다. 페이지 키 크기(513)를 유지함으로써 시스템(100)은 그 시스템으로부터 인덱스된 페이지를 삭제할 수 있고 또 새로운 페이지를 추가 및 인덱스하기 위해 이용가능한 영역에 관한 정보를 가질 수가 있어 저장 공간의 낭비를 막을 수가 있다.
프리 리스트(221)는 각 뱅크(217)에 관련되어 있으며, 이미 인덱스된 페이지 엔트리(413)가 어디서 삭제되었는지를 포함하여 뱅크(217) 내의 어느 페이지 엔트리(413)가 인덱싱을 위해 이용 가능한지에 대한 정보를 저장한다. 페이지 엔트리(413)가 뱅크(217)로부터 삭제되면, 페이지 키 오프셋(511), 및 뱅크 인덱스(223) 내의 페이지 키 크기(513)는 프리 리스트(221)에 저장되고, 그 다음에 페이지 키 오프셋(511)은 뱅크 인덱스(223)에서 0으로 설정된다.
뱅크 리스트(219)는 드로워(201) 내의 뱅크(217) 모두에 대한 데이타를 포함한다. 뱅크 리스트(219)는 각 뱅크(217)에 대해서 뱅크(217) 내의 프리 엔트리(413) 수의 카운트를 유지한다. 이 값들은 새로운 페이지가 뱅크(217)에 추가되거나 기존의 페이지가 삭제됨에 따라 갱신된다. 바람직한 실시예에서, 뱅크 리스트(219)는 그들의 뱅크 번호에 따라서 4096 뱅크(217)까지에 대한 프리 엔트리 카운트를 포함한다. 테이블 1은 뱅크 리스트(219) 구조를 나타낸다.
테이블 1
다시, DFS 파일(211)을 참조로 설명하면, 바람직한 실시예에서는 이 파일은, 이에 관련된 문서(205)의 각 페이지(215)에 대해서, 뱅크 리스트(219) 내에서 순서가 정해진대로의 페이지(215)를 포함하는 뱅크(217)의 뱅크 번호, 뱅크(217) 내의 뱅크 오프셋(411), 문서의 페이지 번호(403), 및 문서 리스트(225) 내의 문서 번호(301)를 포함한다.
시스템 동작
I. 전체 처리 흐름
시스템(100)은 정보 저장 및 검색 시스템에서 문서를 인덱싱 및 서치하는 개선된 방법을 제공한다. 본 방법은 2가지 기본 처리; 즉 문서 인덱싱, 및 서치 조회를 이용하여 문서를 서칭하는 것을 포함한다.
이제, 도 7을 참조로 설명하면, 본 발명의 전체 방법의 흐름도가 도시되어 있다. 문서, 또는 문서의 세트는 시스템(100)으로 입력(701)된다. 프린트된 문서나 이미지를 위해서, 종래 방식으로 스캐너를 이용하여 문서를 스캐닝한 다음에 OCR 모듈(133)로 처리하여 텍스트 파일(207)의 텍스트 데이타를 생성할 수 있다. 또는 이미지 파일(209)를 가진 문서가 팩시밀리 이미지와 같은 다른 시스템으로부터 입력되어 OCR 모듈(133)에 의해 처리될 수 있다. 대안으로서, 문서는 텍스트 파일(207)의 텍스트 데이타로서 직접적으로 입력될 수 있으며, 또는 문서는 사용자가 텍스트 파일(207) 내의 추가 텍스트 정보를 공급했던 이미지가 될 수 있다. 문서가 텍스트 데이타로서 직접적으로 수신되는 경우에는, 텍스트 파일(207)과 이미지 파일(209) 사이의 DFS 파일(211)에 어떤 맵핑도 제공되지 않는다. 대안으로서, 텍스트 데이타가 직접적으로 수신되는 경우에는, 이 텍스트 데이타는 종래의 이미징 기법을 이용하여 이미지 파일로 표현될 수 있고, 그 다음에 DFS 파일(211)이 텍스트 이미지 맵핑 정보를 포함하도록 갱신될 수 있다. 사용자는 바람직하게 응용 실행부(119)에 의해 드로워(201)와 폴더(203)를 선택/생성하고 그 안에 입력 문서(들)를 저장하도록 촉구된다.
입력 문서의 텍스트 데이타를 얻은 후, 입력 문서는 인덱싱(703)된다. 인덱싱은 인덱스 실행부(121)에 의해 관리된다. 문서가 입력 단계(701)에서 스캔되고 있는 경우, 인덱싱은 바람직하게 페이지 단위로 페이지 상에서 수행된다. 또한, 인덱싱은 대량의 문서들을 간편하게 처리하기 위해, 문서 단위로, 혹은 필요한 경우 배치 혹은 지연 모드로 수행될 수 있다. 인덱싱은 문서의 각 페이지에서 모든 n-그램들을 식별하고, 사용자가 선택한 드로워와 폴더의 하나 이상의 뱅크들(217) 안에 유효 공간을 두고, 뱅크(217), 뱅크 인덱스(223), 뱅크 리스트(219), 및 프리 리스트(221)를 적절히 갱신한다.
일단 인덱싱이 완료되면, 사용자는 네트워크 접속을 통해 직접적으로, 혹은 이식가능한 기억 매체를 통해, 인덱싱된 문서들(205)의 전체 드로워(201)를 다른 컴퓨터로 전송(705)하기로 결정할 수 있다. 이로부터 다른 컴퓨터는, 문서들을 재인덱싱(703)할 필요없이, 드로워(201) 내의 문서들을 서치할 수 있게 된다. 또한, 사용자는 하나 이상의 문서들(205) 혹은 폴더들(203)을 전송하기로 결정할 수 있다. 재인덱싱은 문서들이 드로워들(201) 사이에서 전송될 경우에만 필요하다.
시스템(100)은 인덱싱된 모든 드로워(201)를 서치할 수 있다. 응용 실행부(119)는 사용자가 서치(709)를 위해 드로워(들)(201), 폴더(들)(203), 혹은 문서(들)(205)를 선택하도록 촉구한다. 사용자는 서치 조회를 입력(707)하고, 원하는 워드들과 부울 연산자들을 지정한다. 사용자는 또한, 서치 조회와 임의의 문서에 존재하는 워드들 사이의 정확도의 백분율을 나타내는 매칭 파라미터(E)를 지정한다. 바람직한 실시예에서, E는 20% - 100%와 같은 유효 범위로 제한된다.
서치 실행부(123)는 입력된 서치 조회를 이용하여 서치 처리(709)를 관리한다. 즉, 서칭은 조회 워드들을 n-그램들로 변환한 후, 이 조회 워드 n-그램들을 뱅크 인덱스(223)의 n-그램과 비교하는 것을 포함한다. 그 다음, 매칭한 n-그램들이 분석되며, 매칭 파라미터에 의해 가중되어 매칭의 정도를 결정한다. 서치 조회를 만족시키는 매치를 갖는 문서와 매칭 파라미터는 검색되어 사용자에게 표시(711)된다. 사용자는 추가적인 서치를 수행하여, 서치 결과들을 저장하고, 문서들을 출력하며, 문서들의 일부분을 다른 응용 소프트웨어에서 사용하기 위해 응용 소프트웨어로 복사하거나, 혹은 서치를 종료할 수 있다.
II. 문서 인덱싱
이제 도 8을 참조하면, 인덱스 실행부(121)에 의해 관리되는, 문서를 시스템(100) 안으로 인덱싱하는 처리(703)의 흐름도가 도시되어 있다. 인덱스 실행부(121)는 일련의 연산을 수행하여 사용자에 의해 입력된 문서(들)(205)의 각 페이지에 있는 각 n-그램을 인덱싱하며, 적절한 뱅크(217), 뱅크 리스트(219), 프리 리스트(221), 및 뱅크 인덱스(223)를 갱신한다.
인덱스 실행부(121)는 인덱싱 처리를 위한 메모리를 할당한다(801). 이 과정은 버퍼들(143, 145)을 클리어하는 과정과, 다수의 페이지들의 인덱싱을 수행하기에 충분한 모든 다른 추가의 메모리 자원들을 제외하는 과정을 포함한다.
인덱스 실행부(121)는 문서 참조 모듈(125)을 호출하여 인덱싱되고 있는 문서(205)용의 문서 번호(301)를 얻는다(803). 인덱스 실행부(121)는 문서 참조 모듈(125)에 입력 단계(701) 동안 사용자에 의해 제공되는 지정된 문서(205)를 포함하는 루트 노드와, 문서(205)의 문서명을 제공한다. 문서 참조 모듈(125)은 드로워(201)의 문서 리스트(225)를 개방하며, 미사용된 엔트리들의 수로부터 현재의 엔트리(311) 리스트 안에 새로운 문서를 위한 유효 공간이 존재하는가를 결정한다. 유효 공간이 존재하지 않는 경우, 문서 리스트(225) 안에서 엔트리들의 리스트의 끝에 하나의 새로운 엔트리(311)가 생성된다. 상태값(303)이 설정되며, 문서의 전체 경로명(305)이 저장된다. 리스트 내의 미사용된 엔트리(311)가 존재하는 경우, 문서 참조 모듈(125)은 리스트들을 스캐닝하고 미설정 상태값(303)을 가진 제1 엔트리(311)로 둔다. 상태값(303)이 설정되며, 전체 경로명이 저장된다. 어느 한 경우에서, 문서 참조 모듈(125)은 문서 리스트(225) 안에서 갱신된 새로운 엔트리(311)의 오프셋인 문서 번호(301)를 복귀하게 된다.
그 다음, 인덱스 실행부(121)는 페이지 인덱싱 모듈(127)을 호출하여 문서(205)의 각 페이지를 인덱싱하며(805), 그 결과 데이타를 뱅크 인덱스(223) 안에 저장한다. 페이지 인덱싱 모듈(127)은 문서의 각 페이지에 대한 n-그램 번호의 실제적인 생성을 수행한다. 도 9를 참조하면, 페이지를 인덱싱하는 처리의 흐름도가 도시되어 있다. 이 처리는 문서의 각 페이지에 대해 반복된다.
페이지 인덱싱 모듈(127)은 먼저, 소정의 뱅크(217)에서 페이지에 대한 뱅크 오프셋(411)을 얻는다. 상기 모듈(127)은 인덱싱되고 있는 페이지를 사용자가 선택한 드로워(201) 안에 있는 특정 뱅크(217) 내의 위치에 연결시킨다. 또한, 상기 모듈(127)은 문서의 각 페이지가 다른 뱅크(127) 안에 저장되는 것을 허용한다. 이것은 다음과 같이 수행된다:
페이지 인덱싱 모듈(127)은 뱅크 리스트(219)를 판독하고, 0이 아닌 값에 도달(903)할 때까지 각 뱅크에 대한 프리 엔트리 카운트를 판독함으로써 뱅크 리스트 안에서 채워지지 않은 제1 뱅크(217)를 식별한다. 페이지 인덱싱 모듈(127)은 프리엔트리 카운트를 감소시키고, 관련된 뱅크(217)를 개방한다(907).
페이지 인덱싱 모듈(127)은 뱅크(217) 안의 사용되지 않은 엔트리들의 번호(407)를 체크한다. 또한, 이 값은 미리 인덱싱되어 뱅크(127) 안에 포함된 페이지들이 제거되었던 장소를 나타낸다. 이 값이 0이 아닌 경우, 페이지 인덱싱 모듈(127)은 뱅크(127) 내의 엔트리들을 검사하여 비어있는 엔트리임을 나타내는 상태값(405)을 가진 제1 엔트리를 식별한다. 미사용 엔트리들의 번호가 0이면, 페이지 인덱싱 모듈(127)은 최종 엔트리에 대해 오프셋되도록 뱅크(217) 내의 엔트리들의 번호(401)를 이용하여 뱅크(217)의 끝에 새로운 엔트리를 생성한다(913).
어느 한 경우에서, 페이지 인덱싱 모듈(127)은 현재의 엔트리를 나타내도록 상태값(915)을 설정하며, 엔트리 내의 문서 리스트(225)로부터 문서 번호(301)와, 문서의 페이지 번호(403)를 저장한다. 그 다음, 상기 모듈(127)은 뱅크(217) 안의 엔트리들의 번호(401)를 증가시키며, 뱅크(217)의 뱅크 번호와 뱅크(217) 내의 뱅크 오프셋(411)을 얻는다(918).
그 다음, 페이지 인덱싱 모듈(127)은 정지 워드들이 페이지용으로 생성된 워드 키들 안에 포함되는 것을 차단하기 위하여, 정지 워드 화일(135)을 로드한다(919). 그 다음, 페이지 인덱싱 모듈(127)은 페이지에 대한 워드 키들을 생성한다(921). 워드 키들은 페이지를 포함하는 뱅크(217)와 연관된 뱅크 인덱스(223)에서의 페이지에 대한 페이지 키(509) 안에 저장될 것이다. 페이지 키(509)용 워드 키들은 모두 먼저 생성된 다음, 페이지 키(509) 안에 저장되는데, 그 이유는 페이지 키의 크기(513)가 실제 저장에 앞서 페이지 키(509)를 위해 결정되기 때문이다. 워드 키들은 아래와 같이 생성된다.
이제 도 10을 참조하면, 소정 페이지의 페이지 키(509)를 구성하는 워드 키들을 생성하는 처리의 흐름도가 도시되어 있다. 페이지 키의 크기(513)는 0으로 초기화되며(1001), 버퍼들(143, 145)은 클리어된다. 인덱스 버퍼(143)는 페이지 키(509)가 생성될 때 이를 저장하기 위해 사용된다. 페이지 버퍼(145)는 페이지의 텍스트 데이타를 유지하기 위해 사용된다. 인덱싱되고 있는 페이지는 페이지 버퍼(145) 안으로 로드된다(1002). 페이지 인덱싱 모듈(127)은 페이지 버퍼(145) 안에 저장된 페이지상의 모든 워드들에 대해 루프를 수행한다(1003). 페이지 인덱싱 모듈(127)은 현재의 워드가 화일 종료점(end-of-file)인지를 판정한다(1005). 현재 워드가 화일 종료점이 아닌 경우, 상기 모듈(127)은 워드가 정지 워드 화일 안의 정지 워드인지를 체크한다. 이 과정은 해싱(hashing) 혹은 종래의 다른 기술에 의해 수행될 수 있다. 현재 워드가 정지 워드인 경우, 루프(1003)는 계속된다.
현재 워드가 정지 워드가 아닌 경우, 페이지 인덱싱 모듈(127)은 워드의 길이를 체크하여 그 길이가 n-그램 길이와 같아질 때까지 상기 워드에 "∼"를 추가한다. 예컨대, 바람직한 실시예에서, 2 레터 워드들은 하나의 "∼"가 부가되어 그 워드들을 3 레터로 만든다. 더우기, 1 레터 워드들은 연장되지 않는 것이 바람직한데, 그 이유는 이들이 서칭용의 식별이 가능한 데이타를 거의 제공하지 않기 때문이다.
그 다음, 페이지 인덱싱 모듈(127)은 워드에 대한 워드 키를 생성한다. 이 과정은 워드에 대한 n-그램들의 수(k)를 결정하는 단계(1011)를 포함한다. 워드 키에 대한 n-그램들의 수(k)는 (워드 길이 - 2)이다.
그 다음, 워드는 n-그램들로 분해되며, 각 n-그램은 워드로부터 판독되고, 제 1 문자로 시작하여 n-그램을 생성하는데 필요한 문자의 수를 판독한다. 각 n-그램에 대해, n-그램의 수가 결정된다(1013). 이것은 n-그램 룩업 테이블(227) 내의 n-그램 수를 룩업함으로써 또는 상기와 같이 n-그램수를 직접 계산함으로써 이루어질 수 있다.
어느 경우에나, 단계 1101 및 1103의 결과는 워드 내의 n-그램 각각에 대한 수 k 및 개개의 n-그램수를 포함하는, 워드에 대한 워드 키이다. 워드 키는 버퍼(143)에 첨부된다. 페이지 키 크기(513)는 워드 키의 크기를 누적시키도록 갱신된다(1014). 새로운 페이지 키 크기(513)는:
페이지 키 크기=페이지 키 크기+(1+k*sizeof(n-그램수))이다.
sizeof 함수는 n-그램수를 저장하는데 사용되는 바이트의 수를 취한다. 트리그램에 대해서는, 이것은 2 바이트이나, 보다 큰 n-그램에 대해서는 더 높을 것이다. 이것에 n-그램의 수인 k가 곱해진다. 여분의 요소가 k를 저장하기 위해 부가된다.
워드 키 내에 이렇게 발생되고 포함된 각각의 n-그램 수에 대해, n-그램 엔트리 맵(505) 및 인덱스 페이지 맵(507)이 갱신되어야 한다. n-그램수는 n-그램 엔트리 맵(505)으로의 인덱스로서 사용된다. n-그램 엔트리 맵(505) 내의 인덱스값이 얻어지고(1015) 체크된다(1017). 인덱스값이 0이면, 이것은 n-그램이 뱅크(217) 내에 이전의 참조를 갖지 않으며 새로운 인덱스 페이지 맵(507)이 생성될 것이라는 것을 의미한다. 인덱스 값이 0이 아니면, 이것은 n-그램이 뱅크(217) 내의 페이지 내에서 이전에 발견되었고, 따라서 n-그램에 대한 인덱스 페이지 맵(507)이 이미 존재한다는 것을 의미한다. 그 다음에, n-그램 엔트리 맵(505)로부터의 (인덱스값-1)은 올바른 인덱스 페이지 맵(507)에 도달하도록 인덱스 오프셋(501)에 추가된다.
따라서, n-그램 엔트리 맵(505) 인덱스값이 0이면, 다른 인덱스 페이지 맵(507)이 현재 세트의 인덱스 페이지 맵(507)의 끝에 추가된다(1019). n-그램 번호에 의해 참조된 n-그램 엔트리 맵(505)의 인덱스값은 새로운 인덱스 페이지 맵(507)의 위치로 갱신되어(1021), n-그램에 대한 다른 참조가 생성되거나(인덱싱 중에) 또는 식별될 때(서칭 중에), 후자는 n-그램 엔트리 맵(505)를 사용하여 직접적으로 액세스된다. 그러므로, 뱅크(217)에 포함되어질 제1 페이지의 제1 n-그램에 대해서, 그 n-그램(상기 n-그램의 n-그램수가 어떤 것이든지 간에)은 n-그램 엔트리 맵(505) 내에 인덱스 번호 1을 가질 것이고, 제1 인덱스 페이지 맵(507)은 그것에 관련될 것이다. 다시 그것의 n-그램수에 관계없이 또는 제1 n-그램으로부터 얼마나 먼지 관계없이, 다음 n-그램은 그것의 n-그램 엔트리 맵(505)으 내에 인덱스값 2를 가질 것이고, 제 2 인덱스 페이지 맵(507)로 할당될 것이다.
n-그램 엔트리 맵(505) 내의 인덱스값이 0이 아니면, 페이지 인덱싱 모듈(127)은 n-그램에 대한 인덱스 페이지 맵(507)에 이르도록(1023) (인덱스값-1)을 사용한다.
페이지 인덱싱 모듈(127)은 n-그램에 대한 인덱스 페이지 맵(507) 내의 (뱅크 오프셋 411)번째를 설정한다(1025). 이것은 뱅크(217) 내의 (뱅크 오프셋 411)번째 엔트리가 n-그램에 대한 참조를 갖는다는 것을 나타낸다. 이것은 현재 인덱싱되고 있는 페이지이다.
이 갱신은 워드 키 내의 각 n-그램에 대해 반복된다(1013). 페이지 인덱싱 모듈(127)은 페이지 내의 다음의 이용가능한 워드로 계속된다(1003).
페이지에 대한 모든 워드 키가 루프(1003)에서 완료되면, 페이지에 대한 워드 키의 전체 세트는 완전한 페이지 키(509)를 구성할 것이다. 페이지 키 크기(513)는 전체 페이지 키(509)의 크기가 되고, 버퍼(143)에 존재할 것이다. 이것은 이제 뱅크 인덱스(223)의 페이지 키 테이블(517) 내의 적절한 위치에 이 페이지 키(509)를 저장하도록 남아진다.
페이지 인덱싱 모듈(127)은 뱅크(217)에 대한 프리 리스트(221)를 통과하여(1027) 막 완성된 페이지 키의 페이키 키 크기보다 크거나 같은 페이지 키 크기로 제1 이용가능 페이지 키(509)의 페이지 키 오프셋(511)을 결정한다(1029). 상술한 바와 같이, 프리 리스트(221)은 삭제되었던 페이지의 페이지 키(509)에 대한 오프셋(511)을 유지하므로, 다른 하나의 페이지를 위한 다른 하나의 페이지 키(509)를 저장하는 데 유용한 그들의 공간을 가진다.
이러한 페이지 키 오프셋(511)이 위치 정해지면, 새롭게 생성된 페이지 키가 페이지 키 엔트리(517) 내의 페이지 키(509) 엔트리(509)로 기입된다(1031). 충분한 크기의 중심 엔트리가 발견되지 않으면, 페이지 키는 페이지 키 테이블(517) 내의 최종으로 존재하는 엔트리 이후에 기입된다(1033). 어느 경우에나, 페이지 키 오프셋(511), 및 페이지 키 크기(513)는 갱신된다.
도 9를 다시 참조하면, 페이지 인덱싱 모듈(127)은 그 다음에 정지 워드 화일(135)를 언로드하고(923), 인덱스 실행 모듈(121)로 제어를 복귀한다(925).
도 8을 다시 참조하면, 인덱스 실행부(121)는 인덱스된 페이지의 뱅크 참조(뱅크 번호(409) 및 뱅크 오프셋(411))로 DFS 화일(211)을 갱신하고(807), 뱅크 참조를 인덱스된 페이지에 대한 특정 이미지 및 텍스트 페이지와 연관시킨다. 이것은 시스템(100)으로 하여금, 서칭 중에 그리고 페이지의 이미지가 관찰되고 사용자에 의한 억세스를 위해 텍스트 데이타로 매핑될 때, 페이지에 대한 인덱스 정보를 검색하게 한다. 유사하게, 인덱스 실행부(121)는 문서 리스트(225)로부터의 문서 번호(301)로 DFS 화일(211)을 갱신하고(809), 다시 시스템(100)이 문서를 검색하게 한다. 마지막으로, 인데스 실행부(121)는 할당된 메모리 자원을 프리업한다(811), 인덱스 실행부(121)는 다음에 응용 실행부(119)로 제어를 복귀하여 추가의 인덱싱, 인덱스 및 문서의 전송(705), 또는 서칭(709)을 허용한다.
III. 문서 서칭
도 7을 다시 참조하면, 사용자는 또한 입력 서치 조회와 매칭되는 문서에 대한 임의 수의 드로워를 서치할 수 있다(709). 일반적으로, 서칭은 서치 조회 내의 각 워드를 그것의 n-그램으로 분해하고, 문서 페이지가 어느 n-그램을 포함하는지를 결정하고, 그 다음에 결과적인 매치에 대한 임의의 부울 또는 다른 연산을 수행하는 것을 포함한다. 특히, 각각의 뱅크는 조회 워드의 임의의 n-그램이 뱅크 내의 임의의 페이지상에 나타나는지를 결정하기 위해 서치된다. 이들 페이지가 주목된다. 다음에, 각 페이지에 대해, 조회 워드의 n-그램은 페이지상의 각 페이지 키에 있는 각 워드 키 내의 각 n-그램과 비교된다. 이것은 조회 워드와 각 페이지상의 워드 사이의 매치의 정확성을 결정한다.
이제 도 11을 참조하면, 서치 실행부(123)에 의해 관리되는, 입력 서치 조회로 시스템(100)을 서치하는 처리(709)의 흐름도가 도시되어 있다.
서치 실행부(123)는 서칭 중에 사용하기 위한 충분한 메모리 자원을 할당함으로써(1101) 시작된다. 이것은 페이지 버퍼(145)와 서치 버퍼(143)을 클리어하는 것을 포함한다. 전형적으로, 약 700 k가 16,000개의 문서를 포함하는 드로워를 서치하는데 할당된다. 또한, 서치 실행부(123)는 각 뱅크에 대해 트랙하고, 어떤 페이지 엔트리(413)(뱅크 오프셋(411)에 의함)가 조회 워드에 대한 히트를 포함하는지의 결과 버퍼를 초기화한다.
서치 실행부(123)는 그 다음에 서칭을 위해 선택된 모든 드로워(201)에 대한 루프(1103)를, 그리고 그 다음에는 각 드로워(201) 내의 모든 뱅크(217)에 대한 제2 루프(1105)를 시작한다.
서치 실행부(123)는 현재의 뱅크(217)에 대한 뱅크 인덱스(223)을 검색하고(1107), 다음에 서치 실행부 모듈(129)을 호출하여 전처리(pre-processing)(1109) 동작을 수행한다. 전처리(1109)는 매칭 파라미터를 만족시키는 서치 조회 워드 내의 임의의 n-그램과 매치하는 현재 뱅크 내의 그 페이지들을 식별한다. 그러므로 전처리는 서치 워드의 어떤 n-그램도 포함하지 않는 더 이상의 서칭 페이지에서 삭제하는 제1 필터링 단계이다. 도 12는 전처리 동작의 흐름도이다.
서치 실행부 모듈(129)은 페이지가 임의의 조회 워드의 임의의 n-그램 상에 히트를 포함하는지의 여부를 뱅크(217) 내의 각 페이지마다 트랙하는 페이지 플래그 리스트 어레이를 초기화하여, 후속 처리를 위한 페이지를 자격 검사한다. 바람직한 실시예에서, 페이지 플래그 리스트 어레이는 1-D 어레이이고, 이것은 뱅크(217) 내의 각 페이지에 대한 엔트리를 가지며, 그것의 뱅크 오프셋(411)에 대응한다. 즉, 페이지 플래그 리스트[Pmax]이고, 여기서, Pmax는 뱅크(217) 내의 페이지의 최대수이다.
다음에 서치 실행부 모듈(129)은 서치 조회 내의 각 워드 Q에 대한 루프(1203)를 시작한다. 서치 실행부 모듈(129)은 또한 n-그램 매치 카운터 어레이 G를 초기화한다. n-그램 매치 카운터 어레이 G는 페이지에 대해 트랙하고, 조회 워드의 임의의 n-그램의 횟수는 페이지 상에서 발견된다. 즉, G[p]는 뱅크(217)의 페이지 P 상의 임의의 조회 워드의 n-그램의 발생 횟수이다. 또 하나의 루프(1205)는 현재의 조회 워드 Q 내의 각 n-그램에 대해 시작된다. 현재의 조회 워드 Q에 대한 n-그램은 인덱싱 중에 상술한 바와 같이 결정된다.
서치 실행부 모듈(129)은 Q의 현재의 n-그램이 뱅크(217) 내의 임의 페이지 상에 존재하는지를 판정하는데(1207), 상기 n-그램의 n-그램 수를 취하여 뱅크 인덱스(223) 내의 해당 n-그램 수에 대한 n-그램 엔트리 맵(505)의 인덱스값을 체크하는 방법으로 판정한다. 상술한 바와 같이, n-그램 엔트리 맵(505)은 소정의 n-그램 수 및 그에 따른 n-그램에 대해, 뱅크(217)에 해당 n-그램이 있는지를 가리킨다.
만약 인덱스값이 0이면, 이것은 그 뱅크(217)의 어느 페이지에도 조회 워드 Q의 해당 n-그램의 예가 없었다는 것을 의미한다. 이 경우에, 루프(1205)는 계속된다.
만약 인덱스값이 0이 아니면, 조회 워드 Q의 n-그램이 적어도 하나는 그 뱅크(217) 내의 어느 페이지 상에 있다는 것을 의미하며, 그 인덱스값은 그것이 발생하는 뱅크 내의 페이지(들)을 식별하는 인덱스 페이지 맵(507)에 대한 인덱스를 나타낸다. 그에 따라, 서치 실행부 모듈(129)은 그 인덱스 페이지 맵(507)을 전면적으로 검색한다(뱅크 인덱스(223)에 대한 인덱스 오프셋(501)에 (인덱스값 -1)을 가산함).
그 후 서치 실행부 모듈(129)은 페이지 맵(507) 내의 각 비트 B를 읽으면서 인덱스 페이지 맵에 걸쳐 루프를 행한다(1209). 서치 실행부 모듈(129)은 각 페이지마다 비트가 설정되어 있는지를 판정한다(1211). 만약 설정되지 않았으면, 루프(1209)가 계속된다.
만약 비트가 설정되어 있다면, 이것은 그 페이지가 그의 텍스트 데이타의 어딘가에 조회 워드 Q의 n-그램을 포함한다는 것을 나타낸다. 서치 실행부 모듈(129)은 n-그램 매치 카운터 G[P]를 증가시킨다. 이것은 조회 워드 Q의 n-그램이 뱅크(217)의 페이지 P 상에 나타난다는 것을 가리킨다.
그 후 서치 실행부 모듈은 증가된 카운트 G[P]가 현재의 조회 워드 Q에 대한 히트(hit)를 해당 페이지가 포함하는 것으로 간주하기에 충분한지를 테스트한다(1215). 이것은 G[P]가 사용자에 의해 입력된 매칭 파라미터 E에 의해 가중된(웨이트가 더해진) 조회 워드 Q 내의 n-그램들의 수와 비교하여 동일한지 또는 더 큰지를 테스트한다. 만약 사용자가 조회 워드 Q와 페이지 상의 워드간의 정확한 매치를 원한다면, 조회 워드 Q 내의 모든 n-그램이 그 페이지에 존재하여야만 하며, 따라서 비트는 조회 워드 Q의 각 n-그램에 대한 각각의 인덱스 페이지 맵(507)에 있는 페이지에 대해 설정되어야만 한다. 예를 들어, 만약 그 조회 워드가 "doorknob"이라면, 여기에는 여섯 개의 n-그램이 있으며, "doorknob"의 n-그램들에 대한 여섯 개의 인덱스 페이지 맵(507) 내에 동일한 페이지 비트가 설정되어야 한다. 만약 사용자가 정확한 매치까진 바라지 않는다면, 보다 적은(몇 퍼센트의) 인덱스 페이지 맵이 설정되어야 한다. 따라서, 테스트(1215)는,
이며,
여기서 KQ는 Q의 n-그램들의 수이고 E는 매칭 파라미터이다. E는 예를 들어 20과 100 사이처럼 유용한 하부 경계(useful lower bound) 사이의 값이 바람직하다.
만약 이 테스트(1215)가 만족되면, 이 페이지가 조회 워드 Q에 대한 히트를 포함한다는 것을 나타내기 위해 페이지 플래그 리스트 어레이(page flag list array)가 갱신된다(1217). 즉, 페이지 리스트 어레이는 [Q, B]에 설정되며, 여기서 B는 루프(1209)에 의해 제어되는 현재 페이지의 인덱스이다. 그 후 루프(1209)가 소진(exhausted)될 때까지 처리가 계속된다. 일단 모든 루프가 완료되면, 전처리(pre-processing)(1109)(도 11)가 행해진다.
다시 도 11을 참조하면, 전처리(1109)는 페이지 리스트 어레이를 생성하는데, 이 페이지 리스트 어레이는 각 조회 워드 Q에 대하여 현재 처리 중인 뱅크(217) 내의 어느 페이지가 조회 워드의 예(instance)를 갖고 있는지를 보여준다. 이것은 그 조회 워드 Q와 어떤 워드간의 매치가 발생하는 것이 해당 페이지의 어디인지를 나타내지 않는다. 이 후 조회 워드들과 페이지 상의 워드들 간의 정확한 정합들과, 그것이 임의의 부울 연산자(Boolean operator)들을 만족시키는지를 더 판정하기 위해 뱅크(217) 내의 각 페이지가 처리(1111)될 수 있다.
다음, 도 13을 보면, 뱅크(217)의 처리(1111)의 흐름도가 도시되어 있다. 이 단계에서는, 전처리(1109)동안 선택되었던 페이지들만이 더 처리된다. 서치 실행부 모듈(129)은 뱅크 오프셋(411)값들에 의해 반복하면서 뱅크(217) 내의 각 페이지 엔트리(413)에 대한 루프(1301)를 개시한다. 서치 조회(search query) 내의 각 워드 Q에 대해 제2 루프(1303)가 개시된다.
서치 실행부 모듈(129)은 해당 페이지가 조회 워드 Q의 예를 갖고 있는지를 체크한다(1305). 이것은 [Q, 뱅크 오프셋(411)]에 있는 페이지 리스트 어레이를 체크함으로써 바람직하게 행해진다. 이 값은 만약 인덱스 페이지 맵(507)에서 결정된 페이지 상에 조회 워드 Q의 예들이 있을 경우 전처리(1109) 중에 설정될 것이다. 만약 페이지가 그렇게 나타내지 않았다면, 루프(1303)가 계속된다.
그렇지 않으면, 그 페이지에 대한 페이지 키(509)가 페이지 버퍼(143)로 로드된다(1307). 이것은 뱅크 오프셋(411)을 이용하여 페이지 키 오프셋 테이블(509)에 인덱스하고, 정확한 페이지 키(509)에 대한 실제 페이지 키 오프셋(511)을 얻는 방법으로 행해진다. 그 후 페이지 상의 얼마나 많은 n-그램들이 조회 워드들과 매치되는지를 결정하기 위해 이 페이지 키(509)가 처리된다(1309).
서치 실행부 모듈(129)은 각 조회 워드 Q에 대하여 페이지 키(509) 내의 각 워드 키W에 대한 워드 키 매치 카운터(word key match counter)를 초기화한다. 이것은 바람직하게는 2D 어레이 [Qn, Wn]이며, 여기서 Qn은 조회 워드 Q의 수이고 Wn은 페이지 키(509) 내의 워드 키 W의 수이다.
서치 실행부 모듈(129)은 일련의 루프를 개시한다. 외부 루프(1403)는 현 조회 워드 Q(루프(1303)에 의해 제어됨, 도 13 참조) 내의 각 n-그램에 대해 반복된다. n-그램들은, 비교에 실제로 사용되는 n-그램 수와 함께, 상기와 같이 결정된다. 그 페이지에 대한 페이지 키(509) 내의 각 워드 키 W에 대해 제2 루프(1405)가 반복된다. 상기와 같이, 인덱싱 중에 각 워드는 그 워드에 대한 모든 n-그램들을 가진 워드 키를 생성한다. 이 루프는 각 워드 키(따라서 각 워드)를 각 조회 워드와 비교한다. 최종 루프(1407)는 워드 키 내의 각 n-그램에 대해 반복된다.
이들 루프의 중심에서, 서치 실행부 모듈(129)은 조회 워드 Q의 현재의 n-그램과 워드 키의 현재의 n-그램을 비교한다(1409). 그들이 동일하다면, 워드 키 매치 카운터는 증가된다(1411)(따라서, Q 및 W의 현재의 반복을 위한 워드 키 매치 카운터 어레이[Q, W]를 증가시킴). 이것이 의미하는 것은 조회 워드 Q에 대한 한 n-그램이 페이지 내의 워드로부터의 한 n-그램과 매치되었다는 것이다. 카운터는 이러한 매치의 수를 트랙한다.
서치 실행부 모듈(129)은 다음으로 조회 워드 Q 자체와 워드자체 사이의 매치를 표시하기에 충분한 매치가 있는지 여부를 (워드 키 매치 카운터 어레이[Q, W]의 값을 사용하여)결정한다(1413). 또, 이 테스트는 매칭 파라미터 E에 기초한다. 그래서, 정확한 매치(E=100)가 필요하다면, 워드 키 W 내의 모든 n-그램은 조회 워드 Q 내의 모든 n-그램과 정합하여야 한다; 즉:
워드 키 매치 카운터 어레이[Q, W]=KQ
여기서 KQ는 조회 워드 Q 내의 n-그램의 수이다. 정확한 매치가 필요하지 않다면(E<100), 특정 비율은 반드시 매치해야 한다. 일반적으로:
워드 키 매치 카운터 어레이[Q, W]≥
이러한 테스트가 만족되면, 서치 실행부 모듈(129)은 서치 조회에 대한 히트를 표시하는 뱅크 및 페이지 엔트리(411)에 대한 결과적 버퍼를 설정한다(1414). 충분한 n-그램이 매치하므로 내부 루프(1407)은 종료될 필요가 없다.
서치 실행부 모듈(129)은 루프(1405 및 1403)를 다 써버리는 것을 계속하고, 워드 키 W 내의 각각의 워드에 대한, 및 현재 페이지 키(509) 내의 각각의 워드 키(W)에 대한 [도 13의 루프(1301)에 의해 제어되는 것처럼] 상기 계산을 완료한다.
다시 도 13을 참조하면, 현 페이지 입력(413)은 각각의 조회 워드 Q마다 처리(1309)된다. 일단 모든 조회 워드 Q가 분석되면, 상술한 것처럼 서치 실행부 모듈(129)은 서치 조회가 임의의 부을 연산을 포함하는지의 여부를 결정(1313)한다. 부울 연산이 필요하다면, 서치 실행부 모듈(129)는 부울 처리(1315)를 수행한다. 이 지점에서 서치 실행부 모듈(129)이 조회 워드 Q가 현재 페이지에 대한 히트인지 여부가 증명되었기 때문에 부울 처리(1315)는 일반적으로 수행될 수 있다. 부울 조회를 만족시키는 페이지가 사용자 쪽으로 복귀하므로, 오직 불량 조건만이 결과적 버퍼에서 식별될 필요가 있다. 부울 처리(1315)는 일반적으로 아래와 같다:
조회 워드 Q가 AND 연산에 대한 독립 변수(argument)이고, 페이지 상의 조회 워드 Q의 예가 (워드 키 매치 카운터에 의해 결정된 것처럼) 없다면, 페이지를 거부된 것으로 표시한다.
조회 워드 Q가 NOT 연산에 대한 독립 변수이고, 페이지 상의 조회 워드 Q의 예가 있으면, 페이지를 거부된 것으로 표시한다.
조회 워드(Q1, Q2) 중의 임의의 한쌍이 XOR 연산에 대한 독립 변수이고, 그 둘다 페이지 상에 발견되거나 또는 둘다 페이지 상에 발견되지 않는 경우, 페이지를 거부된 것으로 표시한다.
조회 워드 Q가 구문(인용된 워드 시퀀스)이고, 동일 시퀀스가 발견되지 않는다면, 페이지를 거부된 것으로 마크한다.
부울 처리(1315) 후에, 서치 실행부 모듈(129)이 계속된다.
부울 처리(1315)가 요구되지 않는다면, 서치 실행부 모듈(129)는 루프(1301)를 종료하기까지 지속되고 뱅크(217)의 다음 페이지 엔트리(413)까지 반복된다. 수행이 끝났을 때, 서치 실행부 모듈(129)은 제어를 서치 실행부(123)로 복귀시킨다.
다시 도 11을 참조하면, 서치 실행부(123)는 검색 리스트 모듈(131)을 호출하여 서칭 처리의 결과를 통합한다(1113). 소정 문서의 페이지가 다중 뱅크(217)에 상주하기 때문에 서치 결과의 통합이 사용된다. 서치 리스트 모듈(131)은 결과 버퍼를 다시 조사하고, 방금 처리된 뱅크(217)를 식별한다. 각 피트의 뱅크(217)와 뱅크 오프셋(411)에 의해 페이지 엔트리가 결정되고, 서치 리스트 모듈(131)은 페이지 엔트리(413)을 포함하는 문서를 획득키 위해 문서 번호(403)를 액세스한다. 거기로부터, DFS 화일(211)은 액세스될 수 있고, 문서의 나머지 페이지는 액세스되고 통합된다. 서치 조회와 매치하는 통합된 문서 리스트는 서치 실행부(123)로 복귀된다.
이후 서치 실행부(123)는 각각의 뱅크 및 각각의 드로어(drawer)에 대한 루프(1105, 1103)를 종료하고 적당한 드로어 및 뱅크를 폐쇄한다(1115). 모든 뱅크 및 드로어에 대한 결과는 유사하게 통합되고, 서치 조회와 매칭되는 문서의 최종 리스트가 만들어지고(1117), 평가를 받기 위해 사용자에게 디스플레이된다(도 7). 서치 실행부(123)는 이후 서칭중에 사용된 메모리를 할당해제(deallocate)하고, 제어를 응용 실행부(119)로 되돌린다(1119).
본 발명에 따른 n-그램 분해 방법이 정보 및 검색 시스템에 대해서 설명되었다. 그러나, n-그램 분해 방법을 여러 다른 분야에 이용하는 것도 본 발명의 범위에 포함된다. n-그램 분해 방법은 개선된 성능을 위하여 다른 텍스트 처리 방법 또는 시스템에 사용될 수 있다. 예를 들어 n-그램 분해 방법은 철자가 잘못된 워드를 식별하기 위해, 배치(batch)식이든 대화형이든 간에 관계없이 스펠링 검사기로 사용될 수 있고, 각각에 대해 가능한 대체의 더 정확한 리스트를 제공할 수 있다. 마찬가지로, n-그램은 어근을 식별하고 적합한 정의 또는 동의어, 반의어 등을 찾기 위해 컴퓨터화된 사전 또는 백과 사전에 사용될 수 있다. 또한 n-그램 방법은 문법적 분석을 하기 전에 워드를 식별하기 위해 비슷한 방식의 문법 검사기로 활용될 수도 있다. 텍스트 데이타를 처리하기 위한 n-그램 분해 방법의 상기와 같은 활용법과 다른 활용법은 본 발명의 청구 범위 내에 모두 포함되었다.

Claims (15)

  1. 각 문서는 적어도 하나의 페이지를 포함하고 다수의 워드를 포함하는 저장된 문서들을 인덱싱하고, 적어도 하나의 조회 워드를 포함하는 입력 서치 조회와 매칭되는 적어도 하나의 문서를 서칭하는 컴퓨터 구현 방법에 있어서,
    각각의 문서에 대하여:
    상기 문서의 각 페이지 상의 비 정지 워드를 식별하는 단계;
    각각의 비 정지 워드에 대하여 적어도 하나의 n-그램을 결정하는 단계;
    각각의 n-그램에 대하여, 하나의 페이지에 각각 대응하고 상기 대응 페이지가 상기 n-그램을 포함하고 있는지 여부를 각각 나타내는 다수의 위치들(position)을 갖는 맵을 저장하는 단계;
    상기 적어도 하나의 조회 워드에 대한 적어도 하나의 조회 워드 n-그램을 결정하는 단계, 및
    상기 조회 워드 n-그램 중의 선택된 것들과 매칭되는 n-그램을 갖는 문서를 검색하는 단계를 포함하되,
    상기 문서 검색 단계는,
    상기 조회 워드 n-그램에 대응하는 맵을 결정하는 단계;
    상기 맵으로부터 상기 조회 워드 n-그램을 포함하는 적어도 하나의 페이지를 결정하는 단계; 및
    상기 페이지와 그에 관련된 상기 문서를 검색하는 단계에 의해 수행되는 컴퓨터 구현 방법.
  2. n-그램씩 문서를 인덱싱하는 저장 구조를 포함하고, 각 문서는 문서 번호와 문서명 및 적어도 하나의 페이지를 갖고, 각 페이지는 페이지 번호를 갖는, 컴퓨터 판독가능 메모리에 있어서,
    각 페이지 엔트리가 상기 페이지를 포함하는 상기 문서의 문서 번호, 및 상기 문서 내의 페이지 번호에 의해 페이지를 식별하는 페이지 엔트리의 리스트를 포함하는 뱅크, 및
    상기 뱅크와 관련된 뱅크 인덱스를 포함하고,
    상기 뱅크 인덱스는
    i) 각 n-그램 엔트리 맵은 단일 n-그램과 관련되고, 선택된 n-그램 엔트리 맵은 뱅크 내에서 식별된 적어도 하나의 페이지가 상기 n-그램 엔트리 맵과 관련된 상기 n-그램을 포함하는 인덱스 엔트리 맵에 대한 인덱스를 가지는, 다수의 n-그램 엔트리 맵,
    ii) 각 인덱스 엔트리 맵은 상기 n-그램 엔트리 맵들 중 하나에 의해 인덱스되고, 상기 각 인덱스 엔트리 맵은, 상기 뱅크 내의 페이지 엔트리에 각각 대응하고 상기 인덱스 엔트리 맵을 인덱스하는 상기 n-그램 엔트리 맵과 관련된 n-그램을 포함하는 페이지를 식별하는 상기 뱅크 내의 각 페이지 엔트리를 식별하는지 여부를 각각 나타내는 다수의 위치들을 갖는 다수의 인덱스 엔트리 맵
    을 포함하는 컴퓨터 판독 가능 메모리.
  3. 제2항에 있어서,
    a) 상기 뱅크 내의 각각의 페이지 엔트리는 오프셋을 갖고,
    b) 각각의 인덱스 엔트리 맵은 다수의 비트 위치를 포함하고, 각 비트 위치는 상기 뱅크내의 페이지 엔트리와 관련되고, 각 비트 위치는 상기 비트 위치에 관련된 상기 페이지 엔트리에서 식별된 페이지가 상기 인덱스 엔트리 맵을 인덱스하는 상기 n-그램 엔트리 맵과 관련된 n-그램을 포함하는 제1 값과, 상기 비트 위치에 관련된 상기 페이지 엔트리에서 식별된 페이지가 상기 인덱스 엔트리 맵을 인덱스하는 상기 n-그램 엔트리 맵과 관련된 n-그램을 포함하지 않는 제2 값을 갖는 컴퓨터 판독 가능 메모리.
  4. 제2항에 있어서,
    i) 각 문서가 리스트에서 고유하게 식별되는 문서의 리스트,
    ii) 다수의 뱅크 및 관련된 뱅크 인덱스, 및
    iii) 다수의 뱅크 각각에 대해 뱅크내의 다수의 빈 페이지 엔트리의 카운트를 포함하는 뱅크 리스트를 포함하는
    드로워를 더 포함하는 컴퓨터 판독 가능 메모리.
  5. 제2항에 있어서, 각각의 뱅크는
    a) 각 페이지가 뱅크내의 페이지 엔트리와 고유하게 관련된 적어도 하나의 페이지 키를 포함하는 페이지 키 테이블을 더 포함하고,
    b) 상기 페이지 상의 각 워드에 대해, 워드내의 n-그램의 리스트를 포함하는 컴퓨터 판독 가능 메모리.
  6. 문서를 검색하는 컴퓨터 구현 방법에 있어서,
    a) 컴퓨터 판독 가능 메모리상에 청구항 5의 저장 구조를 저장하는 단계,
    b) 조회 텀을 수신하는 단계,
    c) 상기 조회 텀내의 다수의 n-그램 각각에 대해:
    i) 인덱스 엔트리 맵이 상기 n-그램에 대해 존재하는지를 상기 조회 텀의 상기 n-그램과 관련된 상기 뱅크 인덱스 내의 n-그램 맵으로부터 결정하는 단계,
    ii) 존재하는 인덱스 엔트리 맵에 응답하여, 상기 인덱스 엔트리 맵으로부터 상기 인덱스 엔트리 맵과 관련된 n-그램을 포함하는 페이지를 식별하는 뱅크내의 각 페이지 엔트리를 결정하는 단계, 및
    iii) 상기 n-그램을 포함하는 각 페이지에 대해 n-그램 카운터를 증분하는 단계를 행하는 단계; 및
    d) 뱅크 내의 각 페이지에 대해, 상기 페이지에 대한 상기 n-그램 카운터가 상기 페이지는 상기 조회 텀을 포함한다는 것을 표시하기 위해 상기 조회 텀 내의 n-그램의 수와 충분히 유사한지를 결정하는 단계, 및
    e) 상기 조회 텀 내의 n-그램의 수와 충분히 유사한 페이지에 대한 n-그램 카운터에 응답하여, 후속하는 조회 분석을 위해 상기 페이지를 포함하는 문서를 검색하는 단계
    를 포함하는 컴퓨터 구현 방법.
  7. 제6항에 있어서, 상기 페이지에 대한 상기 n-그램 카운터가 다음의 경우에는 조회 텀내의 n-그램의 수와 충분히 유사하고:
    여기서,
    P는 페이지이고,
    G[P]는 페이지 P에 대한 n-그램 매치 카운터이고,
    K는 조회 텀 내의 n-그램의 수이고,
    E는 n-그램 매칭 카운터와 K사이의 매칭의 백분율을 제어하도록 선택된 매칭 파라메터인 컴퓨터 구현 방법.
  8. 각 문서는 적어도 하나의 페이지를 갖고, 각 페이지는 최대 데이타량보다 적은 양을 갖고, 다수의 워드를 가지는, 다수의 문서를 인덱싱하는 컴퓨터 구현 방법에 있어서,
    a) 각 페이지가 문서에 관련된, 페이지의 리스트를 저장하는 단계,
    b) n-그램의 리스트를 결정하는 단계,
    c) 각 n-그램에 대해, 상기 n-그램을 포함하는 페이지의 맵을,
    i) 상기 문서로부터 현재의 페이지를 검색하고,
    ii) 상기 현재의 페이지의 각 비 정지 워드에 대해:
    1) 상기 워드 내의 n-그램을 결정하고,
    2) 상기 워드 내의 각 n-그램에 대해:
    n-그램에 관련되고 각 위치가 하나의 페이지에 대응하고 상기 각 위치는 상기 대응 페이지가 상기 n-그램을 포함하고 있는지 여부를 나타내는 다수의 위치를 갖는 맵에서, 상기 페이지가 n-그램을 포함한다는 것을 표시하는 것으로 상기 현재의 페이지에 대한 위치를 갱신함으로써,
    설정하는 단계
    를 포함하는 컴퓨터 구현 방법.
  9. 제8항에 있어서,
    d) 조회 텀을 포함하는 문서를 추가적으로 검색하기 위해서,
    e) 조회 텀을 수신하는 단계,
    상기 조회 텀내의 다수의 n-그램 각각에 대해:
    i) 맵이 상기 n-그램에 대해 존재하는지를 결정하는 단계,
    ii) 존재하는 맵에 응답하여, 상기 맵과 관련된 상기 n-그램을 포함하는 리스트 내의 각 페이지를 맵으로부터 결정하는 단계, 및
    iii) 상기 리스트 내의 각 페이지에 대해, 상기 페이지가 상기 조회 텀을 포함한다는 것을 표시하기 위해 상기 조회 텀내에 페이지가 충분한 수의 n-그램을 포함하는 지를 결정하는 단계를 행하는 단계, 및
    f) 상기 조회 텀을 포함하는 각 페이지에 응답하여, 후속하는 조회 분석을 위해 상기 페이지를 포함하는 상기 문서를 검색하는 단계
    를 포함하는 컴퓨터 구현 방법.
  10. 청구항 8의 단계들을 수행하도록 프로세서를 구성하고 제어하는 컴퓨터 프로그램을 포함하는 컴퓨터 판독 가능 메모리.
  11. 각각의 문서가 적어도 하나의 페이지를 포함하는, 다수의 문서를 인덱스하도록 프로세서를 제어하는 컴퓨터 판독 가능 메모리에 있어서,
    인덱스된 페이지의 리스트,
    각각의 인덱스 맵은 하나의 n-그램과 고유하게 관련되고 다수의 위치를 가지며, 각각의 위치는 상기 인덱스된 페이지의 리스트내의 페이지와 고유하게 관련되고, 상기 각각의 위치는 상기 대응 페이지가 상기 인덱스 맵과 관련된 n-그램을 포함하는 지의 여부를 나타내는 인덱스 맵의 세트, 및
    페이지 인덱싱 모듈을 포함하되, 상기 페이지 인덱싱 모듈은
    i) 인덱스될 현재 페이지를 수신하고,
    ii) 상기 인덱스된 페이지의 리스트내에 상기 현재의 페이지에 대한 엔트리를 생성하고,
    iii) 상기 현재의 페이지의 각각의 비 정지 워드에 대해 상기 워드내에 n-그램의 리스트를 저장하고,
    iv) 각각의 n-그램에 대해, 상기 n-그램과 관련된 상기 인덱스 맵에서, 상기 현재의 페이지가 상기 n-그램을 포함하는 것을 표시하기 위해서 상기 현재의 페이지에 대한 엔트리를 갱신하는 컴퓨터 판독 가능 메모리.
  12. 제11항에 있어서, 상기 페이지 인덱싱 모듈은
    상기 워드 내의 각 n-그램에 대해 n-그램 번호를 결정하고,
    각 n-그램의 상기 n-그램 번호를 상기 워드 내에 저장하고,
    상기 저장된 n-그램 번호를 상기 현재 페이지와 관련시킴으로써
    상기 워드내의 n-그램의 리스트를 상기 현재 페이지의 비 정지 워드에 대해 저장하는 컴퓨터 판독 가능 메모리.
  13. 각각의 문서가 적어도 하나의 페이지를 포함하는, 다수의 문서를 인덱스하도록 프로세서를 제어하는 컴퓨터 판독 가능 메모리에 있어서,
    인덱스된 페이지의 리스트,
    각각의 인덱스 맵은 하나의 n-그램과 고유하게 관련되고 다수의 위치를 가지며, 각각의 위치는 상기 인덱스된 페이지의 리스트내의 페이지와 고유하게 관련되고, 상기 각각의 위치는 상기 대응 페이지가 상기 인덱스 맵과 관련된 n-그램을 포함하는 지의 여부를 나타내는 인덱스 맵의 세트; 및
    페이지 인덱싱 모듈을 포함하되, 상기 페이지 인덱싱 모듈은,
    i) 인덱스될 현재 페이지를 수신하고,
    ii) 상기 인덱스된 페이지의 리스트내에 상기 현재의 페이지에 대한 엔트리를 생성하고,
    iii) 상기 현재의 페이지의 각각의 비 정지 워드에 대해 상기 워드내에 n-그램의 리스트를 저장하며,
    - 상기 저장은,
    iii.1) 워드의 상기 n-그램 번호는 다음 식에 의해 결정되고,
    여기서, NG 는 워드의 상기 n-그램 번호이고,
    x는 상기 워드의 i번째 문자의 n-그램 문자 번호이고,
    Cmax는 인덱스가능한 문자의 전체수이고,
    Np는 상기 n-그램 내의 레터(letter)의 원하는 수임,
    iii.2) 상기 워드 내의 각 n-그램의 상기 n-그램 번호를 저장하고,
    iii.3) 상기 현재 페이지와 상기 저장된 n-그램 번호를 관련시킴으로써 수행됨 -
    iv) 각각의 n-그램에 대해, 상기 n-그램과 관련된 상기 인덱스 맵에서, 상기 현재의 페이지가 상기 n-그램을 포함하는 것을 표시하기 위해서 상기 현재의 페이지에 대한 엔트리를 갱신하는
    컴퓨터 판독 가능 메모리.
  14. 각각의 문서는 적어도 하나의 페이지를 포함하는, 다수의 문서로부터의 조회 텀을 포함하는 문서를 인덱스하도록 프로세서를 제어하는 컴퓨터 판독 가능 메모리에 있어서,
    각각의 페이지가 문서와 관련되는, 인덱스된 페이지의 리스트;
    각각의 인덱스 맵은 하나의 n-그램과 관련되고 다수의 위치를 가지며, 각각의 위치는 인덱스된 페이지의 리스트내의 페이지와 고유하게 관련되고, 상기 대응 페이지가 상기 인덱스 맵과 관련된 n-그램을 포함하는지 여부를 표시하는 인덱스 맵의 세트; 및
    서치 모듈을 포함하되,
    상기 서치 모듈은
    조회 텀을 수신하고,
    상기 조회 텀내의 다수의 n-그램 각각에 대해,
    상기 n-그램에 관련된 인덱스 맵이 있는지를 상기 조회 텀내의 다수의 n-그램 각각에 대해 결정하고,
    존재하는 인덱스 맵에 응답하여, 상기 인덱스 맵으로부터 상기 맵에 관련된 상기 n-그램을 포함하는 상기 인덱스된 페이지의 리스트내의 각 페이지를 결정하고,
    상기 인덱스된 페이지의 리스트내의 각 페이지에 대해, 상기 페이지가 상기 조회 텀을 포함한다는 것을 표시하기 위해 상기 페이지가 상기 조회 텀 내에 충분한 수의 n-그램을 포함하는 지를 결정하고,
    상기 조회 텀을 포함하는 페이지에 응답하여, 후속하는 조회 분석을 위해 상기 페이지를 포함하는 문서를 검색하는 컴퓨터 판독 가능 메모리.
  15. 제14항에 있어서, 서치 모듈은 페이지가 다음 식에 의해 조회 텀내에 충분한 수의 n-그램을 포함하는 지를 결정하고:
    여기서,
    P는 페이지이고,
    G[P]는 페이지 P에 포함된 상기 조회 텀 내의 n-그램의 수이고,
    K는 상기 조회 텀 내의 n-그램의 수이고,
    E는 상기 페이지 P에 포함된 조회 텀 내의 n-그램의 수와 K 사이의 매치의 백분율을 제어하도록 선택된 매칭 파라메터인 컴퓨터 판독 가능 메모리.
KR1019960707052A 1995-04-10 1996-04-10 N-그램워드(n-gramword)분해원리를이용하여이식가능한문서를인덱싱하는시스템및방법 KR100459832B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019960707052A KR100459832B1 (ko) 1995-04-10 1996-04-10 N-그램워드(n-gramword)분해원리를이용하여이식가능한문서를인덱싱하는시스템및방법

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/419,126 1995-04-10
KR1019960707052A KR100459832B1 (ko) 1995-04-10 1996-04-10 N-그램워드(n-gramword)분해원리를이용하여이식가능한문서를인덱싱하는시스템및방법

Publications (1)

Publication Number Publication Date
KR100459832B1 true KR100459832B1 (ko) 2005-06-02

Family

ID=43664980

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960707052A KR100459832B1 (ko) 1995-04-10 1996-04-10 N-그램워드(n-gramword)분해원리를이용하여이식가능한문서를인덱싱하는시스템및방법

Country Status (1)

Country Link
KR (1) KR100459832B1 (ko)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150094785A (ko) * 2012-12-31 2015-08-19 페이스북, 인크. 온라인 소셜 네트워크에서 불명확한 구조화된 검색 질의
KR101550327B1 (ko) * 2012-07-23 2015-09-04 페이스북, 인크. 소셜-그래프 정보에 기반한 구조화된 검색 질의
US9223879B2 (en) 2010-04-19 2015-12-29 Facebook, Inc. Dynamically generating recommendations based on social graph information
US9245038B2 (en) 2010-04-19 2016-01-26 Facebook, Inc. Structured search queries based on social-graph information
US9342623B2 (en) 2010-04-19 2016-05-17 Facebook, Inc. Automatically generating nodes and edges in an integrated social graph
US9396272B2 (en) 2010-04-19 2016-07-19 Facebook, Inc. Personalized structured search queries for online social networks
US9465848B2 (en) 2010-04-19 2016-10-11 Facebook, Inc. Detecting social graph elements for structured search queries
US9514218B2 (en) 2010-04-19 2016-12-06 Facebook, Inc. Ambiguous structured search queries on online social networks
US9959318B2 (en) 2010-04-19 2018-05-01 Facebook, Inc. Default structured search queries on online social networks

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10282377B2 (en) 2010-04-19 2019-05-07 Facebook, Inc. Suggested terms for ambiguous search queries
US11074257B2 (en) 2010-04-19 2021-07-27 Facebook, Inc. Filtering search results for structured search queries
US9514218B2 (en) 2010-04-19 2016-12-06 Facebook, Inc. Ambiguous structured search queries on online social networks
US9245038B2 (en) 2010-04-19 2016-01-26 Facebook, Inc. Structured search queries based on social-graph information
US9959318B2 (en) 2010-04-19 2018-05-01 Facebook, Inc. Default structured search queries on online social networks
US9342623B2 (en) 2010-04-19 2016-05-17 Facebook, Inc. Automatically generating nodes and edges in an integrated social graph
US9396272B2 (en) 2010-04-19 2016-07-19 Facebook, Inc. Personalized structured search queries for online social networks
US9465848B2 (en) 2010-04-19 2016-10-11 Facebook, Inc. Detecting social graph elements for structured search queries
US9223879B2 (en) 2010-04-19 2015-12-29 Facebook, Inc. Dynamically generating recommendations based on social graph information
US10614084B2 (en) 2010-04-19 2020-04-07 Facebook, Inc. Default suggested queries on online social networks
US10275405B2 (en) 2010-04-19 2019-04-30 Facebook, Inc. Automatically generating suggested queries in a social network environment
US10140338B2 (en) 2010-04-19 2018-11-27 Facebook, Inc. Filtering structured search queries based on privacy settings
US10430477B2 (en) 2010-04-19 2019-10-01 Facebook, Inc. Personalized structured search queries for online social networks
US10282354B2 (en) 2010-04-19 2019-05-07 Facebook, Inc. Detecting social graph elements for structured search queries
US10331748B2 (en) 2010-04-19 2019-06-25 Facebook, Inc. Dynamically generating recommendations based on social graph information
US10430425B2 (en) 2010-04-19 2019-10-01 Facebook, Inc. Generating suggested queries based on social graph information
KR101550327B1 (ko) * 2012-07-23 2015-09-04 페이스북, 인크. 소셜-그래프 정보에 기반한 구조화된 검색 질의
KR20150094785A (ko) * 2012-12-31 2015-08-19 페이스북, 인크. 온라인 소셜 네트워크에서 불명확한 구조화된 검색 질의
KR101593191B1 (ko) 2012-12-31 2016-02-11 페이스북, 인크. 온라인 소셜 네트워크에서 불명확한 구조화된 검색 질의

Similar Documents

Publication Publication Date Title
JP4559371B2 (ja) Nグラム・ワード分解を用いた携帯型文書索引付け用のシステム及び方法
US5465353A (en) Image matching and retrieval by multi-access redundant hashing
US5717940A (en) Method of selecting a target document using features of an example page
US6163775A (en) Method and apparatus configured according to a logical table having cell and attributes containing address segments
US8380012B2 (en) Document imaging and indexing system
US7013304B1 (en) Method for locating digital information files
US7440947B2 (en) System and method for identifying query-relevant keywords in documents with latent semantic analysis
EP0277356B1 (en) Spelling error correcting system
EP0378848A2 (en) Method for use of morphological information to cross reference keywords used for information retrieval
EP0775963B1 (en) Indexing a database by finite-state transducer
EA003619B1 (ru) Система и способ поиска электронных документов, созданных с помощью оптического распознавания знаков
KR100459832B1 (ko) N-그램워드(n-gramword)분해원리를이용하여이식가능한문서를인덱싱하는시스템및방법
US20060248037A1 (en) Annotation of inverted list text indexes using search queries
Kim et al. An approximate string-matching algorithm
CA2192435C (en) System and method for portable document indexing using n-gram word decomposition
JP3958722B2 (ja) イメージデータ文書検索システム
Wang et al. Fast retrieval of electronic messages that contain mistyped words or spelling errors
JPH08115330A (ja) 類似文書検索方法および装置
JPH06309368A (ja) 文書検索装置
KR20070072929A (ko) 데이터 처리 시스템 및 방법
JPH06139278A (ja) 文字コード変換機能を備えた文字列検索装置
JPH02148174A (ja) Ocrによる住所データベース検索装置
Maarek Introduction to Information Retrieval for Software Reuse.
JPH04205561A (ja) 用語辞書による文書検索システム
CN110347804A (zh) 一种线性时间复杂度的敏感信息检测方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20110627

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee