KR20140061450A - 추출 방법, 추출 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 추출 장치, 및 추출 시스템 - Google Patents
추출 방법, 추출 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 추출 장치, 및 추출 시스템 Download PDFInfo
- Publication number
- KR20140061450A KR20140061450A KR1020147006760A KR20147006760A KR20140061450A KR 20140061450 A KR20140061450 A KR 20140061450A KR 1020147006760 A KR1020147006760 A KR 1020147006760A KR 20147006760 A KR20147006760 A KR 20147006760A KR 20140061450 A KR20140061450 A KR 20140061450A
- Authority
- KR
- South Korea
- Prior art keywords
- information
- character
- file
- computer
- code
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/70—Information retrieval; Database structures therefor; File system structures therefor of video data
- G06F16/78—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
- G06F16/783—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using metadata automatically derived from the content
- G06F16/7844—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using metadata automatically derived from the content using original textual content or text extracted from visual content or transcript of audio data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Multimedia (AREA)
Abstract
세그먼트 (sg2(1))에 관해, 문자 정보 「人」의 압축 부호 (P(人))의 집약 출현 맵과, 문자 정보 「形」의 압축 부호 (P(形))의 집약 출현 맵과, 집약 삭제 맵의 AND 연산을 행한다. AND 결과는 「1100」이 되고, 세그먼트 (sg1(1)), (sg1(2))에, 문자 정보 「人」 및 「形」이 존재할 가능성이 있는 것을 알 수 있다. 이 AND 결과로부터 세그먼트 (sg1(1)), (sg1(2))가 지정되었기 때문에, AND 연산을 실행한다. 이에 따라, 세그먼트 (sg0(1)), 세그먼트 (sg0(5))가 지정되고, AND 연산을 실행한다. 이에 따라, 세그먼트 (sg0(1))로부터는 파일 번호 3이 지정되고, 세그먼트 (sg0(5))로부터는 파일 번호 19가 지정된다. 따라서, 압축 파일 (f3), (f19)에, 문자 정보 「人」 및 「形」의 양방이 존재하는 것을 알 수 있다.
Description
본 발명은, 정보를 추출하는 추출 방법, 추출 프로그램, 추출 장치, 및 추출 시스템에 관한 것이다.
종래, 정해진 문자 정보를 포함하는 검색 문자열이 입력된 경우에, 검색 대상의 복수의 파일 중 어느 것이 정해진 문자 정보를 포함하는지를 나타내는 인덱스 정보를 참조하여, 검색 대상의 파일 중 정해진 문자 정보를 포함하는 파일을 축약하는 기술이 있다.
그러나, 검색 대상의 파일수가 증대되면, 그것에 맞추어 인덱스 정보의 사이즈도 증대된다. 인덱스 정보의 사이즈 증대에 따라, 인덱스 정보를 참조하는 처리에 요하는 시간이 증대되기 때문에, 결과적으로 검색 처리 시간이 증대된다는 문제가 있었다.
본 발명은, 전술한 종래 기술에 의한 문제점을 해소하기 위해, 파일수 증대에 따른 검색 처리 시간의 증대를 억제할 수 있는 추출 방법, 추출 프로그램, 추출 장치, 및 추출 시스템을 제공하는 것을 목적으로 한다.
전술한 과제를 해결하여 목적을 달성하기 위해, 본 발명의 일측면에 의하면, 복수의 파일의 각각에 관해 정해진 문자 정보를 포함하는지 여부를 나타내는 제1 정보와, 상기 복수의 파일 중 적어도 어느 하나가 상기 정해진 문자 정보를 포함하는지 여부를 나타내는 제2 정보를 기억 수단에 기억하고, 상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 추출 방법, 추출 프로그램, 추출 장치, 및 추출 시스템이 제안된다.
본 발명의 일측면에 의하면, 파일수 증대에 따른 검색 처리 시간의 증대를 억제할 수 있다는 효과를 나타낸다.
도 1은 본 실시형태에 관련된 압축 부호 맵의 분산화를 도시한 설명도이다.
도 2는 세그먼트군을 기억한 서버를 도시한 설명도이다.
도 3은 대상 파일이 추가된 경우의 압축 부호 맵의 추가예를 도시한 설명도이다.
도 4는 출현 맵의 계층화를 도시한 설명도이다.
도 5는 삭제 맵의 계층화를 도시한 설명도이다.
도 6은 계층화된 세그먼트군의 상세를 도시한 설명도이다.
도 7은 도 6에 도시한 계층 구조 세그먼트군을 실장한 컴퓨터 시스템의 구성예를 도시한 설명도이다.
도 8은 계층 구조 세그먼트군을 이용한 압축 파일의 축약예를 도시한 설명도이다.
도 9는 실시형태에 관련된 컴퓨터의 하드웨어 구성예를 도시한 블럭도이다.
도 10은 본 실시형태에 관련된 시스템 구성예를 도시한 설명도이다.
도 11은 본 실시형태에 관련된 컴퓨터 또는 컴퓨터 시스템의 기능적 구성예 1을 도시한 블럭도이다.
도 12는 도 11에 도시한 컴퓨터의 집계부∼제2 압축부까지의 처리의 흐름을 도시한 설명도이다.
도 13은 집계부에 의한 집계 및 작성부에 의한 압축 부호 맵(Ms)의 작성예를 도시한 설명도이다.
도 14는 (1) 출현 횟수 집계의 상세를 도시한 설명도이다.
도 15는 도 13의 (2) 압축 부호 길이 산출의 상세(N=11)를 도시한 설명도이다.
도 16은 도 13의 (3) 리프수 특정∼(5) 리프의 구조체 생성의 상세(N=11)를 도시한 설명도이다.
도 17은 문자 정보마다의 보정 결과를 도시한 설명도이다.
도 18은 도 13의 (6) 리프에 대한 포인터 생성의 상세(N=11)를 도시한 설명도이다.
도 19는 도 13의 (7) 2N 분지(分枝) 무절점 허프만 트리(H)의 구축의 상세(N=11)를 도시한 설명도이다.
도 20은 리프의 구조체를 도시한 설명도이다.
도 21은 특정 단일 문자의 구조체를 도시한 설명도이다.
도 22는 분할 문자 코드의 구조체를 도시한 설명도이다.
도 23은 기초 단어의 구조체를 도시한 설명도이다.
도 24는 압축 부호 맵의 생성예를 도시한 설명도이다.
도 25는 작성부에 의한 압축 부호 맵 작성 처리 순서예를 도시한 플로우차트이다.
도 26은 도 25에 도시한 집계 처리(단계 S2501)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 27은 도 26에 도시한 대상 파일의 집계 처리(단계 S2603)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 28은 문자 출현 빈도 집계 테이블을 도시한 설명도이다.
도 29는 도 27에 도시한 기초 단어 집계 처리(단계 S2702)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 30은 기초 단어 출현 빈도 집계 테이블을 도시한 설명도이다.
도 31은 도 29에 도시한 최장 일치 검색 처리(단계 S2901)의 상세한 처리 순서를 도시한 플로우차트이다.
도 32는 도 25에 도시한 맵 할당수 결정 처리(단계 S2502)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 33은 도 25에 도시한 재집계 처리(단계 S2503)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 34는 대상 파일의 재집계 처리(단계 S3303)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 35는 상위 분할 문자 코드 출현 빈도 집계 테이블을 도시한 설명도이다.
도 36은 하위 분할 문자 코드 출현 빈도 집계 테이블을 도시한 설명도이다.
도 37은 도 34에서 도시한 2그램 문자열 특정 처리(단계 S3406)의 상세한 처리 순서를 도시한 플로우차트이다.
도 38은 2그램 문자열 출현 빈도 집계 테이블을 도시한 설명도이다.
도 39는 도 25에 도시한 허프만 트리 생성 처리(단계 S2504)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 40은 도 39에 도시한 브랜치수 특정 처리(단계 S3904)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 41은 도 39에 도시한 구축 처리(단계 S3905)의 상세한 처리 순서를 도시한 플로우차트이다.
도 42는 도 41에 도시한 리프에 대한 포인터 생성 처리(단계 S4103)의 상세한 처리 순서를 도시한 플로우차트이다.
도 43은 도 25에 도시한 맵 작성 처리(단계 S2505)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 44는 도 43에 도시한 대상 파일의 맵 작성 처리(단계 S4303)의 상세한 처리 순서를 도시한 플로우차트이다.
도 45는 도 44에서 도시한 기초 단어 출현 맵 작성 처리(단계 S4402)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 46은 도 44에서 도시한 특정 단일 문자 출현 맵 작성 처리(단계 S4403)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 47은 도 46에서 도시한 분할 문자 코드 출현 맵 작성 처리(단계 S4603)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 48은 도 44에 도시한 2그램 문자열 맵 작성 처리(단계 S4404)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 49는 2그램 문자열 출현 맵 생성 처리(단계 S4803)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 50은 2N 분지 무절점 허프만 트리(H)를 이용한 압축 처리의 구체예를 도시한 설명도이다.
도 51은 제1 압축부에 의한 2N 분지 무절점 허프만 트리(H)를 이용한 대상 파일군의 압축 처리 순서예를 도시한 플로우차트이다.
도 52는 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제1 플로우차트이다.
도 53은 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제2 플로우차트이다.
도 54는 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제3 플로우차트이다.
도 55는 출현율과 출현율 영역의 관계를 도시한 설명도이다.
도 56은 출현율 영역별의 압축 패턴을 갖는 압축 패턴 테이블을 도시한 설명도이다.
도 57은 B 영역 및 B' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 58은 C 영역 및 C' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 59는 D 영역 및 D' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 60은 E 영역 및 E' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 61은 압축 부호 맵 압축 처리 순서를 도시한 플로우차트이다.
도 62는 본 실시형태에 관련된 컴퓨터 또는 컴퓨터 시스템의 기능적 구성예 2를 도시한 블럭도이다.
도 63은 파일 신장예를 도시한 설명도이다.
도 64는 도 63에서의 신장 처리의 구체예를 도시한 제1 설명도이다.
도 65는 도 63에서의 신장 처리의 구체예를 도시한 제2 설명도이다.
도 66은 파일 추가 처리의 구체예를 도시한 설명도이다.
도 67은 세그먼트 추가 처리의 상세한 처리 순서를 도시한 플로우차트이다.
도 68은 도 67에 도시한 추가 파일에 의한 맵 갱신 처리(단계 S6709)의 상세한 처리 순서를 도시한 플로우차트(전반)이다.
도 69는 도 67에 도시한 추가 파일에 의한 맵 갱신 처리(단계 S6709)의 상세한 처리 순서를 도시한 플로우차트(후반)이다.
도 70은 세그먼트 계층화 처리의 상세한 처리 순서를 도시한 플로우차트이다.
도 71은 도 70에 도시한 선택 출현 맵 집약 처리(단계 S7004)의 상세한 처리 순서를 도시한 플로우차트이다.
도 72는 도 70에 도시한 삭제 맵 집약 처리(단계 S7005)의 상세한 처리 순서를 도시한 플로우차트이다.
도 73은 본 실시형태에 관련된 검색 처리 순서를 도시한 플로우차트이다.
도 74는 도 73에 도시한 포인터 특정 처리(단계 S7302)의 상세한 처리 순서를 도시한 제1 플로우차트이다.
도 75는 도 73에 도시한 포인터 특정 처리(단계 S7302)의 상세한 처리 순서를 도시한 제2 플로우차트이다.
도 76은 도 73에 도시한 파일 축약 처리(단계 S7303)의 상세한 처리 순서를 도시한 플로우차트이다.
도 77은 도 73에 도시한 2N 분지 무절점 허프만 트리(H)를 이용한 신장 처리(단계 S7304)의 상세한 처리 순서예를 도시한 제1 플로우차트이다.
도 78은 도 73에 도시한 2N 분지 무절점 허프만 트리(H)를 이용한 신장 처리(단계 S7304)의 상세한 처리 순서예를 도시한 제2 플로우차트이다.
도 2는 세그먼트군을 기억한 서버를 도시한 설명도이다.
도 3은 대상 파일이 추가된 경우의 압축 부호 맵의 추가예를 도시한 설명도이다.
도 4는 출현 맵의 계층화를 도시한 설명도이다.
도 5는 삭제 맵의 계층화를 도시한 설명도이다.
도 6은 계층화된 세그먼트군의 상세를 도시한 설명도이다.
도 7은 도 6에 도시한 계층 구조 세그먼트군을 실장한 컴퓨터 시스템의 구성예를 도시한 설명도이다.
도 8은 계층 구조 세그먼트군을 이용한 압축 파일의 축약예를 도시한 설명도이다.
도 9는 실시형태에 관련된 컴퓨터의 하드웨어 구성예를 도시한 블럭도이다.
도 10은 본 실시형태에 관련된 시스템 구성예를 도시한 설명도이다.
도 11은 본 실시형태에 관련된 컴퓨터 또는 컴퓨터 시스템의 기능적 구성예 1을 도시한 블럭도이다.
도 12는 도 11에 도시한 컴퓨터의 집계부∼제2 압축부까지의 처리의 흐름을 도시한 설명도이다.
도 13은 집계부에 의한 집계 및 작성부에 의한 압축 부호 맵(Ms)의 작성예를 도시한 설명도이다.
도 14는 (1) 출현 횟수 집계의 상세를 도시한 설명도이다.
도 15는 도 13의 (2) 압축 부호 길이 산출의 상세(N=11)를 도시한 설명도이다.
도 16은 도 13의 (3) 리프수 특정∼(5) 리프의 구조체 생성의 상세(N=11)를 도시한 설명도이다.
도 17은 문자 정보마다의 보정 결과를 도시한 설명도이다.
도 18은 도 13의 (6) 리프에 대한 포인터 생성의 상세(N=11)를 도시한 설명도이다.
도 19는 도 13의 (7) 2N 분지(分枝) 무절점 허프만 트리(H)의 구축의 상세(N=11)를 도시한 설명도이다.
도 20은 리프의 구조체를 도시한 설명도이다.
도 21은 특정 단일 문자의 구조체를 도시한 설명도이다.
도 22는 분할 문자 코드의 구조체를 도시한 설명도이다.
도 23은 기초 단어의 구조체를 도시한 설명도이다.
도 24는 압축 부호 맵의 생성예를 도시한 설명도이다.
도 25는 작성부에 의한 압축 부호 맵 작성 처리 순서예를 도시한 플로우차트이다.
도 26은 도 25에 도시한 집계 처리(단계 S2501)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 27은 도 26에 도시한 대상 파일의 집계 처리(단계 S2603)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 28은 문자 출현 빈도 집계 테이블을 도시한 설명도이다.
도 29는 도 27에 도시한 기초 단어 집계 처리(단계 S2702)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 30은 기초 단어 출현 빈도 집계 테이블을 도시한 설명도이다.
도 31은 도 29에 도시한 최장 일치 검색 처리(단계 S2901)의 상세한 처리 순서를 도시한 플로우차트이다.
도 32는 도 25에 도시한 맵 할당수 결정 처리(단계 S2502)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 33은 도 25에 도시한 재집계 처리(단계 S2503)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 34는 대상 파일의 재집계 처리(단계 S3303)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 35는 상위 분할 문자 코드 출현 빈도 집계 테이블을 도시한 설명도이다.
도 36은 하위 분할 문자 코드 출현 빈도 집계 테이블을 도시한 설명도이다.
도 37은 도 34에서 도시한 2그램 문자열 특정 처리(단계 S3406)의 상세한 처리 순서를 도시한 플로우차트이다.
도 38은 2그램 문자열 출현 빈도 집계 테이블을 도시한 설명도이다.
도 39는 도 25에 도시한 허프만 트리 생성 처리(단계 S2504)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 40은 도 39에 도시한 브랜치수 특정 처리(단계 S3904)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 41은 도 39에 도시한 구축 처리(단계 S3905)의 상세한 처리 순서를 도시한 플로우차트이다.
도 42는 도 41에 도시한 리프에 대한 포인터 생성 처리(단계 S4103)의 상세한 처리 순서를 도시한 플로우차트이다.
도 43은 도 25에 도시한 맵 작성 처리(단계 S2505)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 44는 도 43에 도시한 대상 파일의 맵 작성 처리(단계 S4303)의 상세한 처리 순서를 도시한 플로우차트이다.
도 45는 도 44에서 도시한 기초 단어 출현 맵 작성 처리(단계 S4402)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 46은 도 44에서 도시한 특정 단일 문자 출현 맵 작성 처리(단계 S4403)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 47은 도 46에서 도시한 분할 문자 코드 출현 맵 작성 처리(단계 S4603)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 48은 도 44에 도시한 2그램 문자열 맵 작성 처리(단계 S4404)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 49는 2그램 문자열 출현 맵 생성 처리(단계 S4803)의 상세한 처리 순서예를 도시한 플로우차트이다.
도 50은 2N 분지 무절점 허프만 트리(H)를 이용한 압축 처리의 구체예를 도시한 설명도이다.
도 51은 제1 압축부에 의한 2N 분지 무절점 허프만 트리(H)를 이용한 대상 파일군의 압축 처리 순서예를 도시한 플로우차트이다.
도 52는 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제1 플로우차트이다.
도 53은 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제2 플로우차트이다.
도 54는 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제3 플로우차트이다.
도 55는 출현율과 출현율 영역의 관계를 도시한 설명도이다.
도 56은 출현율 영역별의 압축 패턴을 갖는 압축 패턴 테이블을 도시한 설명도이다.
도 57은 B 영역 및 B' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 58은 C 영역 및 C' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 59는 D 영역 및 D' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 60은 E 영역 및 E' 영역의 경우의 압축 패턴을 도시한 설명도이다.
도 61은 압축 부호 맵 압축 처리 순서를 도시한 플로우차트이다.
도 62는 본 실시형태에 관련된 컴퓨터 또는 컴퓨터 시스템의 기능적 구성예 2를 도시한 블럭도이다.
도 63은 파일 신장예를 도시한 설명도이다.
도 64는 도 63에서의 신장 처리의 구체예를 도시한 제1 설명도이다.
도 65는 도 63에서의 신장 처리의 구체예를 도시한 제2 설명도이다.
도 66은 파일 추가 처리의 구체예를 도시한 설명도이다.
도 67은 세그먼트 추가 처리의 상세한 처리 순서를 도시한 플로우차트이다.
도 68은 도 67에 도시한 추가 파일에 의한 맵 갱신 처리(단계 S6709)의 상세한 처리 순서를 도시한 플로우차트(전반)이다.
도 69는 도 67에 도시한 추가 파일에 의한 맵 갱신 처리(단계 S6709)의 상세한 처리 순서를 도시한 플로우차트(후반)이다.
도 70은 세그먼트 계층화 처리의 상세한 처리 순서를 도시한 플로우차트이다.
도 71은 도 70에 도시한 선택 출현 맵 집약 처리(단계 S7004)의 상세한 처리 순서를 도시한 플로우차트이다.
도 72는 도 70에 도시한 삭제 맵 집약 처리(단계 S7005)의 상세한 처리 순서를 도시한 플로우차트이다.
도 73은 본 실시형태에 관련된 검색 처리 순서를 도시한 플로우차트이다.
도 74는 도 73에 도시한 포인터 특정 처리(단계 S7302)의 상세한 처리 순서를 도시한 제1 플로우차트이다.
도 75는 도 73에 도시한 포인터 특정 처리(단계 S7302)의 상세한 처리 순서를 도시한 제2 플로우차트이다.
도 76은 도 73에 도시한 파일 축약 처리(단계 S7303)의 상세한 처리 순서를 도시한 플로우차트이다.
도 77은 도 73에 도시한 2N 분지 무절점 허프만 트리(H)를 이용한 신장 처리(단계 S7304)의 상세한 처리 순서예를 도시한 제1 플로우차트이다.
도 78은 도 73에 도시한 2N 분지 무절점 허프만 트리(H)를 이용한 신장 처리(단계 S7304)의 상세한 처리 순서예를 도시한 제2 플로우차트이다.
이하에 첨부 도면을 참조하여, 본 발명의 실시형태를 상세히 설명한다. 한편, 본 명세서에 있어서 「문자 정보」란, 텍스트 데이터를 구성하는, 단일 문자, 기초 단어, 분할 문자 코드 등이다. 대상 파일군은, 예컨대, 문서 파일, Web 페이지, 전자 메일 등의 전자 데이터이고, 예컨대, 텍스트 형식, HTML(Hyper Text Markup Language) 형식, XML(Extensible Markup Language) 형식의 전자 데이터이다.
또한 「단일 문자」란, 하나의 문자 코드로 표현되는 문자이다. 단일 문자의 문자 코드 길이는, 문자 코드종에 따라 상이하다.
예컨대, UTF(Unicode Transformation Format) 16의 경우는 16비트 코드, ASCII(American Standard Code for Information Interchange) 코드의 경우는 8비트 코드, 시프트 JIS(Japanese Industrial Standard) 코드의 경우는 8비트 코드이다. 시프트 JIS 코드로 일본어 문자를 표현하는 경우에는, 2개의 8비트 코드를 조합시키게 된다.
또한 「기초 단어」란, 초·중학교에서 학습하는 기본적인 단어나, 특정한 문자열로 표현되는 예약어를 말한다. 「This is a···.」의 영문을 예로 하면 「This」, 「is」, 「a」 등의 단어이고, 천어 레벨, 2천어 레벨, 수천어 레벨로 분류되고, 영일 사전에는, 「***」, 「**」, 「*」 마크가 부여되어 있다. 또한, 예약어란, 미리 정해진 문자열이고, 예컨대, HTML의 태그(예컨대, <br>)를 들 수 있다.
또한 「분할 문자 코드」란, 단일 문자를, 상위 코드와 하위 코드로 분할한 각각의 코드이다. 본 실시형태에서는, 후술하는 바와 같이, 단일 문자를, 상위 코드와 하위 코드로 분할하는 경우가 있다. 예컨대, 「芝」라는 단일 문자의 문자 코드는, UTF16의 경우, 「9D82」로 표현되는데, 상위 분할 문자 코드 「0x9D」와 하위 분할 문자 코드 「0x82」로 분할된다.
또한 「그램」이란, 문자 단위이다. 예컨대, 단일 문자에 관해서는, 그 1문자분이 1그램이 된다. 분할 문자 코드에 관해서는, 분할 문자 코드 단독으로 1그램이 된다. 따라서, 단일 문자 「芝」는 2그램이 된다. 또, 본 실시형태에서는, 문자 코드로서 UTF16을 예로 들어 설명한다.
또한 본 명세서에서는, 「비트를 ON」으로 한 경우에는, 그 비트의 값을 “1”로 하고, 「비트를 OFF」로 한 경우에는, 그 비트의 값을 “0”으로 하여 설명한다. 또, 「비트를 ON」으로 한 경우에는, 그 비트의 값을 “0”으로 하고, 「비트를 OFF」로 한 경우에는, 그 비트의 값을 “1”로 해도 좋다.
「출현 맵」이란, 전문(全文) 검색을 위한 인덱스로, 문자 정보를 지정하는 포인터와 문자 정보의 각 대상 파일에서의 존재 여부를 나타내는 비트열을 연결한 비트열이다. 검색 처리시에는, 이 비트열을, 비트의 ON·OFF에 따라 검색 대상의 문자 정보를 포함하는지 여부를 나타내는 인덱스로서 이용할 수 있다. 문자 정보를 지정하는 포인터로는, 예컨대, 문자 정보의 압축 부호가 채용된다. 문자 정보를 지정하는 포인터는, 예컨대, 문자 정보 자체를 이용해도 좋다. 「압축 부호 맵」이란, 압축 부호의 포인터로 표시되는 문자 정보마다의 출현 맵을 통합한 비트 맵이다. 2그램 문자열의 압축 부호 맵에 관해서는, 제1 그램의 압축 부호와 제2 그램의 압축 부호를 조합시킨 압축 부호열이 된다.
「2그램 문자열」이란, 1그램의 문자 코드가 연접하는 문자열이다. 예컨대, 「人形芝居」라는 문자열에는, 2연접 문자 「人形」, 「形芝」, 「芝居」가 포함되어 있다. 2연접 문자 「人形」의 「人」, 「形」은 각각 분할되지 않는 단일 문자이기 때문에, 2연접 문자 「人形」은 그대로 2그램 문자열이 된다.
「芝」는 전술한 바와 같이 분할되기 때문에, 단일 문자 「形」과 「芝」의 상위 분할 문자 코드 「0x9D」의 조합이 2그램 문자열이 된다. 또한, 상위 분할 문자 코드 「0x9D」와 하위 분할 문자 코드 「0x82」의 조합도 2그램 문자열이 된다. 또한, 하위 분할 문자 코드 「0x82」와 분할되지 않는 단일 문자 「居」의 조합도 2그램 문자열이 된다.
기초 단어에 의해, 대상 파일군이 압축되어 있는 경우, 압축 부호 맵의 생성시나 검색시에 1패스로 액세스하는 것이 가능하다. 또, 대상 파일군을 압축하지 않는 경우에는, 문자 정보를 지정하는 포인터로는, 문자 정보의 문자 코드를 그대로 채용해도 좋다.
또한 「삭제 맵」이란, 대상 파일의 존재 또는 삭제를 비트열로 나타낸 인덱스이다. 또, 삭제 맵에 있어서 ON(=1)에 해당하는 비트에 대응하는 파일 번호의 대상 파일은, 존재하고 있는 것을 의미한다. 한편, OFF(=0)가 되면, 상기 대상 파일은 삭제된 것을 의미한다. 이에 따라, 압축 부호 맵을 이용하여 검색을 행하는 경우에, 대상 파일 자체를 삭제하지 않아도, 대상 파일에 대응하는 삭제 맵을 OFF로 함으로써, 대상 파일을 검색 대상으로부터 제외시킬 수 있다.
도 1은 본 실시형태에 관련된 압축 부호 맵의 분산화를 도시한 설명도이다. 압축 부호 맵은, 정해진 파일수 n 단위(예컨대, n=256)로 분할되어 있다. 분할된 각각을 세그먼트라고 한다.
세그먼트 sg0(1)은, 압축 파일 f1∼fn까지의 압축 부호 맵을 갖는 세그먼트이고, 세그먼트 sg0(2)는, 압축 파일 f(n+1)∼f(2n)까지의 압축 부호 맵을 갖는 세그먼트이고, 세그먼트 sg0(3)은, 압축 파일 f(2n+1)∼f(3n)까지의 압축 부호 맵을 갖는 세그먼트이다.
세그먼트는 초기 상태에서는, 세그먼트 sg0(1)만이 존재하고, 파일 추가에 의해 파일수가 n을 초과하면, 세그먼트 sg0(2)가 생성되고, 파일수가 2n을 초과하면, 세그먼트 sg0(3)이 생성된다. 이와 같이, 파일수 증가에 의해, 최후미의 세그먼트 sg0(K)는, 압축 파일 f((K-1)n+1)∼f(Kn)까지의 압축 부호 맵을 갖는 세그먼트가 된다(단, K는 현재의 세그먼트수를 나타냄. K는 1 이상의 정수임).
각 세그먼트는, 관리 영역 A1∼AK(관리 영역군(As))를 갖는다. 관리 영역 A1∼AK에는, 선행 세그먼트에 대한 포인터, 후속 세그먼트에 대한 포인터, 자신의 세그먼트 내의 압축 부호 맵을 구성하는 각 출현 맵에 대한 포인터, 자신의 세그먼트 내의 삭제 맵에 대한 포인터, 자신의 세그먼트 내의 각 압축 파일에 대한 포인터가 저장되어 있다.
선두의 세그먼트 sg0(1)에 관해서는, 선행 세그먼트가 없기 때문에, 선행 세그먼트에 대한 포인터로서, 예컨대, 「00000000h」가 저장된다. 어드레스 「00000000h」는, 선두의 세그먼트 sg0(1)을 지정하는 논리 어드레스이다. 마찬가지로, 최후미의 세그먼트 sg0(K)에 관해서는, 후속 세그먼트가 없기 때문에, 후속 세그먼트에 대한 포인터로서, 예컨대, 「0FFFFFFFh」가 저장된다. 바꿔 말하면, 후속 세그먼트에 대한 포인터로서 「0FFFFFFFh」가 저장되어 있는 세그먼트가 최후미의 세그먼트이다.
K=1의 경우, 즉, 세그먼트 sg0(1)밖에 존재하지 않는 경우, 세그먼트 sg0(1)의 선행 세그먼트에 대한 포인터는 「00000000h」이고, 후속 세그먼트에 대한 포인터는 「0FFFFFFFh」이다. 파일 추가에 의해 K=2가 되면, 세그먼트 sg0(1)의 후속 세그먼트에 대한 포인터는, 「0FFFFFFFh」로부터 「세그먼트 sg0(2)에 대한 포인터」로 변경된다.
또한, 세그먼트 sg0(2)의 선행 세그먼트에 대한 포인터에는, 「세그먼트 sg0(1)에 대한 포인터(세그먼트 sg0(1)의 어드레스「00000000h」)」가 저장된다. 또한, 세그먼트 sg0(2)의 후속 세그먼트에 대한 포인터에는, 「0FFFFFFFh」가 저장된다. 이와 같이, 세그먼트마다 선행 세그먼트 및 후속 세그먼트와의 관련을 지어 둠으로써, 세그먼트 단위로의 검색을 연계하여 행할 수 있다.
각 세그먼트의 압축 부호 맵 M1∼MK(압축 부호 맵(Ms))는, 문자 정보가 동일한 출현 맵을 갖지만, 담당하는 파일 번호가 상이하다. 각 세그먼트의 압축 부호 맵 M1∼MK에서 담당하는 파일 번호는, 자신의 세그먼트가 유지하는 압축 파일의 파일 번호가 된다. 예컨대, 세그먼트 sg0(K)의 압축 부호 맵 MK에서는, 각 문자 정보의 출현 맵에 관해 파일 번호 (K-1)n∼Kn의 존재 여부를 나타내는 비트열을 갖게 된다.
각 세그먼트의 삭제 맵 D1∼DK(삭제 맵(Ds))에 관해서도 압축 부호 맵군(Ms)과 마찬가지로, 담당하는 파일 번호가 상이하다. 각 삭제 맵 D1∼DK에서 담당하는 파일 번호는, 자신의 세그먼트가 유지하는 압축 파일의 파일 번호가 된다. 예컨대, 세그먼트 sg0(K)의 삭제 맵 DK에서는, 각 문자 정보의 출현 맵에 관해 파일 번호 (K-1)n∼Kn에 관한 존재 또는 삭제를 나타내는 비트열을 갖게 된다.
도 2는 세그먼트군을 기억한 서버를 도시한 설명도이다. 서버(200)는, 데이터베이스(201)를 갖는다. 데이터베이스(201)에는, 아카이브 파일(202)이 저장되어 있다. 아카이브 파일(202)은, 배치부(211)와, 추가부(212)를 갖는다. 배치부(211)에는, c개의 세그먼트 sg0(1)∼sg0(c)가 디폴트로 저장되어 있다. 추가부(212)에는, 추가된 세그먼트 sg0(c+1)∼sg0(K)가 저장되어 있다. 또, 추가부(212)에 빈 영역이 없어진 경우에는, 서버(200)와 네트워크를 통해 통신 가능한 다른 서버에 저장시키는 것으로 한다.
도 3은 대상 파일이 추가된 경우의 압축 부호 맵의 추가예를 도시한 설명도이다. (A)에서는, 세그먼트 sg0(1), sg0(2)가 등록 완료되었고, 문자 정보 LT1∼LTz의 압축 부호 P(LT1)∼P(LTz)에 관한 출현 맵에 있어서, 파일 번호 1∼2n까지의 인덱스 정보가 저장되어 있다.
(B)는 (A)의 상태로부터 출현 맵군을 압축한 상태를 도시하고 있다. 압축 수법에 관해서는 후술하겠지만, 압축하는 타이밍으로는, 예컨대, 1세그먼트의 파일수 n의 배수가 된 경우에 압축하는 것으로 한다. 이 경우, 파일수가 n의 배수 2n이기 때문에, 출현 맵마다 인덱스 정보인 비트열을 압축한다. 또한, 문자 정보 LT1∼LTz의 존재 여부를 확인하는 경우에는, 신장되는 것으로 한다. 신장 수법에 관해서도 후술한다. 이와 같이, 통상은 압축하여 보존해 두고, 필요할 때에만 신장함으로써, 메모리 절감화를 도모할 수 있다.
(C)는 (B)의 상태로부터 새로운 압축 파일 f(2n+1)이 추가된 상태를 도시하고 있다. (B)에서의 최후미의 세그먼트인 세그먼트 sg0(2)에서는 압축 파일 f(2n+1)을 저장할 수 없기 때문에, 새롭게 세그먼트 sg0(3)이 설정되고, 압축 파일 f(2n+1)이 보존되게 된다. 또한, 세그먼트 sg0(3)의 압축 부호 맵에는, 압축 부호마다 압축 파일 f(2n+1)에 관한 비트가 설정된다. (C)의 예에서는, 문자 정보 LT1, LT2에 관해서는 「1」, LTz에 관해서는 「0」이 설정되어 있다.
(D)는 (C)의 상태로부터 세그먼트 sg0(3)에 있어서 n개의 압축 파일 f(2n+1)∼f(3n)이 추가된 상태를 도시하고 있다.
(E)는 (D)의 상태에 있어서 세그먼트 sg0(3)에서 n개의 압축 파일 f(2n+1)∼f(3n)이 추가되었기 때문에, 압축 부호마다 세그먼트 sg0(1)∼sg0(3)의 인덱스 정보를 압축한 상태를 도시하고 있다. 이와 같이, 세그먼트 단위로 압축 파일이 n개 쌓이면, 출현 맵의 압축이 행해진다.
도 4는 출현 맵의 계층화를 도시한 설명도이다. 세그먼트수가 증가하면, 압축 부호마다 인덱스 정보가 되는 비트열이 장황해진다. 장황해진 경우, 압축 부호마다, 즉, 문자 정보마다, 전파일수에 관해 존재 여부를 나타내는 비트의 ON/OFF를 확인할 필요가 있는데, 존재하지 않는 개소에 관해 확인 작업을 하는 것은 낭비이고, 검색 시간 증대의 원인이 된다. 그래서, 압축 부호마다, 즉, 문자 정보마다, 세그먼트가 m+1개 생성되면, m개 단위로 인덱스 정보를 집약하는 것으로 한다.
도 4에서는, 예로서 문자 정보 LTx의 압축 부호 P(LTx)의 인덱스 정보를 상위 계층에 집약하는 경우를 예로 들어 설명한다. 한편, 「sgX(Y)」의 X는, 계층 번호를 나타내고, Y는 세그먼트 번호를 나타내고 있다. 따라서, sgX(Y)의 경우에는, 제X 계층의 Y번째의 세그먼트가 된다. 또한, 지금까지 설명해온 세그먼트 sg0(1)∼sg0(K)는, 제0 계층의 세그먼트가 된다.
우선, 기본 계층인 제0 계층으로부터 상위 계층인 제1 계층으로의 집약예에 관해 설명한다. 집약의 룰로는, 대상 계층의 세그먼트의 인덱스 정보인 비트열이 모두 0, 즉, 문자 정보 LTx가 그 세그먼트 내의 대상 파일군에 존재하지 않는 경우, 상위 계층의 인덱스로서 「0」으로 집약한다. 한편, 대상 계층의 세그먼트의 인덱스 정보인 비트열 1개라도 「1」이 있는 경우, 즉, 문자 정보 LTx가 그 세그먼트 내의 대상 파일군의 적어도 어느 하나에 존재하는 경우, 상위 계층의 인덱스로서 「1」로 집약한다.
예컨대, 세그먼트 sg0(1)에 관해서는, 「1」이 존재하기 때문에, 상위 계층의 세그먼트 sg1(1)에는, 「1」이 설정된다. 마찬가지로, 세그먼트 sg0(m)에 관해서는, 모두 0이기 때문에, 상위 계층의 세그먼트 sg1(1)에는, 「0」이 설정된다. 이 상위 계층의 세그먼트 sg1(1)의 비트 위치는, 하위의 세그먼트 sg0(1)∼sg0(m)의 위치를 나타내고 있다. 이와 같이, 상위 계층의 세그먼트의 비트의 값에 의해 하위 세그먼트의 인덱스 정보의 상태를 특정할 수 있다.
또한, 이러한 집약은 제0 계층과 제1 계층 사이뿐만 아니라, 최상위 계층의 세그먼트수가 m개가 되면, 새롭게 상위 계층의 세그먼트가 생성되게 된다. 예컨대, 제1 계층에서 세그먼트가 세그먼트 sg1(m)까지 완성되면, 전술한 바와 같이 제2 계층의 세그먼트 sg2(1)이 생성되게 된다. 또, 도 4에서는, 제2 계층까지의 예를 나타냈지만, 추가되는 압축 파일수가 증가함에 따라, 제3 계층 이상의 계층에 집약되게 된다.
도 5는 삭제 맵의 계층화를 도시한 설명도이다. 삭제 맵에 관해서도, 도 4와 마찬가지로 세그먼트 단위로 상위 계층에 집약되게 된다.
도 6은 계층화된 세그먼트군의 상세를 도시한 설명도이다. 도 6의 계층 구조 세그먼트군에서는, 제0 계층에 도 1에 도시한 바와 같은 m2개의 세그먼트 sg0(1)∼sg0(m2)이 생성되어 있다. 또한, 상위 계층에 관해서도 동일한 데이터 구조의 세그먼트 sg1(1)∼sg1(m)이 생성되어 있다. 예컨대, 제1 계층의 세그먼트 sg1(1)∼sg1(m)에서는, 제0 계층에서 집약된 출현 맵(집약 출현 맵)이 압축 부호마다 저장되어 있다. 마찬가지로, 제0 계층에서 집약된 삭제 맵(집약 삭제 맵)이 압축 부호마다 저장되어 있다.
또한, 제0 계층과 마찬가지로, 각각의 관리 영역에, 선행 세그먼트에 대한 포인터나 후속 세그먼트에 대한 포인터가 설정되어 있다. 또한, 자신의 세그먼트 내의 집약 출현 맵에 대한 포인터나 집약 삭제 맵에 대한 포인터도 저장된다. 또한, 관리 영역에는, 하위 계층의 세그먼트(하위 세그먼트)에 대한 포인터가 각각 저장되어 있다. 예컨대, 세그먼트 sg1(1)에서는, 하위 계층의 세그먼트 sg0(1)에 대한 포인터∼세그먼트 sg0(m)에 대한 포인터가 저장되어 있어, 세그먼트 sg0(1)∼세그먼트 sg0(m)을 지정할 수 있다. 또, 제1 계층 이상의 세그먼트에는, 압축 파일은 저장되지 않는다.
도 7은 도 6에 도시한 계층 구조 세그먼트군(SG)을 실장한 컴퓨터 시스템의 구성예를 도시한 설명도이다. 도 7의 계층 구조 세그먼트군(SG)에서는, m개의 세그먼트를 1 아카이브 파일로 한다. 또, 「AX(Y)」는 아카이브 파일의 부호로, X는 계층 번호를 나타내고, Y는 아카이브 번호를 나타내고 있다. 따라서, AX(Y)의 경우에는, 제X 계층의 Y번째의 아카이브 파일이 된다. 예컨대, 아카이브 파일 A0(1)은, 제0 계층의 세그먼트 sg0(1)∼sg0(m)의 집합이다.
도 7의 예에서는, 마스터 서버(MS)는, 제1 계층 이상의 아카이브 파일을 저장하고 있다. 또한, 슬레이브 서버(S1, S2, …, S(2m+1), …)는, 마스터 서버(MS)에 의해 할당된 1개의 아카이브 파일을 저장하고 있다. 도 7의 아카이브 파일의 할당은 일례로, 마스터 서버(MS)가 제1 계층 이상의 아카이브 파일을 전부 담당할 필요는 없고, 다른 서버에 분산시켜도 좋다. 또한, 슬레이브 서버(S1, S2, …, S(2m+1), …)에 관해서도 1 아카이브 파일뿐만 아니라, 복수의 아카이브 파일을 담당하는 것으로 해도 좋다.
도 8은 계층 구조 세그먼트군(SG)을 이용한 압축 파일의 축약예를 도시한 설명도이다. 도 8에서는, 설명을 단순화하기 위해, 제0 계층의 세그먼트의 파일수 n을 n=4로 하고, m=4로 한다. 따라서, 제0 계층 세그먼트 sg0(1)∼sg0(16)까지 존재하게 되지만, 도시되어 있지 않은 세그먼트에 관해서는 설명을 생략한다. 또한, 도 8에서는, 최상위 계층을 제2 계층으로 하여 설명한다. 또한, 도 8에 있어서, 실선 화살표는 AND 결과에 따라 하위 계층의 세그먼트를 지정하고 있는 것을 나타내고, 점선 화살표는 실제로는 지정되지 않지만, 지정된 세그먼트와 대비하기 위해 도시하고 있다. 또한, 도 8에서는, 검색 문자열로서 「人形」이 입력된 경우를 나타낸다.
(A)에 있어서, 최상위 계층인 제2 계층의 세그먼트 sg2(1)에 관해, 문자 정보 「人」의 압축 부호 P(人)의 집약 출현 맵과, 문자 정보 「形」의 압축 부호 P(形)의 집약 출현 맵과, 집약 삭제 맵의 AND 연산을 행한다. AND 결과는 「1100」이 되고, 하위 계층인 제1 계층의 세그먼트 sg1(1), sg1(2)에, 문자 정보 「人」 및 「形」이 존재할 가능성이 있는 것을 알 수 있다.
또한, 하위 세그먼트 번호 3, 4에 관해서는 AND 결과가 「0」이다. 따라서, 세그먼트 sg1(3), sg1(4)의 각 AND 연산을 행할 필요도 없이, 세그먼트 sg1(3), sg1(4)의 각 AND 결과가 모두 0이 되는 것을 알 수 있다.
(B)에서는, 제2 계층의 AND 결과로부터 제1 계층의 세그먼트 sg1(1), sg1(2)가 지정되었기 때문에, 세그먼트 sg1(1), sg1(2)에 관해, (A)와 마찬가지로 AND 연산을 실행한다. 이에 따라, 세그먼트 sg1(1)로부터는 세그먼트 sg0(1)이 지정되고, 세그먼트 sg1(2)로부터는 세그먼트 sg0(5)가 지정되게 된다. 세그먼트 sg1(2)에 착안하면, 하위 세그먼트 번호 6∼8에 관해서는 AND 결과가 「0」이다. 따라서, 세그먼트 sg0(6)∼sg0(8)의 각 AND 연산을 행할 필요도 없이, 세그먼트 sg0(6)∼sg0(8)의 각 AND 결과가 모두 0이 되는 것을 알 수 있다.
(C)에서는, 제1 계층의 AND 결과로부터 제0 계층의 세그먼트 sg0(1), sg0(5)가 지정되었기 때문에, sg0(1), sg0(5)에 관해, (A), (B)와 마찬가지로 AND 연산을 실행한다. 이에 따라, 세그먼트 sg0(1)로부터는 파일 번호 3이 지정되고, 세그먼트 sg0(5)로부터는 파일 번호 19가 지정되게 된다. 따라서, 압축 파일 f3, f19에, 문자 정보 「人」 및 「形」의 양방이 존재하는 것을 알 수 있다.
<컴퓨터의 하드웨어 구성예>
도 9는 실시형태에 관련된 컴퓨터의 하드웨어 구성예를 도시한 블럭도이다. 도 9에 있어서, 컴퓨터는, CPU(Central Processing Unit)(901)와, ROM(Read Only Memory)(902)과, RAM(Random Access Memory)(903)과, 자기 디스크 드라이브(904)와, 자기 디스크(905)와, 광 디스크 드라이브(906)와, 광 디스크(907)와, 디스플레이(908)와, I/F(Interface)(909)와, 키보드(910)와, 마우스(911)와, 스캐너(912)와, 프린터(913)를 구비하고 있다. 또한, 각 구성부는 버스(900)에 의해 각각 접속되어 있다.
여기서 CPU(901)는, 컴퓨터의 전체의 제어를 담당한다. ROM(902)은, 부트 프로그램 등의 프로그램을 기억하고 있다. 또한, ROM(902)은, 압축 부호 맵(Ms)을 생성·관리하는 프로그램, 압축 부호 맵(Ms)을 이용하여 검색을 행하는 프로그램을 기억하고 있다. RAM(903)은, CPU(901)의 워크 에어리어로서 사용되고, CPU(901)는, ROM(902)에 기억된 프로그램을 RAM(903)에 독출하여 실행할 수 있다. 자기 디스크 드라이브(904)는, CPU(901)의 제어에 따라 자기 디스크(905)에 대한 데이터의 리드/라이트를 제어한다. 자기 디스크(905)는, 자기 디스크 드라이브(904)의 제어로 기록된 데이터를 기억한다.
광 디스크 드라이브(906)는, CPU(901)의 제어에 따라 광 디스크(907)에 대한 데이터의 리드/라이트를 제어한다. 광 디스크(907)는, 광 디스크 드라이브(906)의 제어로 기록된 데이터를 기억하거나, 광 디스크(907)에 기억된 데이터를 정보 처리 장치에 판독하게 하거나 한다.
디스플레이(908)는, 커서, 아이콘 혹은 툴 박스를 비롯하여, 문서, 화상, 기능 정보 등의 데이터를 표시한다. 이 디스플레이(908)는, 예컨대, CRT, TFT 액정 디스플레이, 플라즈마 디스플레이 등을 채용할 수 있다.
인터페이스(이하, 「I/F」라고 약칭함)(909)는, 통신 회선을 통해 LAN(Local Area Network), WAN(Wide Area Network), 인터넷 등의 네트워크(914)에 접속되고, 이 네트워크(914)를 통해 다른 장치에 접속된다. 그리고, I/F(909)는, 네트워크(914)와 내부의 인터페이스를 담당하고, 외부 장치로부터의 데이터의 입출력을 제어한다. I/F(909)에는, 예컨대 모뎀이나 LAN 어댑터 등을 채용할 수 있다.
키보드(910)는, 문자, 숫자, 각종 지시 등의 입력을 위한 키를 구비하고, 데이터의 입력을 행한다. 또한, 터치 패널식의 입력 패드나 텐키 등이어도 좋다. 마우스(911)는, 커서의 이동이나 범위 선택, 혹은 윈도우의 이동이나 사이즈의 변경 등을 행한다. 포인팅 디바이스로서 동일하게 기능을 구비하는 것이면, 트랙볼이나 조이스틱 등이어도 좋다.
스캐너(912)는, 화상을 광학적으로 판독하여, 컴퓨터 내에 화상 데이터를 삽입한다. 또, 스캐너(912)는, OCR(Optical Character Reader) 기능을 갖게 해도 좋다. 또한, 프린터(913)는, 화상 데이터나 문서 데이터를 인쇄한다. 프린터(913)에는, 예컨대, 레이저 프린터나 잉크젯 프린터를 채용할 수 있다.
또한 컴퓨터는, 전술한 각종 서버나 거치형의 퍼스널·컴퓨터 외에, 휴대 전화기, 스마트폰, 전자 서적 단말, 노트북 컴퓨터 등의 휴대형 단말이어도 좋다. 또한, 본 실시형태는, 복수의 컴퓨터에 따라 실시되어도 좋다.
도 10은 본 실시형태에 관련된 시스템 구성예를 도시한 설명도이다. 도 10에 있어서, 시스템은, 도 9에 도시한 각 하드웨어를 포함할 수 있는 컴퓨터(1001∼1003), 네트워크(1004), 스위치(1005), 무선 기지국(1007)을 포함한다. 정보 처리 장치(1003)에 포함되는 I/F는, 무선 통신 기능을 구비한다.
예컨대, 복수의 파일을 포함하는 콘텐츠에 관한 압축 부호 맵을 생성하는 처리를 컴퓨터(1001)에서 실행하여, 컴퓨터(1002, 1003)에 전달하고, 컴퓨터(1002, 1003)의 각각에서 전달된 콘텐츠에 관한 검색 처리를 실행해도 좋다.
또한, 복수의 파일을 포함하는 콘텐츠에 관한 압축 부호 맵을 생성하는 처리를 컴퓨터(1001)에서 실행하고, 컴퓨터(1002) 또는 컴퓨터(1003)로부터 콘텐츠에 관한 검색 의뢰를 컴퓨터(1001)가 접수하여, 검색 처리를 실행하고, 실행한 검색 처리의 결과를 컴퓨터(1002), 컴퓨터(1003)의 각각에 되돌려 보내도록 구성해도 좋다. 도 2와 마찬가지로, 컴퓨터(1001∼1003)의 각각은, 전술한 각종 서버나 거치형의 퍼스널·컴퓨터 외에, 휴대 전화기, 스마트폰, 전자 서적 단말, 노트북 컴퓨터 등의 휴대형 단말이어도 좋다.
<기능적 구성예 1>
도 11은 본 실시형태에 관련된 컴퓨터 또는 컴퓨터 시스템의 기능적 구성예 1을 도시한 블럭도이고, 도 12는 도 11에 도시한 컴퓨터 또는 컴퓨터 시스템의 집계부∼제2 압축부까지의 처리의 흐름을 도시한 설명도이다. 도 11에 있어서, 컴퓨터 또는 컴퓨터 시스템(이하, 「컴퓨터(1100)」)은, 집계부(1101)와, 제1 생성부(1102)와, 제1 압축부(1103)와, 작성부(1104)와, 제2 생성부(1105)와, 제2 압축부(1106)를 구비한다.
집계부(1101)∼제2 압축부(1106)는, 구체적으로는, 예컨대, 도 9에 도시한 ROM(902), RAM(903), 자기 디스크(905) 등의 기억 장치에 기억된 프로그램을 CPU(901)에 실행시킴으로써 그 기능을 추출 장치로서 실현한다. 또, 집계부(1101)∼제2 압축부(1106)는, 각각 실행 결과를 기억 장치에 기록하거나, 다른 부의 실행 결과를 독출하거나 하여, 각각 연산을 실행한다. 이하, 집계부(1101)∼제2 압축부(1106)에 관해 간단히 설명한다.
집계부(1101)는, 대상 파일군 내의 문자 정보의 출현 횟수를 집계한다. 구체적으로는, 예컨대, 집계부(1101)는, 도 12의 (A)에 도시한 바와 같이, 대상 파일군(Fs) 내의 문자 정보의 출현 횟수를 집계한다. 집계부(1101)에서는, 특정 단일 문자, 상위 분할 문자 코드, 하위 분할 문자 코드, 2그램 문자, 기초 단어별로 출현 횟수를 계수한다. 집계부(1101)의 상세한 처리 내용에 관해서는 후술한다.
제1 생성부(1102)는, 집계부(1101)의 집계 결과에 기초하여 2N 분지 무절점 허프만 트리(H)를 생성한다(도 12의 (B)). 2N 분지 무절점 허프만 트리(H)란, 루트로부터 분기되는 브랜치가 2N개 있고, 1 또는 복수개의 브랜치로 리프를 직접 포인트하는 허프만 트리이다. 절점(내부 절점)은 없다. 절점이 없이 직접 리프에 히트하기 때문에, 절점을 갖는 통상의 허프만 트리에 비해, 신장 속도의 고속화를 도모할 수 있다. 리프는, 해당하는 문자 정보와 그 압축 부호를 포함하는 구조체이다. 리프의 구조체라고도 부른다. 리프에 할당되는 브랜치수는, 할당처인 리프에 존재하는 압축 부호의 압축 부호 길이에 의존한다. 제1 생성부(1102)의 상세한 처리 내용에 관해서는 후술한다.
제1 압축부(1103)는, 2N 분지 무절점 허프만 트리(H)를 이용하여 대상 파일군(Fs)의 각 대상 파일을 압축하여 압축 파일군(fs)으로 한다(도 12의 (C)). 제1 압축부(1103)의 상세한 처리 내용에 관해서는 후술한다.
작성부(1104)는, 집계부(1101)의 집계 결과와 2N 분지 무절점 허프만 트리(H)에 있어서 문자 정보마다 할당된 압축 부호에 기초하여, 압축 부호 맵(Ms)을 작성한다. 작성부(1104)는, 압축 부호 맵(Ms)에 관해서도, 특정 단일 문자, 상위 분할 문자 코드, 하위 분할 문자 코드, 2그램 문자, 기초 단어별로 작성한다. 작성부(1104)는, 압축 부호 맵(Ms)에 있어서 해당하는 문자 정보가 1개의 대상 파일에 1회라도 출현하면 그 파일 번호의 비트를 ON으로 한다(도 12의 (D)). 또한, 초기 상태에서는, 삭제 맵(Ds)은 각 대상 파일에서 전부 ON으로 한다. 작성부(1104)의 상세한 처리 내용에 관해서는 후술한다.
제2 생성부(1105)는, 문자 정보의 출현 확률에 기초하여 출현 맵을 압축하는 무절점 허프만 트리(h)를 생성한다(도 12의 (E)). 제2 생성부(1105)의 상세한 처리 내용에 관해서는 후술한다. 또한, 도 7에 도시한 컴퓨터 시스템의 경우, 마스터 서버(MS)의 제2 생성부(1105)에서 생성된 무절점 허프만 트리는, 슬레이브 서버(S1, S2, …)에 송신된다.
제2 압축부(1106)는, 제2 생성부(1105)에서 생성된 무절점 허프만 트리를 이용하여 각 출현 맵을 압축한다(도 12의 (F)). 제2 압축부(1106)의 상세한 처리 내용에 관해서는 후술한다. 또한, 도 7에 도시한 컴퓨터 시스템의 경우, 슬레이브 서버(S1, S2, …)는, 마스터 서버(MS)의 제2 생성부(1105)에서 생성되어 송신되어온 허프만 트리를 이용하여, 제2 압축부(1106)에 의해, 슬레이브 서버(S1, S2, …) 내의 출현 맵을 압축하게 된다.
<집계 및 압축 부호 맵(Ms)의 작성의 상세>
다음으로, 집계부(1101)에 의한 집계 및 작성부(1104)에 의한 압축 부호 맵(Ms)의 작성의 상세에 관해 설명한다. 압축 부호 맵(Ms)을 작성하는 경우, 작성에 앞서, 집계부(1101)에 의해, 대상 파일군(Fs)으로부터 문자 정보의 출현 횟수를 집계하고, 제1 생성부(1102)에 의해, 2N 분지 무절점 허프만 트리(H)를 생성해 둘 필요가 있다.
도 13은 집계부(1101)에 의한 집계 및 작성부(1104)에 의한 압축 부호 맵(Ms)의 작성예를 도시한 설명도이다.
(1) 출현 횟수 집계
우선, 컴퓨터(1100)는, 대상 파일군(Fs)에 존재하는 문자 정보의 출현 횟수를 계수한다. 집계 결과는, 출현 횟수의 내림차순으로 소트되고, 출현 횟수가 큰 쪽으로부터 오름차순의 순위가 매겨진다. 또, 여기서는, 문자 정보의 총종류수는, 예로서 1305개(<2048(=211))로 한다. (1) 출현 횟수 집계의 상세한 것은 도 7에서 설명한다.
(2) 압축 부호 길이 산출
다음으로, (1)에서 얻어진 집계 결과를 기초로 하여, 컴퓨터(1100)는, 문자 정보마다의 압축 부호 길이를 산출한다. 구체적으로는, 컴퓨터(1100)는, 문자 정보마다, 출현율을 산출한다. 출현율은, 문자 정보의 출현 횟수를 전문자 정보의 총출현 횟수로 나눔으로써 얻어진다. 그리고, 컴퓨터(1100)는, 출현율에 대응하는 발생 확률을 구하고, 발생 확률로부터 압축 부호 길이를 도출한다.
발생 확률은, 1/2x로 표현된다. x는 멱수이다. 압축 부호 길이는, 발생 확률의 멱수 x가 된다. 구체적으로는, 출현율이 발생 확률의 이하의 어느 범위인지에 따라 압축 부호 길이가 결정된다. AR은 출현율이다.
1/20>AR≥1/21···압축 부호 길이는 1비트.
1/21>AR≥1/22···압축 부호 길이는 2비트.
1/22>AR≥1/23···압축 부호 길이는 3비트.
1/23>AR≥1/24···압축 부호 길이는 4비트.
·
·
·
1/2N-1>AR≥1/2N···압축 부호 길이는 N비트.
(2) 압축 부호 길이 산출의 상세한 것은 도 15에서 설명한다.
(3) 리프수 특정
다음으로, 컴퓨터(1100)는, 압축 부호 길이마다 리프수를 집계함으로써 압축 부호 길이마다의 리프수를 특정한다. 여기서는, 최대 압축 부호 길이는 17비트로 한다. 또한, 리프수란, 문자 정보의 종류수이다. 따라서, 압축 부호 길이 5비트의 리프수가 2인 경우, 5비트의 압축 부호가 할당되는 문자 정보가 2개 존재하는 것을 나타내고 있다.
(4) 리프수 보정
다음으로, 컴퓨터(1100)는, 리프수를 보정한다. 구체적으로는, 컴퓨터(1100)는, 브랜치수의 상한 2N의 멱수 N이 최대 압축 부호 길이가 되도록 보정한다. 예컨대, 멱수 N=11의 경우, 압축 부호 길이 11비트∼17비트까지의 리프수의 총합을, 보정 후의 압축 부호 길이 11비트의 리프수로 한다. 그리고, 컴퓨터(1100)는, 압축 부호 길이마다 리프당의 브랜치수를 할당한다. 구체적으로는, 보정 후의 압축 부호 길이에 대하여, 그 내림차순으로, 20, 21, 22, 23, 24, 25, 26으로서 리프당의 브랜치수를 결정한다.
예컨대, 도 13에서는, 압축 부호 길이 11비트의 압축 부호가 할당되는 문자 정보의 총수(리프수)는 1215개이지만, 그 리프당의 브랜치수는 1이다. 압축 부호 길이 11비트의 압축 부호가 할당되는 문자 정보에 관해서는, 각각 1개의 브랜치밖에 할당되지 않게 된다. 한편, 압축 부호 길이 6비트의 압축 부호가 할당되는 문자 정보의 총수(리프수)는 6개이지만, 그 리프당의 브랜치수는 32이다. 압축 부호 길이 6비트의 압축 부호가 할당되는 문자 정보에 관해서는, 각각 32개의 브랜치가 할당되게 된다. (4) 리프수 보정은, 필요한 경우에 실행하면 되고, 실행하지 않아도 좋다.
(5) 리프의 구조체 생성
다음으로, 컴퓨터(1100)는, 리프의 구조체를 생성한다. 리프의 구조체란, 문자 정보와 그 압축 부호 길이와 그 압축 부호 길이에서의 압축 부호가 대응지어진 데이터 구조체이다. 예컨대, 출현 순위가 1위인 문자 「0」의 압축 부호 길이는 6비트이고, 압축 부호는 「000000」이 된다. 도 13의 예에서는, 문자 정보의 종류수(리프수)는 1305개이기 때문에, 리프 L1의 구조체∼리프 L1305의 구조체가 생성되게 된다. (3) 리프수 특정∼(5) 리프의 구조체 생성의 상세(N=11)는, 도 16에서 설명한다.
(6) 리프에 대한 포인터 생성
다음으로, 컴퓨터(1100)는, 리프의 구조체마다 리프에 대한 포인터를 생성한다. 리프에 대한 포인터는, 그 포인트처가 되는 리프의 구조체 내의 압축 부호에, 그 리프당의 브랜치수분의 번호에 상당하는 비트열을 연결한 비트열이다. 예컨대, 리프 L1인 문자 「0」에 할당된 압축 부호 「000000」의 압축 부호 길이는 6비트이기 때문에, 리프 L1당의 브랜치수는 32개이다.
따라서, 리프 L1에 대한 포인터의 선두 6비트는, 압축 부호 「000000」이 된다. 후속 비트열은, 리프 L1당의 브랜치수로 표현되는 32(=25)종의 비트열이 된다. 즉, 32종의 5비트의 비트열이 압축 부호 「000000」의 후속 비트열이 된다. 따라서, 리프 L1에 대한 포인터는, 선두 6비트가 「000000」으로 고정된 32종의 11비트의 비트열이 된다. 또, 리프당의 브랜치수가 1개인 경우에는, 리프에 대한 포인터는 1개이고, 압축 부호와 그 리프에 대한 포인터는 동일 비트열이 된다. (6) 리프에 대한 포인터 생성의 상세한 것은, 도 18에서 설명한다.
(7) 2N 분지 무절점 허프만 트리(H)의 구축
마지막으로, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)를 구축한다. 구체적으로는, 리프의 포인터를 루트로 함으로써, 리프의 구조체를 직접 지정하는 2N 분지 무절점 허프만 트리(H)가 구축된다. 압축 부호열이, 선두 6비트가 「000000」의 11비트의 비트열인 경우, 후속의 5비트가 32종의 어느 비트열이더라도, 2N 분지 무절점 허프만 트리(H)에 의해 문자 「0」의 리프 L1의 구조체를 포인트할 수 있다. (7) 2N 분지 무절점 허프만 트리(H)의 구축의 상세한 것은, 도 19에서 설명한다.
도 14는 (1) 출현 횟수 집계의 상세를 도시한 설명도이다. 도 14에 있어서, 컴퓨터(1100)는, (A) 대상 파일군(Fs)으로부터의 집계, (B) 출현 빈도의 내림차순으로의 소트, (C) 목표 출현율의 순위까지의 추출이라는 3가지 페이즈를 실행한다. 이하, 기초 단어와 단일 문자로 나누어 설명한다.
(A1) 우선, 컴퓨터(1100)는, 대상 파일군(Fs)을 판독하여, 기초 단어의 출현 빈도(출현 횟수)를 계수한다. 컴퓨터(1100)는, 기초 단어의 구조체를 참조하여, 기초 단어의 구조체 내의 기초 단어에 일치하는 문자열이 대상 파일에 존재하는 경우에, 상기 기초 단어의 출현 빈도(초기값은 0)를 1 가산한다. 기초 단어의 구조체란, 기초 단어가 기술된 데이터 구조체이다.
(B1) 대상 파일군(Fs)에서 기초 단어의 집계가 종료되면, 컴퓨터(1100)는, 기초 단어 출현 빈도 집계 테이블을, 출현 빈도의 내림차순으로 소트한다. 즉, 출현 빈도가 높은 순으로 나열하여, 출현 빈도가 가장 높은 기초 단어로부터 순위를 매긴다.
(A2) 또한, 컴퓨터(1100)는, 대상 파일군(Fs)을 판독하여, 단일 문자의 출현 빈도를 계수한다. 구체적으로는, 컴퓨터(1100)는, 단일 문자의 출현 빈도(초기값은 0)를 1 가산한다.
(B2) 대상 파일군(Fs)에서 단일 문자의 집계가 종료되면, 컴퓨터(1100)는, 단일 문자 출현 빈도 집계 테이블을, 출현 빈도의 내림차순으로 소트한다. 즉, 출현 빈도가 높은 순으로 나열하여, 출현 빈도가 가장 높은 단일 문자로부터 순위를 매긴다.
(C1) 다음으로, 컴퓨터(1100)는, (B1) 소트 후의 기초 단어 출현 빈도 집계 테이블을 참조하여, 목표 출현율(Pw)까지의 순위의 기초 단어를 추출한다. 구체적으로는, 컴퓨터(1100)는, 전기초 단어의 출현 빈도의 총합(총출현 빈도)을 분모로 하고, 순위가 1위인 기초 단어로부터 내림차순으로 출현 빈도를 누계하여 분자로 하여, 각 순위까지의 목표 출현율(Pw)을 산출한다.
예컨대, 총출현 빈도가 40000, 1위부터 y위까지의 기초 단어군의 누계 출현 빈도가 30000으로 하면, y위까지의 출현 빈도는, (40000/30000)×100=75[%]가 된다. 여기서, 목표 출현율(Pw)이 75[%]인 경우에는, 상위 y위까지의 기초 단어를 추출하게 된다.
(C21) 다음으로, 컴퓨터(1100)는, (B2) 소트 후의 단일 문자 출현 빈도 집계 테이블을 참조하여, 목표 출현율(Pc)까지의 순위의 단일 문자를 추출한다. 구체적으로는, 컴퓨터(1100)는, 전단일 문자의 출현 빈도의 총합(총출현 빈도)을 분모로 하고, 순위가 1위인 단일 문자로부터 내림차순으로 출현 빈도를 누계하여 분자로 하여, 각 순위까지의 출현율을 산출한다.
예컨대, 총출현 빈도가 50000, 1위부터 y위까지의 단일 문자군의 누계 출현 빈도가 40000으로 하면, y위까지의 출현 빈도는, (50000/40000)×100=80[%]가 된다. 여기서, 목표 출현율(Pc)이 80[%]인 경우에는, 상위 y위까지의 단일 문자를 추출하게 된다. 또, (C21)에서 추출된 단일 문자를, 원래의 단일 문자군과 구별하기 위해, 「특정 단일 문자(군)」이라고 한다.
(C22) 또한, 단일 문자군 중 특정 단일 문자군으로부터 제외된 단일 문자(이하, 「비특정 단일 문자(군)」)는, 출현 빈도가 각 특정 단일 문자보다 낮기 때문에, 그 문자 코드를 분할한다. 구체적으로는, 비특정 단일 문자의 문자 코드를, 상위 비트의 문자 코드와, 하위 비트의 문자 코드로 분할한다.
예컨대, 단일 문자가 UTF16 비트 문자 코드로 표현되어 있는 경우에는, 상위 8비트의 문자 코드와 하위 8비트의 문자 코드로 분할한다. 이 경우, 분할된 어느 문자 코드도, 0x00∼0xFF의 코드로 표현된다. 이와 같이, 상위 비트의 문자 코드가 상위 분할 문자 코드이고, 하위 비트의 문자 코드가 하위 분할 문자 코드이다.
도 15는 도 13의 (2) 압축 부호 길이 산출의 상세(N=11)를 도시한 설명도이다. 도 15의 문자 정보 테이블은, 도 13의 (1)에서의 집계 결과를 반영한 테이블이고, 문자 정보마다 순위 항목, 신장 종별 항목, 코드 항목, 문자 항목, 출현 횟수 항목, 총횟수 항목, 출현율 항목, 보정 전에서의 발생 확률 항목 및 압축 부호 길이 항목이 설정되어 있다. 이 중, 순위 항목∼총횟수 항목까지가 재소트 결과로 얻어진 정보이다.
여기서, 순위 항목에는, 문자 정보의 출현 횟수의 내림차순으로 순위(오름차순)가 기록되어 있다. 문자 정보 항목 중 신장 종별 항목에는, 문자 정보의 종별이 기록된다. 「16」은 16비트 코드(의 단일 문자)를 나타내고 있다. 「8」은 8비트의 분할 문자 코드를 나타내고 있다. 「기」는 기초 단어를 나타내고 있다.
문자 정보 항목 중 코드 항목에는, 특정 단일 문자 또는 분할 문자 코드가 기록되어 있다. 기초 단어의 경우는 공란으로 한다. 문자 정보 항목 중 문자 항목에는, 문자나 기초 단어가 기록되어 있다. 분할 문자 코드의 경우는 공란으로 한다. 출현 횟수 항목에는, 대상 파일군(Fs)에서의 문자 정보의 출현 횟수가 기록되어 있다. 총횟수 항목에는, 전문자 정보의 총출현 횟수가 기록되어 있다.
출현율 항목에는, 출현 횟수를 총횟수로 나눗셈한 값이 출현율로서 기록되어 있다. 보정 전 항목의 발생 확률 항목에는, 출현율에 대응하는 발생 확률이 기록되어 있다. 압축 부호 길이 항목에는, 발생 확률에 따른 압축 부호 길이, 즉, 발생 확률 1/2y의 멱수 y가 압축 부호 길이로서 기록되어 있다.
도 16은 도 13의 (3) 리프수 특정∼(5) 리프의 구조체 생성의 상세(N=11)를 도시한 설명도이다. 도 15의 문자 정보 테이블을 압축 부호 길이 단위로 리프수(문자 정보의 총종류수)를 집계한 결과가, 도 15에서의 보정 전의 리프수가 된다. 여기서 보정 A란, 압축 부호 길이의 상한 길이(N)(즉, 2N 분지 무절점 허프만 트리(H)의 최대 브랜치수 2N의 멱수 N) 이상의 압축 부호 길이에 할당된 리프수를, 압축 부호 길이의 상한 길이(N)로 집약하는 보정이다. 이 경우, 보정 전에서의 최대 압축 부호 길이는 17비트이지만, 문자 정보의 총종류수가 1305종이기 때문에, 압축 부호 길이의 상한 길이(N)는, N=11이 된다. 따라서, 보정 A에서는, 압축 부호 길이 11비트의 리프수가, 압축 부호 길이가 11비트∼17비트인 리프수의 총합(1190개)이 된다.
그리고, 컴퓨터(1100)는, 발생 확률 총합을 구한다. 압축 부호 길이마다의 발생 확률은 정해져 있기 때문에(5비트이면 1/25), 압축 부호 길이마다 발생 확률을 리프수로 곱함으로써, 압축 부호 길이마다의 곱셈 결과가 얻어진다. 예컨대, 보정 A에서의 압축 부호 길이 5비트의 리프수는 2이다. 압축 부호 길이 5비트의 발생 확률은, 1/25이다. 따라서, 보정 A에서의 압축 부호 길이 5비트의 발생 확률은, 2×(1/25)=1/24이 된다. 압축 부호 길이 6비트 이후도 마찬가지로 보정 A에서의 압축 부호 길이 발생 확률을 구한다. 그리고, 보정 A 후에서의 각 압축 부호 길이의 발생 확률을 합계함으로써, 보정 A에서의 발생 확률 총합이 얻어진다.
그리고, 컴퓨터(1100)는, 발생 확률 총합이 1 이하인지 여부를 판단한다. 임계치 t는 0<t≤1이다. 임계치 t를 설정하고 싶지 않은 경우에는, t=1로 하면 된다. 임계치 t 미만이면, 보정 B로 이행한다. 임계치 t 이상 1 이하인 경우에는, 보정 B로 이행하지 않고, 이 시점에서의 압축 부호 길이마다의 리프수로 확정한다.
보정 B는, 보정 A에서의 압축 부호 길이군(5비트∼12비트)은 바꾸지 않고, 리프수를 갱신하는 보정이다. 구체적으로는, 보정 A에서의 발생 확률 총합이, 임계치 t 이상 1 이하가 아닌 경우에 행해지는 보정이다. 보다 구체적으로는, 보정 B는 2종류 있다.
하나는, 발생 확률 총합이 임계치 t 미만인 경우, 발생 확률 총합이 1 이하의 최대치가 얻어질 때까지, 예컨대, 최대 점근치에 수속될 때까지, 발생 확률 총합을 증가시키는 보정(이하, 보정 B+)이다. 다른 하나는, 발생 확률 총합이 1보다 큰 경우, 발생 확률 총합이 1 이하로 떨어지고 나서 1 이하의 최대치가 얻어질 때까지, 예컨대, 최대 점근치에 수속될 때까지, 발생 확률 총합을 감소시키는 보정(이하, 보정 B-)이다.
도 16에 도시한 예에서는, 보정 A에서의 발생 확률 총합이 「1.146」이기 때문에, 보정 B-를 행하게 된다. 또, 보정 B+ 및 보정 B-의 어느 보정 B라도, 리프수를 발생 확률 총합으로 나눈다는 동일한 보정을 행한다.
우선, 보정 B-의 1회째(보정 B-1)에서는, 압축 부호 길이마다의 보정 A에서의 리프수를, 전회의 보정(이 경우는 보정 A)의 발생 확률의 총합(1.146)으로 나눔으로써, 리프수를 갱신한다. 한편, 소수점 이하는 버림해도 좋고, 반올림해도 좋다. 또, 보정 A에서의 압축 부호 길이의 상한 길이(N)(N=11비트)에 관해서는, 전회의 보정(이 경우는 보정 A)의 발생 확률 총합(1.146)으로 나누지는 않고, 리프의 총수(1305개)로부터, 보정 B-1에서의 압축 부호 길이마다의 리프의 총수(압축 부호 길이의 상한 길이(N)의 리프수 제외)를 뺌으로써, 압축 부호 길이의 상한 길이(N)의 리프수를 구한다. 이 경우에는, 1208개이다.
이 후, 컴퓨터(1100)는, 보정 A의 경우와 동일한 계산 처리에 의해, 보정 B-1에서의 발생 확률 총합을 구한다. 그리고, 컴퓨터(1100)는, 보정 B-1에서의 발생 확률 총합이 1 이하의 최대 점근치에 수속되었는지 여부를 판단한다. 보정 B-1에서의 발생 확률 총합이 1 이하의 최대 점근치에 수속되어 있지 않으면, 보정 B-의 2회째(보정 B-2)로 이행한다. 최대 점근치에 수속된 경우에는, 보정 B-2로 이행하지 않고, 이 시점에서의 압축 부호 길이마다의 리프수로 확정한다. 보정 B-1에서 갱신된 발생 확률 총합 「1.042」는 1보다 크기 때문에, 최대 점근치에 수속되어 있지 않아, 보정 B-2로 이행한다.
보정 B-2에서는, 압축 부호 길이마다의 보정 B-1에서의 리프수를, 전회의 보정(이 경우는 보정 B-1)의 발생 확률 총합(1.042)으로 나눔으로써, 리프수를 갱신한다. 한편, 소수점 이하는 버림해도 좋고, 반올림해도 좋다. 또, 보정 B-1에서의 압축 부호 길이의 상한 길이(N)(N=11비트)에 관해서는, 전회의 보정(이 경우는 보정 B-1)의 발생 확률 총합(1.042)으로 나누지 않고, 리프의 총수(1305개)로부터, 보정 B-2에서의 압축 부호 길이마다의 리프의 총수(압축 부호 길이의 상한 길이(N)의 리프수 제외)를 뺌으로써, 압축 부호 길이의 상한 길이(N)의 리프수를 구한다. 이 경우에는, 1215개이다.
이 후, 컴퓨터(1100)는, 보정 B-1의 경우와 동일한 계산 처리에 의해, 보정 B-2에서의 발생 확률 총합을 구한다. 그리고, 컴퓨터(1100)는, 보정 B-2에서의 발생 확률 총합이 1 이하의 최대 점근치에 수속되었는지 여부를 판단한다. 보정 B-2에서의 발생 확률 총합이 1 이하의 최대 점근치에 수속되어 있지 않으면, 보정 B-의 3회째(보정 B-3)로 이행한다. 최대 점근치에 수속된 경우에는, 보정 B-3으로 이행하지 않고, 이 시점에서의 압축 부호 길이마다의 리프수로 확정한다. 보정 B-2에서 갱신된 발생 확률 총합 「0.982」는 1 이하이지만, 최대 점근치에 수속되어 있는지가 불명확하기 때문에, 보정 B-3으로 이행한다.
보정 B-3에서는, 압축 부호 길이마다의 보정 B-2에서의 리프수를, 전회의 보정(이 경우는 보정 B-2)의 발생 확률 총합(0.982)으로 나눔으로써, 리프수를 갱신한다. 한편, 소수점 이하는 버림해도 좋고, 반올림해도 좋다. 또, 보정 B-2에서의 압축 부호 길이의 상한 길이(N)(N=11비트)에 관해서는, 전회의 보정(이 경우는 보정 B-2)의 발생 확률 총합(0.982)으로 나누지는 않고, 리프의 총수(1305개)로부터, 보정 B-3에서의 압축 부호 길이마다의 리프의 총수(압축 부호 길이의 상한 길이(N)의 리프수 제외)를 뺌으로써, 압축 부호 길이의 상한 길이(N)의 리프수를 구한다. 이 경우에는, 1215개이다.
이 후, 컴퓨터(1100)는, 보정 B-2의 경우와 동일한 계산 처리에 의해, 보정 B-3에서의 발생 확률 총합을 구한다. 그리고, 컴퓨터(1100)는, 보정 B-3에서의 발생 확률 총합이 1 이하의 최대 점근치에 수속되었는지 여부를 판단한다. 보정 B-3에서의 발생 확률 총합이 1 이하의 최대 점근치에 수속되어 있지 않으면, 보정 B-의 4회째(보정 B-4)로 이행한다. 최대 점근치에 수속된 경우에는, 보정 B-4로 이행하지 않고, 이 시점에서의 압축 부호 길이마다의 리프수로 확정한다.
보정 B-3에서 갱신된 발생 확률 총합 「0.982」는, 보정 B-2에서 갱신된 발생 확률 총합 「0.982」와 동일한 값이다. 즉, 보정 B-3에서의 각 압축 부호 길이의 리프수와 보정 B-2에서의 각 압축 부호 길이의 리프수는 동일하다. 이 경우, 컴퓨터(1100)는, 발생 확률 총합이 최대 점근치에 수속된 것으로 판단하고, 리프수가 확정된다.
이와 같이 하여, 리프수가 확정될 때까지 보정 B-를 계속하게 된다. 도 16의 예에서는, 보정 B-3에서 압축 부호 길이마다의 리프수가 확정된 것이 된다. 이 후, 컴퓨터(1100)는, 압축 부호 길이마다, 리프당의 브랜치수를 산출하게 된다. 리프당의 브랜치수의 산출은, 전술한 바와 같이, 압축 부호 길이의 상한 길이(N)(이 경우는 N=11비트)로부터 내림차순으로, 20, 21, 22, 23, 24, 25, 26으로서 리프당의 브랜치수를 할당하게 된다. 또, 브랜치수의 소계는, 압축 부호 길이마다, 리프당의 브랜치수에 확정한 리프수를 곱한 곱셈 결과이다.
도 17은 문자 정보마다의 보정 결과를 도시한 설명도이다. 도 17에 있어서, 문자 정보 테이블에는, 보정 A, 보정 B-1∼보정 B-2까지의 보정 결과가 추가되어 있다. 도 17에 도시한 바와 같이, 보정에 의해 압축 부호 길이별의 리프수가 갱신되기 때문에, 순위 항목의 1위의 문자 정보로부터 짧은 압축 부호 길이가 할당되게 된다.
예컨대, 보정 B-2에서 확정한 경우, 압축 부호 길이 6비트에서는 리프수가 6, 압축 부호 길이 7비트에서는 리프수가 18, …, 압축 부호 길이 11비트에서는 리프수가 1215로 되어 있다. 따라서, 순위가 1위부터 6위까지의 문자 정보(리프수 6개분)에 관해서는 6비트의 압축 부호 길이, 순위가 7위부터 24위까지의 문자 정보(리프수 18개분)에 관해서는 7비트의 압축 부호 길이, …, 순위가 91위부터 1305위까지의 문자 정보(리프수 1215개분)에 관해서는 11비트의 압축 부호 길이가 할당된다.
그리고, 컴퓨터(1100)는, 문자 정보와 문자 정보에 할당된 압축 부호 길이와 압축 부호 길이마다의 리프수에 기초하여, 문자 정보마다 압축 부호를 할당하고, 리프의 구조체를 생성하게 된다. 예컨대, 출현율 1위의 단일 문자 「0」은 5비트의 압축 부호 길이가 할당되어 있기 때문에, 압축 부호가 「000000」이 된다. 따라서, 압축 부호 「000000」, 압축 부호 길이 「6」, 문자 정보 「0」을 포함하는 리프 L1의 구조체가 생성되게 된다.
또, 전술한 보정 처리에서는, 압축 부호 길이가 5비트∼11비트로 했지만, 2그램 문자열의 압축 부호 맵(M)을 분할하는 경우도 있기 때문에, 압축 부호 길이는 짝수 비트가 되도록 보정해도 좋다. 구체적으로는, 예컨대, 압축 부호 길이 5비트 및 7비트의 문자 정보에 관해서는 6비트, 9비트의 문자 정보에 관해서는 8비트, 11비트의 문자 정보에 관해서는 10비트로 한다.
도 18은 도 13의 (6) 리프에 대한 포인터 생성의 상세(N=11)를 도시한 설명도이다. 도 18은 압축 부호 길이의 상한(N)이 11비트인 경우의 리프에 대한 포인터를 나타내고 있다. 도 18에 있어서, 압축 부호 길이가 6비트인 리프수는 6개이기 때문에, 압축 부호는 「000000」∼「000101」이 할당된다. 또한, 압축 부호 길이가 6비트인 리프당의 브랜치수는, 32개이다. 따라서, 압축 부호 길이가 6비트인 압축 부호에 관한 리프에 대한 포인터는, 32(=25)개 생성된다. 구체적으로는, 리프에 대한 포인터의 선두 6비트가 압축 부호이고 후속 5비트가 32종의 비트열이 된다. 따라서, 압축 부호 길이가 6비트인 압축 부호의 각각에 관해, 32종의 리프에 대한 포인터가 생성되게 된다.
또, 도시는 하지 않았지만, 압축 부호 길이가 7비트인 리프수는 18개이기 때문에, 압축 부호 「0001100」∼「0011111」이 할당된다. 또한, 압축 부호 길이가 7비트인 리프당의 브랜치수는, 16개이다. 따라서, 압축 부호 길이가 7비트인 압축 부호에 관한 리프에 대한 포인터는, 16(=24)개 생성된다. 구체적으로는, 리프에 대한 포인터의 선두 7비트가 압축 부호이고 후속 4비트가 16종의 비트열이 된다. 따라서, 압축 부호 길이가 7비트인 압축 부호의 각각에 관해, 16종의 리프에 대한 포인터가 생성되게 된다.
마찬가지로, 압축 부호 길이가 8비트인 리프수는 23개이기 때문에, 압축 부호 「01000000」∼「01010110」이 할당된다. 또한, 압축 부호 길이가 8비트인 리프당의 브랜치수는, 8개이다. 따라서, 압축 부호 길이가 8비트인 압축 부호에 관한 리프에 대한 포인터는, 8(=23)개 생성된다. 구체적으로는, 리프에 대한 포인터의 선두 8비트가 압축 부호이고 후속 3비트가 8종의 비트열이 된다. 따라서, 압축 부호 길이가 8비트인 압축 부호의 각각에 관해, 8종의 리프에 대한 포인터가 생성되게 된다.
마찬가지로, 압축 부호 길이가 9비트인 리프수는 23개이기 때문에, 압축 부호 「010101110」∼「011000100」이 할당된다. 또한, 압축 부호 길이가 9비트인 리프당의 브랜치수는, 4개이다. 따라서, 압축 부호 길이가 9비트인 압축 부호에 관한 리프에 대한 포인터는, 4(=22)개 생성된다. 구체적으로는, 리프에 대한 포인터의 선두 9비트가 압축 부호이고 후속 2비트가 4종의 비트열이 된다. 따라서, 압축 부호 길이가 9비트인 압축 부호의 각각에 관해, 4종의 리프에 대한 포인터가 생성되게 된다.
마찬가지로, 압축 부호 길이가 10비트인 리프수는 20개이기 때문에, 압축 부호 「0110000110」∼「0110011101」이 할당된다. 또한, 압축 부호 길이가 10비트인 리프당의 브랜치수는, 2개이다. 따라서, 압축 부호 길이가 10비트인 압축 부호에 관한 리프에 대한 포인터는, 2(=21)개 생성된다. 구체적으로는, 리프에 대한 포인터의 선두 10비트가 압축 부호이고 후속 1비트가 2종의 비트열이 된다. 따라서, 압축 부호 길이가 10비트인 압축 부호의 각각에 관해, 2종의 리프에 대한 포인터가 생성되게 된다.
마찬가지로, 압축 부호 길이가 11비트인 리프수는 1215개이기 때문에, 압축 부호 「01100111100」∼「11111111010」이 할당된다. 또한, 압축 부호 길이가 11비트인 리프당의 브랜치수는, 1개이다. 따라서, 압축 부호 길이가 11비트인 압축 부호에 관한 리프에 대한 포인터는, 1(=20)개 생성된다. 구체적으로는, 압축 부호가 그대로 리프에 대한 포인터가 된다. 따라서, 압축 부호 길이가 11비트인 압축 부호의 각각에 관해, 1종의 리프에 대한 포인터가 생성되게 된다.
도 19는 도 13의 (7) 2N 분지 무절점 허프만 트리(H)의 구축의 상세(N=11)를 도시한 설명도이다. 도 19에서는, N=11로 한 경우의 2048(=211) 분지 무절점 허프만 트리(H)를 나타내고 있다. 루트의 구조체에는, 리프에 대한 포인터가 저장되어 있다. 리프에 대한 포인터는 포인트처인 리프의 구조체를 지정할 수 있다.
구체적으로는, 압축 부호 길이가 6비트인 압축 부호가 저장되는 리프의 구조체에 관한 리프에 대한 포인터는, 도 18에 도시한 바와 같이 32개 생성된다. 따라서, 리프 L1의 구조체에 관해서는, 루트의 구조체에 32개의 리프 L1에 대한 포인터 L1P(1)∼L1P(32)가 저장된다. 리프 L2의 구조체∼리프 L6의 구조체에 관해서도 마찬가지이다. 리프 L7 이후의 구조체에 관해서는, 도 19와 같다.
도 20은 리프의 구조체를 도시한 설명도이다. 리프의 구조체는, 제1 영역∼제4 영역을 갖는 데이터 구조체이다. 리프의 구조체는, 제1 영역에는, 압축 부호 및 그 압축 부호 길이가 저장된다. 제2 영역에는, 리프의 표지와 신장 종별(도 15 참조), 출현율(도 15 참조)이 저장된다. 제3 영역에는, 신장 종별에 따라 특정 단일 문자인 16비트의 문자 코드, 비특정 단일 문자의 문자 코드가 분할된 8비트의 분할 문자 코드, 또는 기초 단어에 대한 포인터가 저장된다. 기초 단어에 대한 포인터에 의해 기초 단어의 구조체 내의 기초 단어가 지정된다. 또한, 대조 플래그도 저장되어 있다. 대조 플래그는 디폴트로는 「0」이다. 「0」의 경우에는, 신장하는 문자를 그대로 신장 버퍼에 기록하고, 「1」의 경우에는, <color> 태그와 </color> 태그 사이에 넣어 신장 버퍼에 기록한다.
제4 영역에는, 저장되어 있는 문자 정보의 출현율과 출현 맵의 출현율 영역이 저장된다. 출현율이란, 도 15에 도시한 문자 정보의 출현율이다. 출현 맵의 출현율 영역에 관해서는 도 55 및 도 56에서 설명한다. 또, 제3 영역에는, 그 밖에, 부호 종별과 부호 구분이 저장된다. 부호 종별이란, 문자 코드가 숫자, 영자, 특수 기호, 가타카나, 히라가나, 한자 중 어느 것에 해당하는지, 또는 기초 단어에 대한 포인터인지를 식별하는 정보이다. 부호 구분이란, 문자 코드가 16비트인지 8비트인지를 식별하는 정보이다. 16비트의 문자 코드인 경우 또는 예약어인 경우, 부호 구분으로서 “1”을 할당하고, 8비트의 분할 문자 코드인 경우, 부호 구분으로서 “0”을 할당한다.
또, 제1 영역∼제4 영역 내의 정보는, 후술하는 구축 처리(단계 S3905)에 있어서 저장되게 된다.
도 21은 특정 단일 문자의 구조체를 도시한 설명도이다. 특정 단일 문자의 구조체(2100)는, 특정 단일 문자 코드(e#)와 그 리프(L#)에 대한 포인터를 저장하는 데이터 구조체이다. 구체적으로는, 예컨대, 컴퓨터(1100)는, 대상 파일군(Fs)으로부터의 집계 결과가 얻어졌을 때에, 컴퓨터(1100)가, 특정 단일 문자의 구조체(2100)에 특정 단일 문자 코드(e#)를 저장한다. 그리고, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)가 구축되면, 2N 분지 무절점 허프만 트리(H)에서의 각 리프의 구조체에 저장된 압축 부호에 대응하는, 특정 단일 문자의 구조체(2100)에서의 특정 문자 코드(e#)에 대한 포인터를 저장한다.
또한, 특정 단일 문자 코드(e#)에 대한 포인터가 대응하는 리프의 구조체에 저장되면, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)에서의 각 특정 단일 문자 코드(e#)에 대응하는 리프에 대한 포인터를, 특정 단일 문자의 구조체(2100) 내의 대응하는 특정 단일 문자 코드(e#)에 관련지어 저장한다. 이에 따라, 특정 단일 문자의 구조체(2100)가 생성된다.
도 22는 분할 문자 코드의 구조체를 도시한 설명도이다. 분할 문자 코드의 구조체(2200)는, 분할 문자 코드와 그 리프(L#)에 대한 포인터를 저장한다. 구체적으로는, 예컨대, 컴퓨터(1100)는, 대상 파일군(Fs)으로부터의 집계 결과가 얻어졌을 때에, 컴퓨터(1100)가, 분할 문자 코드의 구조체(2200)에 분할 문자 코드를 저장한다. 그리고, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)가 구축되면, 2N 분지 무절점 허프만 트리(H)에서의 각 리프의 구조체에 저장된 압축 부호에 대응하는, 분할 문자 코드의 구조체(2200)에서의 분할 문자 코드에 대한 포인터를 저장한다.
또한, 분할 문자 코드에 대한 포인터가 대응하는 리프의 구조체에 저장되면, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)에서의 각 분할 문자 코드에 대응하는 리프에 대한 포인터를, 분할 문자 코드의 구조체(2200) 내의 대응하는 분할 문자 코드에 관련지어 저장한다. 이에 따라, 분할 문자 코드의 구조체(2200)가 생성된다.
도 23은 기초 단어의 구조체를 도시한 설명도이다. 기초 단어의 구조체(2300)는, 기초 단어와 그 리프(L#)에 대한 포인터를 저장하는 데이터 구조체이다. 기초 단어의 구조체(2300)에는, 미리 기초 단어가 저장되어 있다. 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)가 구축되면, 2N 분지 무절점 허프만 트리(H)에서의 각 리프의 구조체에 저장된 압축 부호에 대응하는, 기초 단어의 구조체(2300)에서의 기초 단어에 대한 포인터를 저장한다.
또한, 기초 단어에 대한 포인터가 대응하는 리프의 구조체에 저장되면, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)에서의 각 기초 단어에 대응하는 리프에 대한 포인터를, 기초 단어의 구조체(2300) 내의 대응하는 기초에 관련지어 저장하게 된다.
<압축 부호 맵(Ms)의 작성예>
제1 생성부(1102)에 의해 2N 분지 무절점 허프만 트리(H)가 생성되면, 작성부(1104)는, 단일 문자의 압축 부호 맵(Ms), 상위 분할 문자 코드의 압축 부호 맵(Ms), 하위 분할 문자 코드의 압축 부호 맵(Ms), 단어의 압축 부호 맵(Ms), 2그램 문자열의 압축 부호 맵(Ms)을 작성한다. 이하, 단일 문자의 압축 부호 맵(Ms), 상위 분할 문자 코드의 압축 부호 맵(Ms), 하위 분할 문자 코드의 압축 부호 맵(Ms), 2그램 문자열의 압축 부호 맵(Ms)의 상세한 작성예에 관해 설명한다. 또, 기초 단어의 압축 부호 맵(Ms)은, 단일 문자의 압축 부호 맵(Ms)과 동일하게 행해지므로 생략한다.
(A) 우선, 선두 문자 「」이 대상 문자이다. 대상 문자 「」은 특정 단일 문자이기 때문에, 2N 분지 무절점 허프만 트리(H)에 액세스하여 특정 단일 문자 「」의 압축 부호를 취득하여, 특정 단일 문자 「」의 출현 맵을 특정한다. 미생성인 경우에는, 특정 단일 문자 「」의 압축 부호를 포인터로 하며, 또한, 대상 파일의 존재 여부를 나타내는 비트열을 모두 0으로 한 특정 단일 문자 「」의 출현 맵을 생성한다. 그리고, 특정 단일 문자 「」의 출현 맵에 관해 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다.
(B) 다음으로, 대상 문자를 1그램 시프트하여, 대상 문자를 「馬」로 한다. 대상 문자 「馬」는 특정 단일 문자이기 때문에, 2N 분지 무절점 허프만 트리(H)에 액세스하여 특정 단일 문자 「馬」의 압축 부호를 취득하여, 특정 단일 문자 「馬」의 출현 맵을 특정한다. 미생성인 경우에는, 특정 단일 문자 「馬」의 압축 부호를 포인터로 하며, 또한, 대상 파일의 존재 여부를 나타내는 비트열을 모두 0으로 한 특정 단일 문자 「馬」의 출현 맵을 생성한다. 그리고, 특정 단일 문자 「馬」의 출현 맵에 관해 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다.
또한, 대상 문자가 「馬」로 시프트된 경우, 「」라는 2그램 문자열이 얻어지기 때문에, 「」의 압축 부호와 「馬」의 압축 부호를 결합한 「」의 압축 부호열에 의해, 2그램 문자열 「」의 출현 맵을 특정한다. 미생성인 경우에는, 「」의 압축 부호열을 포인터로 하며, 또한, 대상 파일의 존재 여부를 나타내는 비트열을 모두 0으로 한 2그램 문자열 「」의 출현 맵을 생성한다. 그리고, 2그램 문자열 「」의 출현 맵에 있어서 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다.
(C) 다음으로, 대상 문자를 1그램 시프트하여, 대상 문자를 「は」로 한다. 대상 문자 「は」에 관해서도 (B)와 동일하게 처리함으로써, 특정 단일 문자 「は」의 출현 맵에 관해 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다. 마찬가지로, 2그램 문자열 「馬は」의 출현 맵에 있어서 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다.
(D) 다음으로, 대상 문자를 1그램 시프트하여, 대상 문자를 「脫」로 한다. 대상 문자 「脫」은 특정 단일 문자가 아니기 때문에, 대상 문자 「脫」의 문자 코드 「0x8131」을, 상위 분할 문자 코드 「0x81」과 하위 분할 문자 코드 「0x31」로 분할한다. 그리고, 대상 문자를 상위 분할 문자 코드 「0x81」로 한다. 상위 분할 문자 코드 「0x81」에 관해서도, 특정 단일 문자와 동일하게 처리함으로써, 상위 분할 문자 코드 「0x81」의 출현 맵에 관해 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다. 마찬가지로, 2그램 문자열 「は 0x81」의 출현 맵에 있어서 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다.
(E) 다음으로, 대상 문자를 1그램 시프트하여, 문자 「脫」의 하위 분할 문자 코드 「0x31」을, 대상 문자로 한다. 하위 분할 문자 코드 「0x31」에 관해서도, 동일하게 처리함으로써, 하위 분할 문자 코드 「0x31」의 출현 맵에 관해 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다. 마찬가지로, 2그램 문자열 「0x81 0x31」의 출현 맵에 있어서 대상 파일(Fi)의 비트를 ON(“0”→“1”)으로 한다.
(F)∼(I)에 관해서도 동일한 처리를 행하여, 최후의 대상 파일 Fn에 관해서도 처리를 완료함으로써, 단일 문자, 상위 분할 문자 코드, 하위 분할 문자 코드, 2그램 문자열의 각각에 관해, 압축 부호 맵(Ms)이 생성된다.
<압축 부호 맵 생성 처리 순서>
다음으로, 작성부(1104)에 의한 압축 부호 맵 작성 처리 순서예에 관해 설명한다.
도 25는 작성부(1104)에 의한 압축 부호 맵 작성 처리 순서예를 도시한 플로우차트이다. 컴퓨터(1100)는, 집계 처리(단계 S2501), 맵 할당수 결정 처리(단계 S2502), 재집계 처리(단계 S2503), 허프만 트리 생성 처리(단계 S2504), 맵 작성 처리(단계 S2505)를 실행한다. 컴퓨터(1100)는, 집계부(1101)에 의해 집계 처리(단계 S2501)∼재집계 처리(단계 S2503)를 실행한다. 또한, 제1 생성부(1102)에 의해 허프만 트리 생성 처리(단계 S2504)를 실행하고, 작성부(1104)에 의해 맵 작성 처리(단계 S2505)를 실행한다.
집계 처리(단계 S2501)란, 대상 파일군(Fs) 내의 단일 문자나 기초 단어의 출현 횟수(출현 빈도라고도 함)를 계수하는 처리이다. 맵 할당수 결정 처리(단계 S2502)란, 집계 처리(단계 S2501)에서 집계된 단일 문자 및 기초 단어에 관한 맵 할당수를 결정하는 처리이다. 맵 할당수에 대응하는 출현 순위의 단일 문자 및 기초 단어가, 각각 특정 단일 문자 및 기초 단어가 된다.
재집계 처리(단계 S2503)란, 단일 문자 중 특정 단일 문자 이외의 비특정 단일 문자를 분할하여, 상위 분할 문자 코드 및 하위 분할 문자 코드로 하고, 각각의 출현 횟수를 집계하는 처리이다. 또한, 재집계 처리(단계 S2503)에서는, 2그램 문자열의 출현 횟수도 집계한다.
허프만 트리 생성 처리(단계 S2504)란, 도 15∼도 20에 도시한 바와 같이, 2N 분지 무절점 허프만 트리(H)를 생성하는 처리이다. 맵 작성 처리(단계 S2505)란, 특정 단일 문자, 기초 단어, 상위 분할 문자 코드, 하위 분할 문자 코드, 2그램 문자열에 관한 압축 부호 맵(M)을 생성하는 처리이다.
(집계 처리(단계 S2501))
도 26은 도 25에 도시한 집계 처리(단계 S2501)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 파일 번호(i)를 i=1로 설정하고(단계 S2601), 대상 파일(Fi)을 판독한다(단계 S2602). 그리고, 컴퓨터(1100)는, 대상 파일(Fi)의 집계 처리를 실행한다(단계 S2603). 대상 파일(Fi)의 집계 처리(단계 S2603)의 상세에 관해서는, 도 27에서 설명한다. 이 후, 컴퓨터(1100)는, 파일 번호(i)가 i>n(n은 대상 파일 F1∼Fn의 총수)인지 여부를 판단한다(단계 S2604).
i>n이 아닌 경우(단계 S2604 : No), 컴퓨터(1100)는, i를 인크리먼트하고(단계 S2605), 단계 S2602로 되돌아간다. 한편, i>n인 경우(단계 S2604 : Yes), 컴퓨터(1100)는, 도 25에 도시한 맵 할당수 결정 처리(단계 S2502)로 이행하고, 집계 처리(단계 S2501)를 종료한다. 이 집계 처리(단계 S2501)에 의하면, 대상 파일(Fi)마다 대상 파일(Fi)의 집계 처리(단계 S2603)를 실행할 수 있다.
(대상 파일(Fi)의 집계 처리(단계 S2603))
도 27은 도 26에 도시한 대상 파일(Fi)의 집계 처리(단계 S2603)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 대상 문자를 대상 파일(Fi)의 선두 문자로 하고(단계 S2701), 기초 단어 집계 처리를 실행한다(단계 S2702). 기초 단어 집계 처리(단계 S2702)의 상세에 관해서는 도 29에서 설명한다. 이 후, 컴퓨터(1100)는, 문자 출현 빈도 집계 테이블에 있어서 대상 문자의 출현 횟수를 1 증가한다(단계 S2703).
도 28은 문자 출현 빈도 집계 테이블을 도시한 설명도이다. 문자 출현 빈도 집계 테이블(2800)은, RAM(903)이나 자기 디스크(905) 등의 기억 장치에 기억되어 있고, 해당하는 문자가 출현할 때마다 출현 횟수를 1씩 증가시킨다.
도 27로 되돌아와, 컴퓨터(1100)는, 대상 문자가 대상 파일(Fi)의 말미 문자인지 여부를 판단한다(단계 S2704). 대상 문자가 대상 파일(Fi)의 말미 문자가 아닌 경우(단계 S2704 : No), 컴퓨터(1100)는, 대상 문자를 말미 방향으로 1문자 시프트하고(단계 S2705), 단계 S2702로 되돌아간다.
한편, 대상 문자가 대상 파일(Fi)의 말미 문자인 경우(단계 S2704 : Yes), 컴퓨터(1100)는, 단계 S2604로 이행하고, 대상 파일(Fi)의 집계 처리(단계 S2603)를 종료한다. 이 대상 파일(Fi)의 집계 처리(단계 S2603)에 의하면, 대상 파일군(Fs)에 존재하는 기초 단어 및 단일 문자의 출현 빈도를 집계할 수 있다.
(기초 단어 집계 처리(단계 S2702))
도 29는 도 27에 도시한 기초 단어 집계 처리(단계 S2702)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 최장 일치 검색 처리를 실행하여(단계 S2901), 최장 일치한 기초 단어가 있었던지 여부를 판단한다(단계 S2902). 최장 일치 검색 처리(단계 S2901)의 상세에 관해서는 도 31에서 설명한다. 최장 일치한 기초 단어가 있었던 경우(단계 S2902 : Yes), 컴퓨터(1100)는, 기초 단어 출현 빈도 집계 테이블에 있어서 최장 일치한 기초 단어의 출현 횟수를 1 증가하고(단계 S2903), 단계 S2703으로 이행한다.
도 30은 기초 단어 출현 빈도 집계 테이블을 도시한 설명도이다. 기초 단어 출현 빈도 집계 테이블(3000)은, RAM(903)이나 자기 디스크(905) 등의 기억 장치에 기억되어 있고, 해당하는 기초 단어가 출현할 때마다 출현 횟수를 1씩 증가시킨다.
도 29로 되돌아와, 최장 일치한 기초 단어가 없었던 경우(단계 S2902 : No), 단계 S2703으로 이행한다. 이에 따라, 기초 단어 집계 처리(단계 S2702)를 종료한다. 이 기초 단어 집계 처리(단계 S2702)에 의하면, 최장 일치 검색 처리(단계 S2901)에 의해 기초 단어를 계수할 수 있기 때문에, 문자열이 긴 기초 단어를 우선적으로 계수할 수 있다.
(최장 일치 검색 처리(단계 S2901))
도 31은 도 29에 도시한 최장 일치 검색 처리(단계 S2901)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, c=1로 한다(단계 S3101). c는 대상 문자로부터의 문자수(대상 문자 포함)이다. c=1의 경우에는, 대상 문자뿐이다. 다음으로, 컴퓨터(1100)는, 대상 문자로부터 c문자째까지의 대상 문자열과 전방(前方) 일치하는 기초 단어를 2분 탐색한다(단계 S3102). 그리고, 컴퓨터(1100)는, 검색에 의해 기초 단어가 있는지 여부를 판단한다(단계 S3103). 2분 탐색에 의해 기초 단어가 히트하지 않은 경우(단계 S3103 : No), 단계 S3106으로 이행한다.
한편, 2분 탐색에 의해 기초 단어가 히트한 경우(단계 S3103 : Yes), 컴퓨터(1100)는, 히트한 기초 단어와 대상 문자열이 완전 일치하는지 여부를 판단한다(단계 S3104). 그리고, 완전 일치하지 않는 경우(단계 S3104 : No), 단계 S3106으로 이행한다. 한편, 완전 일치하는 경우(단계 S3104 : Yes), 컴퓨터(1100)는, 최장 일치 후보로서 기억 장치에 유지하고(단계 S3105), 단계 S3106으로 이행한다.
단계 S3106에서는, 컴퓨터(1100)는, 대상 문자열에 관해 2분 탐색이 종료되었는지 여부를 판단한다(단계 S3106). 구체적으로는, 컴퓨터(1100)는, 말미의 기초 단어까지 2분 탐색했는지 여부를 판단한다. 2분 탐색이 종료되지 않은 경우(단계 S3106 : No), 컴퓨터(1100)는, 단계 S3102로 이행하여, 2분 탐색이 종료될 때까지 계속한다.
한편, 대상 문자열에 관해 2분 탐색이 종료된 경우(단계 S3106 : Yes), 컴퓨터(1100)는, c문자째의 문자가 대상 파일(Fi)의 말미 문자인지 여부를 판단한다(단계 S3107). c문자째의 문자가 대상 파일(Fi)의 말미 문자인 경우(단계 S3107 : Yes), 단계 S3110으로 이행한다. 한편, c문자째의 문자가 대상 파일(Fi)의 말미 문자가 아닌 경우(단계 S3107 : No), 컴퓨터(1100)는, c>cmax인지 여부를 판단한다(단계 S3108). cmax는 미리 설정된 값으로, 이에 따라 대상 문자열의 상한 문자수가 설정된다.
c>cmax가 아닌 경우(단계 S3108 : No), 컴퓨터(1100)는, c를 인크리먼트하고(단계 S3109), 단계 S3102로 되돌아간다. 한편, c>cmax인 경우(단계 S3108 : Yes), 컴퓨터(1100)는, 최장 일치 후보가 있는지 여부를 판단한다(단계 S3110). 구체적으로는, 컴퓨터(1100)는, 단계 S3105에 있어서 1개라도 최장 일치 후보가 메모리에 유지되어 있는지 여부를 판단한다.
최장 일치 후보가 있는 경우(단계 S3110 : Yes), 컴퓨터(1100)는, 최장 일치 후보 중 최장 문자열을, 최장 일치한 기초 단어로 결정한다(단계 S3111). 그리고, 단계 S2902로 이행한다. 한편, 단계 S3110에 있어서, 최장 일치 후보가 하나도 없는 경우(단계 S3110 : No), 단계 S2902로 이행한다. 이에 따라, 최장 일치 검색 처리(단계 S2901)를 종료한다. 이 최장 일치 검색 처리(단계 S2901)에 의하면, 기초 단어의 구조체에 있는 기초 단어 중으로부터, 완전 일치한 문자열 중에서 또한 최장의 문자열을 기초 단어로서 검색할 수 있다.
(맵 할당수 결정 처리(단계 S2502))
도 32는 도 25에 도시한 맵 할당수 결정 처리(단계 S2502)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 집계 처리(단계 S2501)에 의한 기초 단어마다의 출현 빈도를 나타내는 기초 단어 출현 빈도 집계 테이블(3000)과 단일 문자마다의 출현 빈도를 나타내는 문자 출현 빈도 집계 테이블(2800)을 출현 빈도가 높은 순으로 소트한다(단계 S3201). 그리고, 컴퓨터(1100)는, 소트 후의 기초 단어 출현 빈도 집계 테이블(3000)을 참조하여, 기초 단어의 출현 순위(Rw)를 Rw=1로 하고(단계 S3202), 출현 순위(Rw)까지의 누적 출현 횟수(Arw)를 계수한다(단계 S3203). 그리고, 컴퓨터(1100)는, 하기 식(1)을 만족하는지 여부를 판단한다(단계 S3204).
Arw>Pw×Aw···(1)
Aw는 집계된 기초 단어의 총출현 횟수이다.
상기 식(1)을 만족하지 않는 경우(단계 S3204 : No), 컴퓨터(1100)는, 출현 순위(Rw)를 인크리먼트하고(단계 S3205), 단계 S3203으로 되돌아간다. 즉, 상기 식(1)을 만족할 때까지 출현 순위(Rw)를 계속해서 낮춘다.
그리고, 상기 식(1)을 만족한 경우(단계 S3204 : Yes), 컴퓨터(1100)는, 기초 단어의 맵 할당수(Nw)를 Nw=Rw-1로 한다(단계 S3206). 여기서, 맵 할당수(Nw)란, 맵 작성 처리(단계 S3205)에서 생성되는 기초 단어 출현 맵에 할당되는 기초 단어수이고, 기초 단어 출현 맵의 레코드수(행수)를 의미한다.
또한, 컴퓨터(1100)는, 단일 문자의 출현 순위(Rc)를 Rc=1로 하고(단계 S3207), 출현 순위(Rc)까지의 누적 출현 횟수(Arc)를 계수한다(단계 S3208). 그리고, 컴퓨터(1100)는, 하기 식(2)를 만족하는지 여부를 판단한다(단계 S3209).
Arc>Pc×Ac···(2)
Ac는 집계된 단일 문자의 총출현 횟수이다.
상기 식(2)를 만족하지 않는 경우(단계 S3209 : No), 컴퓨터(1100)는, 출현 순위(Rc)를 인크리먼트하고(단계 S3210), 단계 S3208로 되돌아간다. 즉, 상기 식(2)를 만족할 때까지 출현 순위(Rc)를 계속해서 낮춘다.
그리고, 상기 식(2)를 만족한 경우(단계 S3209 : Yes), 컴퓨터(1100)는, 단일 문자의 맵 할당수(Nc)를 Nc=Rc-1로 한다(단계 S3211). 여기서, 맵 할당수(Nc)란, 맵 작성 처리(단계 S2505)에서 생성되는 특정 단일 문자 출현 맵에 할당되는 특정 단일 문자수이고, 특정 단일 문자 출현 맵의 레코드수(행수)를 의미한다. 이 후, 재집계 처리(단계 S2503)로 이행하고, 맵 할당수 결정 처리(단계 S2502)를 종료한다.
이 맵 할당수 결정 처리(단계 S2502)에 의하면, 맵 작성 처리(단계 S2505)에 있어서 목표 출현율(Pw)에 따른 수의 기초 단어분에 관해 기초 단어 출현 맵을 생성할 수 있다. 따라서, 모든 기초 단어에 관해 맵 할당을 행할 필요가 없고, 목표 출현율(Pw)에 따라 정해지기 때문에, 맵 사이즈의 최적화를 도모할 수 있다.
또한, 단일 문자에 관해서도, 맵 작성 처리(단계 S2505)에 있어서 목표 출현율(Pc)에 따른 수의 단일 문자분에 관해 특정 단일 문자의 압축 부호 맵(M)을 생성할 수 있다. 따라서, 모든 단일 문자에 관해 맵 할당을 행할 필요가 없고, 목표 출현율(Pc)에 따라 정해지기 때문에, 맵 사이즈의 최적화를 도모할 수 있다.
(재집계 처리(단계 S2503))
도 33은 도 25에 도시한 재집계 처리(단계 S2503)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 파일 번호(i)를 i=1로 설정하고(단계 S3301), 대상 파일(Fi)을 판독한다(단계 S3302). 그리고, 컴퓨터(1100)는, 대상 파일(Fi)의 재집계 처리를 실행한다(단계 S3303). 대상 파일(Fi)의 재집계 처리(단계 S3303)의 상세에 관해서는, 도 33에서 설명한다. 이 후, 컴퓨터(1100)는, 파일 번호(i)가 i>n(n은 대상 파일 F1∼Fn의 총수)인지 여부를 판단한다(단계 S3304).
i>n이 아닌 경우(단계 S3304 : No), 컴퓨터(1100)는, i를 인크리먼트하고(단계 S3305), 단계 S3302로 되돌아간다. 한편, i>n인 경우(단계 S3304 : Yes), 컴퓨터(1100)는, 도 25에 도시한 허프만 트리 생성 처리(단계 S3204)로 이행하고, 재집계 처리(단계 S3203)를 종료한다. 이 재집계 처리(단계 S3203)에 의하면, 대상 파일(Fi)마다 대상 파일(Fi)의 재집계 처리(단계 S3303)를 실행할 수 있다.
(대상 파일(Fi)의 재집계 처리(단계 S3303))
도 34는 대상 파일(Fi)의 재집계 처리(단계 S3303)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 대상 문자를 대상 파일(Fi)의 선두 문자로 하고(단계 S3401), 대상 문자가 특정 단일 문자인지 여부를 판단한다(단계 S3402). 특정 단일 문자인 경우(단계 S3402 : Yes), 분할하지 않고 단계 S3404로 이행한다.
한편, 특정 단일 문자가 아닌 경우(단계 S3402 : No), 컴퓨터(1100)는, 대상 문자의 문자 코드를 상위 분할 문자 코드와 하위 분할 문자 코드로 분할한다(단계 S3403). 그리고, 단계 S3404로 이행한다.
단계 S3404에서는, 컴퓨터(1100)는, 상위 분할 문자 코드 출현 빈도 집계 테이블에 대하여, 단계 S3403에서 얻어진 상위 분할 문자 코드와 동일 분할 문자 코드의 출현 횟수를 1 가산한다(단계 S3404).
도 35는 상위 분할 문자 코드 출현 빈도 집계 테이블을 도시한 설명도이다. 상위 분할 문자 코드 출현 빈도 집계 테이블(3500)은, RAM(903)이나 자기 디스크(905) 등의 기억 장치에 기억되어 있고, 해당하는 상위 분할 문자 코드가 출현할 때마다 출현 횟수를 1씩 증가시킨다.
또한, 도 34에 있어서, 컴퓨터(1100)는, 하위 분할 문자 코드 출현 빈도 집계 테이블에 대하여, 단계 S3403에서 얻어진 하위 분할 문자 코드와 동일 분할 문자 코드의 출현 횟수를 1 가산한다(단계 S3405).
도 36은 하위 분할 문자 코드 출현 빈도 집계 테이블을 도시한 설명도이다. 하위 분할 문자 코드 출현 빈도 집계 테이블(3600)은, RAM(903)이나 자기 디스크(905) 등의 기억 장치에 기억되어 있고, 해당하는 하위 분할 문자 코드가 출현할 때마다 출현 횟수를 1씩 증가시킨다.
또한, 도 34에 있어서, 컴퓨터(1100)는, 2그램 문자열 특정 처리를 실행한다(단계 S3406). 2그램 문자열 특정 처리(단계 S3406)에서는, 대상 문자를 기점으로 하는 2그램 문자열을 특정한다. 2그램 문자열 특정 처리(단계 S3406)의 상세한 것은 도 37에서 설명한다.
컴퓨터(1100)는, 2그램 문자열 출현 빈도 집계 테이블에 대하여, 2그램 문자열 특정 처리(단계 S3406)에서 특정된 2그램 문자열의 출현 횟수를 1 가산한다(단계 S3407).
도 37은 도 34에서 도시한 2그램 문자열 특정 처리(단계 S3406)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 대상 문자에 대하여, 대상 문자는 분할되었는지 여부를 판단한다(단계 S3701). 즉, 컴퓨터(1100)는, 대상 문자가 분할 문자 코드인지 여부를 판단한다. 분할되어 있지 않은 경우(단계 S3701 : No), 즉, 단일 문자인 경우, 컴퓨터(1100)는, 1개 전의 문자가 있는지 여부를 판단한다(단계 S3702).
1개 전의 문자가 있는 경우(단계 S3702 : Yes), 컴퓨터(1100)는, 1개 전의 문자는 분할되었는지 여부를 판단한다(단계 S3703). 즉, 컴퓨터(1100)는, 1개 전의 문자가 분할 문자 코드인지 여부를 판단한다. 분할되어 있지 않은 경우(단계 S3703 : No), 즉, 단일 문자인 경우, 컴퓨터(1100)는, 대상 문자의 1개 전의 단일 문자와 대상 문자(단일 문자)로 이루어지는 문자열을, 2그램 문자열로 결정한다(단계 S3704). 그리고, 단계 S3407로 이행한다.
한편, 단계 S3703에 있어서, 1개 전의 문자가 분할된 경우(단계 S3703 : Yes), 즉, 분할 문자 코드인 경우, 그 1개 전의 문자인 분할 문자 코드는, 하위 분할 문자 코드가 된다. 따라서, 컴퓨터(1100)는, 1개 전의 문자인 하위 분할 문자 코드와 대상 문자로 이루어지는 문자열을, 2그램 문자열로 결정한다(단계 S3705). 그리고, 단계 S3407로 이행한다.
또한, 단계 S3702에 있어서, 1개 전의 문자가 없는 경우(단계 S3702 : No), 대상 문자만이 되기 때문에, 2그램 문자열을 결정하지 않고, 단계 S3407로 이행한다.
또한, 단계 S3701에 있어서, 대상 문자가 분할된 경우(단계 S3701 : Yes), 즉, 분할 문자 코드인 경우, 컴퓨터(1100)는, 그 분할 문자 코드가 상위 분할 문자 코드인지 하위 분할 문자 코드인지를 판단한다(단계 S3706).
상위 분할 문자 코드인 경우(단계 S3706 : 상위), 컴퓨터(1100)는, 1개 전의 문자는 분할되었는지 여부를 판단한다(단계 S3707). 즉, 1개 전의 문자가 분할 문자 코드인지 여부를 판단한다. 분할되어 있지 않은 경우(단계 S3707 : No), 즉, 단일 문자인 경우, 컴퓨터(1100)는, 대상 문자의 1개 전의 단일 문자와 대상 문자로부터 분할된 상위 분할 문자 코드로 이루어지는 문자열을, 2그램 문자열로 결정한다(단계 S3708). 그리고, 단계 S3407로 이행한다.
한편, 단계 S3707에 있어서, 1개 전의 문자가 분할된 경우(단계 S3707 : Yes), 즉, 분할 문자 코드인 경우, 그 1개 전의 문자인 분할 문자 코드는, 하위 분할 문자 코드가 된다. 따라서, 컴퓨터(1100)는, 1개 전의 문자인 하위 분할 문자 코드와 대상 문자로부터 분할된 상위 분할 문자 코드로 이루어지는 문자열을, 2그램 문자열로 결정한다(단계 S3709). 그리고, 단계 S3407로 이행한다.
또한, 단계 S3706에 있어서, 하위 분할 문자 코드인 경우(단계 S3706 : 하위), 컴퓨터(1100)는, 대상 문자로부터 분할된 상위 분할 문자 코드 및 하위 분할 문자 코드로 이루어지는 문자열을, 2그램 문자열로 결정한다(단계 S3710). 그리고, 단계 S3407로 이행한다.
이 2그램 문자열 특정 처리(단계 S3406)에 의하면, 대상 문자가 분할된 경우라도 2그램 문자열을 특정할 수 있다. 또한, 1문자 시프트에 따라 2그램 문자열을 특정하기 때문에, 기초 단어의 압축 부호 맵(M) 및 특정 단일 문자의 압축 부호 맵(M)과 동시 병행으로 생성할 수 있다.
이와 같이, 전술한 정보 생성에 의하면, 목표 출현율(Pw, Pc)에 의해, 맵 작성되는 기초 단어수 및 단일 문자수가 제한되기 때문에, 쓸데 없는 맵 작성이 없어져, 맵 작성의 고속화 및 맵 사이즈의 최적화를 동시에 실현할 수 있다. 또한, 1문자 시프트에 의해 복수 종류의 맵 작성을 동시 병행으로 실행할 수 있어, 고정밀도의 검색에 이용하는 복수 종류의 맵 작성의 효율화를 도모할 수 있다.
도 38은 2그램 문자열 출현 빈도 집계 테이블을 도시한 설명도이다. 2그램 문자열 출현 빈도 집계 테이블(3800)은, RAM(903)이나 자기 디스크(905) 등의 기억 장치에 기억되어 있고, 해당하는 2그램 문자열이 출현할 때마다 출현 횟수를 1씩 증가시킨다.
이 후, 컴퓨터(1100)는, 대상 문자의 후속 문자가 대상 파일(Fi) 내에 있는지 여부를 판단하고(단계 S3408), 후속 문자가 있는 경우(단계 S3408 : Yes), 후속 문자를 대상 문자로 설정하고(단계 S3409), 단계 S3402로 되돌아간다. 한편, 후속 문자가 없는 경우(단계 S3408 : No), 대상 파일(Fi)의 재집계 처리(단계 S3303)를 종료하고, 단계 S3304로 이행한다.
이에 따라, 대상 파일(Fi)마다, 대상 파일(Fi) 내에 존재하는 상위 분할 문자 코드, 하위 분할 문자 코드, 및 2그램 문자열의 출현 횟수를 집계할 수 있다.
(허프만 트리 생성 처리(단계 S2504))
도 39는 도 25에 도시한 허프만 트리 생성 처리(단계 S2504)의 상세한 처리 순서예를 도시한 플로우차트이다. 도 39에 있어서, 컴퓨터(1100)는, 압축 부호 길이의 상한 길이(N)를 결정한다(단계 S3901). 다음으로, 컴퓨터(1100)는, 보정 처리를 실행한다(단계 S3902). 여기서 보정 처리란, 도 15∼도 17에서 설명한 바와 같이, 문자 정보마다의 발생 확률 및 압축 부호 길이를, 압축 부호 길이의 상한 길이(N)를 이용하여 보정하는 처리이다.
다음으로, 컴퓨터(1100)는, 문자 정보마다 리프의 구조체를 생성한다(단계 S3903). 그리고, 컴퓨터(1100)는, 브랜치수 특정 처리를 실행한다(단계 S3904). 브랜치수 특정 처리(단계 S3904)에서는, 압축 부호 길이마다의 리프당의 브랜치수를 특정한다. 브랜치수 특정 처리(단계 S3904)의 상세한 것은 도 40에서 설명한다.
그리고, 컴퓨터(1100)는, 구축 처리를 실행한다(단계 S3905). 브랜치수 특정 처리(단계 S3904)에 의해 리프의 구조체마다의 브랜치수가 특정되기 때문에, 우선, 컴퓨터(1100)는, 리프의 구조체마다, 브랜치수분의 리프에 대한 포인터군을 생성한다. 그리고, 생성된 각 리프의 구조체에 관한 리프에 대한 포인터군을 집약하여 루트의 구조체로 한다. 이에 따라, 2N 분지 무절점 허프만 트리(H)가 생성되게 된다. 또, 생성된 2N 분지 무절점 허프만 트리(H)는, 컴퓨터(1100) 내의 기억 장치(RAM(903)이나 자기 디스크(905) 등)에 저장된다. 이 후, 도 25의 맵 작성 처리(단계 S2505)로 이행한다.
도 40은 도 39에 도시한 브랜치수 특정 처리(단계 S3904)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 최대 압축 부호 길이 CLmax(=N)와 최소 압축 부호 길이 CLmin(=M)의 차분 D(=N-M)를 산출한다(단계 S4001). 예컨대, N=11의 경우, 도 26을 참조하면, M=6이다. 따라서, D=5이다.
다음으로, 컴퓨터(1100)는, 2의 멱수의 변수(j)를 j=0으로 하고, 압축 부호 길이의 변수 CL을 CL=N으로 한다(단계 S4002). 그리고, 컴퓨터(1100)는, j>D인지 여부를 판단한다(단계 S4003). j>D가 아닌 경우(단계 S4003 : No), 컴퓨터(1100)는, 압축 부호 길이(CL)의 리프당의 브랜치수 b(CL)을 산출한다(단계 S4004). 압축 부호 길이(CL)의 리프당의 브랜치수 b(CL)은, b(CL)=2j로 산출된다. 예컨대, j=0일 때, 압축 부호 길이(CL)=N=11이기 때문에, 압축 부호 길이 11비트에서의 리프당의 브랜치수 b(11)은, b(11)=2j=20=1이 된다.
다음으로, 컴퓨터(1100)는, 압축 부호 길이(CL)의 총브랜치수 B(L)을 산출한다(단계 S4005). 압축 부호 길이(CL)의 총브랜치수 B(L)은, B(L)=L(CL)×b(CL)로 산출된다. L(CL)은, 압축 부호 길이(CL)에서의 리프수(문자 정보의 종류수)이다. 예컨대, j=0일 때, 압축 부호 길이(CL)=N=11이기 때문에, 압축 부호 길이 11비트에서의 총브랜치수 B(L)은, 1216×20=1216이 된다.
이 후, 컴퓨터(1100)는, j를 인크리먼트하고, 압축 부호 길이(CL)를 디크리먼트하고(단계 S4006), 단계 S4003으로 되돌아가, 인크리먼트 후의 j가 j>D인지 여부가 판단된다. 또, N=11의 경우에는, j=D가 되면 j=D=5가 되고, CL=M=6이 된다. 따라서, 단계 S4004에서는, 압축 부호 길이(CL)(5비트)의 리프당의 브랜치수 b(6)은, b(6)=26=64가 된다. 마찬가지로, 총브랜치수 B(L)은, B(6)=0×26=0이 된다. 그리고, j>D인 경우(단계 S4003 : Yes), 구축 처리(단계 S3905)로 이행한다.
도 41은 도 39에 도시한 구축 처리(단계 S3905)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 압축 부호 길이(CL)를 CL=CLmin=M으로 한다(단계 S4101). 다음으로, 컴퓨터(1100)는, 압축 부호 길이(CL)에서의 미선택의 리프가 있는지 여부를 판단한다(단계 S4102). 미선택의 리프가 있는 경우(단계 S4102 : Yes), 컴퓨터(1100)는, 리프에 대한 포인터 생성 처리(단계 S4103)를 실행하고, 단계 S4102로 되돌아간다. 리프에 대한 포인터 생성 처리(단계 S4103)에서는, 리프의 구조체마다, 압축 부호 길이(CL)에 따른 브랜치수분의 리프에 대한 포인터군을 생성한다. 또, 리프에 대한 포인터 생성 처리(단계 S4103)의 상세한 것은 도 42에서 설명한다.
한편, 단계 S4102에 있어서, 미선택의 리프가 없는 경우(단계 S4102 : No), 컴퓨터(1100)는, CL>N인지 여부를 판단한다(단계 S4104). CL>N이 아닌 경우(단계 S4104 : No), 컴퓨터(1100)는, CL을 인크리먼트하고(단계 S4105), 단계 S4102로 되돌아간다. 한편, CL>N인 경우(단계 S4104 : Yes), 2N 분지 무절점 허프만 트리(H)가 구축된 것이 되고, 단계 S2505로 이행하게 된다. 또, 제1 영역∼제5 영역 내의 정보는, 이 구축 처리(단계 S3905)에 있어서 저장되게 된다.
도 42는 도 41에 도시한 리프에 대한 포인터 생성 처리(단계 S4103)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 미선택의 리프 L을 선택하고(단계 S4201), 선택 리프에 대한 포인터수(k)를 k=1로 설정한다(단계 S4202). 그리고, 컴퓨터(1100)는, 선택 리프에 대한 포인터 PL(k)의 선행 비트열을, 선택 리프의 압축 부호로 설정한다(단계 S4203). 예컨대, 상한 길이(N)=11에 관해서는, 선택 리프가, 문자 정보 「0」의 리프의 구조체인 경우, 압축 부호는 「000000」이다. 따라서, 선택 리프에 대한 포인터 PL(k)의 선행 비트열도, 「000000」이 된다.
다음으로, 컴퓨터(1100)는, 선택 리프에 대한 포인터 PL(k)의 후속 비트열의 비트 길이를, 최대 압축 부호 길이(N)로부터 선택 리프의 압축 부호 길이(CL)를 뺀 차분으로 하고, 후속 비트열의 초기값을 모두 0으로 설정한다(단계 S4204). 예컨대, 선택 리프가, 문자 정보 「0」의 리프의 구조체인 경우, 압축 부호 길이(CL)는 6비트이기 때문에, 후속 비트열의 비트 길이는 5비트(=11-6)가 된다. k=1의 경우에는, 후속 비트열은 모두 0이 되기 때문에, 후속 비트열은, 5비트의 「00000」이 된다.
그리고, 컴퓨터(1100)는, 선택 리프에 대한 포인터 PL(k)를 루트의 구조체에 저장한다(단계 S4205). 이 후, 컴퓨터(1100)는, k>b(CL)인지 여부를 판단한다(단계 S4206). b(CL)은, 선택 리프의 압축 부호 길이(CL)의 리프당의 브랜치수이다. k>b(CL)이 아닌 경우(단계 S4206 : No), 선택 리프에 할당된 모든 브랜치에 관해 리프에 대한 포인터가 생성되어 있지 않기 때문에, 컴퓨터(1100)는, k를 인크리먼트한다(단계 S4207).
그리고, 컴퓨터(1100)는, 현재의 후속 비트열을 인크리먼트하고, 인크리먼트 후의 후속 비트열을 선행 비트열의 말단에 연결함으로써, 새롭게, 선택 리프에 대한 포인터 PL(k)를 생성한다(단계 S4208). 그리고, 컴퓨터(1100)는, 선택 리프에 대한 포인터 PL(k)를 루트의 구조체에 저장하고(단계 S4209), 단계 S4206으로 되돌아간다. 단계 S4206∼단계 S4209를 반복함으로써, 리프당의 브랜치수분의 리프에 대한 포인터군이 생성되게 된다. 그리고, 단계 S4206에 있어서, k>b(CL)인 경우(단계 S4206 : Yes), 단계 S4102로 이행한다.
이와 같이, 대상 파일군(Fs)에 출현하는 문자 정보의 종류수에 따라, 2N 분지 무절점 허프만 트리(H)의 최대 브랜치수(2N)를 최적의 개수로 설정할 수 있기 때문에, 2N 분지 무절점 허프만 트리(H)의 사이즈의 적정화를 도모할 수 있다. 또한, 본 실시형태에 의하면, 상한 길이(N)가 2∼4의 정수배가 아닌 경우(예컨대, 상한 길이(N)=11, 13)라도, 압축 효율이 좋은 2N 분지 무절점 허프만 트리(H)를 생성할 수 있다.
이 후, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)의 각 리프의 구조체와, 기초 단어의 구조체, 특정 문자 코드의 구조체, 분할 문자 코드의 구조체를, 도 17의 문자 정보 테이블을 참조하여, 서로 관련짓는다. 구체적으로는, 전술한 바와 같이, 리프의 구조체에는, 상기 리프에 저장되어 있는 압축 부호에 대응하는 특정 문자, 분할 문자 코드 및 리프에 대한 포인터나 기초 단어에 대한 포인터를 저장한다.
또한, 컴퓨터(1100)는, 기초 단어의 구조체의 기초 단어마다, 대응하는 압축 부호를 저장하는 리프에 대한 포인터를 저장한다. 또한, 컴퓨터(1100)는, 특정 문자 코드의 구조체의 특정 문자마다, 대응하는 압축 부호를 저장하는 리프에 대한 포인터를 저장한다. 또한, 컴퓨터(1100)는, 분할 문자 코드의 구조체의 분할 문자 코드마다, 대응하는 압축 부호를 저장하는 리프에 대한 포인터를 저장한다.
(맵 작성 처리(단계 S2505))
도 43은 도 25에 도시한 맵 작성 처리(단계 S2505)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 파일 번호(i)를 i=1로 설정하고(단계 S4301), 대상 파일(Fi)을 판독한다(단계 S4302). 그리고, 컴퓨터(1100)는, 대상 파일(Fi)의 맵 작성 처리를 실행한다(단계 S4303). 대상 파일(Fi)의 맵 작성 처리(단계 S4303)의 상세한 것은, 도 44에서 설명한다. 이 후, 컴퓨터(1100)는, 파일 번호(i)가 i>α(α는 대상 파일(Fs)의 파일 총수)인지 여부를 판단한다(단계 S4304).
i>α가 아닌 경우(단계 S4304 : No), 컴퓨터(1100)는, i를 인크리먼트하고(단계 S4305), 단계 S4302로 되돌아간다. 한편, i>α인 경우(단계 S4304 : Yes), 맵 작성 처리(단계 S2505)가 종료된다. 이 맵 작성 처리(단계 S2505)에 의하면, 대상 파일(Fi)마다 대상 파일(Fi)의 맵 작성 처리(단계 S4303)를 실행할 수 있다.
도 44는 도 43에 도시한 대상 파일(Fi)의 맵 작성 처리(단계 S4303)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 대상 문자를 대상 파일(Fi)의 선두 문자로 하고(단계 S4401), 기초 단어 출현 맵 작성 처리(단계 S4402), 특정 단일 문자 출현 맵 작성 처리(단계 S4403), 2그램 문자열 출현 맵 작성 처리(단계 S4404)를 실행한다.
기초 단어 출현 맵 작성 처리(단계 S4402)의 상세한 것은 도 45에서 설명한다. 또한, 특정 단일 문자 출현 맵 작성 처리(단계 S4403)의 상세한 것은 도 46에서 설명한다. 또한, 2그램 문자열 출현 맵 작성 처리(단계 S4404)의 상세한 것은 도 48에서 설명한다.
이 후, 컴퓨터(1100)는, 대상 문자가 대상 파일(Fi)의 말미 문자인지 여부를 판단한다(단계 S4405). 대상 문자가 대상 파일(Fi)의 말미 문자가 아닌 경우(단계 S4405 : No), 컴퓨터(1100)는, 대상 문자를 말미 방향으로 1문자 시프트하고(단계 S4406), 단계 S4402로 되돌아간다. 한편, 대상 문자가 대상 파일(Fi)의 말미 문자인 경우(단계 S4405 : Yes), 단계 S4304로 이행하고, 대상 파일(Fi)의 맵 작성 처리(단계 S4303)를 종료한다.
이 대상 파일(Fi)의 맵 작성 처리(단계 S4303)에 의하면, 기초 단어 출현 맵, 특정 단일 문자 출현 맵 및 2그램 문자열 출현 맵을, 대상 문자를 1문자씩 시프트하면서, 동시 병행으로 생성할 수 있다.
도 45는 도 44에서 도시한 기초 단어 출현 맵 작성 처리(단계 S4402)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 대상 문자에 관해 최장 일치 검색 처리를 실행한다(단계 S4501). 최장 일치 검색 처리(단계 S4501)의 상세한 처리 순서는, 도 31에 도시한 최장 일치 검색 처리(단계 S2901)와 동일 처리 내용이므로 설명을 생략한다.
그리고, 컴퓨터(1100)는, 최장 일치한 기초 단어, 즉, 기초 단어가 있는지 여부를 판단한다(단계 S4502). 최장 일치한 기초 단어가 없는 경우(단계 S4502 : No), 특정 단일 문자 출현 맵 작성 처리(단계 S4403)로 이행한다. 한편, 최장 일치한 기초 단어가 있는 경우(단계 S4502 : Yes), 컴퓨터(1100)는, 그 최장 일치한 기초 단어에 관해, 기초 단어 출현 맵이 설정 완료되었는지 여부를 판단한다(단계 S4503).
설정 완료된 경우(단계 S4503 : Yes), 단계 S4506으로 이행한다. 한편, 설정 완료되지 않은 경우(단계 S4503 : No), 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)에서의 최장 일치한 기초 단어의 리프에 액세스하여, 그 압축 부호를 취득한다(단계 S4504). 그리고, 컴퓨터(1100)는, 취득한 압축 부호를, 최장 일치한 기초 단어에 관한 기초 단어 출현 맵에 대한 포인터로 설정하고(단계 S4505), 단계 S4506으로 이행한다. 이 후, 단계 S4506에서는, 컴퓨터(1100)는, 최장 일치한 기초 단어에 관한 기초 단어 출현 맵의 대상 파일(Fi)의 비트를 ON으로 한다(단계 S4506).
이에 따라, 기초 단어 출현 맵 작성 처리(단계 S4402)를 종료하고, 특정 단일 문자 출현 맵 작성 처리(단계 S4403)로 이행한다. 이 기초 단어 출현 맵 작성 처리(단계 S4402)에 의하면, 대상 문자마다 최장 일치한 기초 단어를 기초 단어로 하여 맵 작성할 수 있다.
도 46은 도 44에서 도시한 특정 단일 문자 출현 맵 작성 처리(단계 S4403)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 특정 단일 문자의 구조체에 대하여 대상 문자의 2분 탐색을 행하여(단계 S4601), 일치했는지 여부를 판단한다(단계 S4602). 일치하는 단일 문자가 없었던 경우(단계 S4602 : No), 컴퓨터(1100)는, 분할 문자 코드 출현 맵 작성 처리를 실행하고(단계 S4603), 2그램 문자열 출현 맵 작성 처리(단계 S4404)로 이행한다. 분할 문자 코드 출현 맵 작성 처리(단계 S4603)의 상세한 것은 도 47에서 설명한다.
한편, 단계 S4602에 있어서, 2분 탐색에 의해 대상 문자와 일치하는 단일 문자가 있었던 경우(단계 S4602 : Yes), 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)에서의 2분 탐색된 단일 문자의 리프에 액세스하여, 그 압축 부호를 취득한다(단계 S4604). 그리고, 컴퓨터(1100)는, 그 취득된 압축 부호에 관해, 특정 단일 문자 출현 맵이 설정 완료되었는지 여부를 판단한다(단계 S4605). 설정 완료된 경우(단계 S4605 : Yes), 단계 S4607로 이행한다.
한편, 설정 완료되지 않은 경우(단계 S4605 : No), 컴퓨터(1100)는, 취득한 압축 부호를, 2분 탐색된 단일 문자에 관한 특정 단일 문자 출현 맵에 대한 포인터로 설정하고(단계 S4606), 단계 S4607로 이행한다. 이 후, 단계 S4607에서는, 2분 탐색된 단일 문자에 관한 특정 단일 문자 출현 맵의 대상 파일(Fi)의 비트를 ON으로 한다(단계 S4607).
이에 따라, 특정 단일 문자 출현 맵 작성 처리(단계 S4403)를 종료하고, 2그램 문자열 출현 맵 작성 처리(단계 S4404)로 이행한다. 이 특정 단일 문자 출현 맵 작성 처리(단계 S4403)에 의하면, 2분 탐색된 대상 문자를 특정 단일 문자로 하여 맵 작성할 수 있다.
도 47은 도 46에서 도시한 분할 문자 코드 출현 맵 작성 처리(단계 S4603)의 상세한 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 대상 문자를 분할하고(단계 S4701), 2N 분지 무절점 허프만 트리(H)에서의 상위 분할 문자 코드의 리프에 액세스하여, 압축 부호를 취득한다(단계 S4702). 그리고, 컴퓨터(1100)는, 그 취득된 압축 부호에 관해, 상위 분할 문자 코드 출현 맵이 설정 완료되었는지 여부를 판단한다(단계 S4703).
설정 완료된 경우(단계 S4703 : Yes), 단계 S4705로 이행한다. 한편, 설정 완료되지 않은 경우(단계 S4703 : No), 컴퓨터(1100)는, 취득한 압축 부호를, 상위 분할 문자 코드의 출현 맵에 대한 포인터로 설정하고(단계 S4704), 단계 S4705로 이행한다. 이 후, 단계 S4705에서는, 컴퓨터(1100)는, 대상 문자로부터 분할된 상위 분할 문자 코드의 출현 맵의 대상 파일(Fi)의 비트를 ON으로 한다(단계 S4705).
또한, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)에서의 하위 분할 문자 코드의 리프에 액세스하여, 압축 부호를 취득한다(단계 S4706). 그리고, 컴퓨터(1100)는, 그 취득된 압축 부호에 관해, 하위 분할 문자 코드의 출현 맵이 설정 완료되었는지 여부를 판단한다(단계 S4707). 설정 완료된 경우(단계 S4707 : Yes), 단계 S4709로 이행한다.
한편, 설정 완료되지 않은 경우(단계 S4707 : No), 컴퓨터(1100)는, 취득한 압축 부호를, 하위 분할 문자 코드의 출현 맵에 대한 포인터로 설정하고(단계 S4708), 단계 S4709로 이행한다. 이 후, 단계 S4709에서는, 컴퓨터(1100)는, 대상 문자로부터 분할된 하위 분할 문자 코드의 출현 맵의 대상 파일(Fi)의 비트를 ON으로 한다(단계 S4709).
이에 따라, 분할 문자 코드 출현 맵 작성 처리(단계 S4603)를 종료하고, 2그램 문자열 출현 맵 작성 처리(단계 S4404)로 이행한다. 이 분할 문자 코드 출현 맵 작성 처리(단계 S4603)에 의하면, 목표 출현율(Pc)에 따른 순위보다 하위의 단일 문자에 관해서는, 출현 빈도가 낮기 때문에, OFF의 비트가 다수 출현하게 된다.
그러나, 목표 출현율(Pc)에 따른 순위보다 하위의 단일 문자에 관해서는 특정 단일 문자의 출현 맵의 생성 대상 외로 함으로써, 특정 단일 문자의 압축 부호 맵(Ms)의 맵 사이즈의 최적화를 도모할 수 있다. 또한, 분할함으로써, 목표 출현율(Pc)에 따른 순위보다 하위의 단일 문자에 관해서는, 상위 분할 문자 코드의 압축 부호 맵(Ms) 및 하위 분할 문자 코드의 압축 부호 맵(Ms)과 같은 맵 사이즈가 고정화된 맵으로 설정된다. 따라서, 목표 출현율(Pc)을 어떠한 출현율로 설정하더라도, 맵 사이즈의 증대화를 방지할 수 있고, 메모리 절감화를 도모할 수 있다.
도 48은 도 44에 도시한 2그램 문자열 맵 작성 처리(단계 S4404)의 상세한 처리 순서예를 도시한 플로우차트이다. 도 48에 있어서, 우선, 컴퓨터(1100)는, 2그램 문자열 특정 처리를 실행한다(단계 S4801). 2그램 문자열 특정 처리(단계 S4801)의 상세한 처리 순서는, 도 37에 도시한 2그램 문자열 특정 처리(단계 S4806)와 동일 처리 내용이므로 설명을 생략한다.
다음으로, 컴퓨터(1100)는, 2그램 문자열 특정 처리(단계 S4801)에 의해 2그램 문자열이 특정되었는지 여부를 판단한다(단계 S4802). 특정되지 않은 경우(단계 S4802 : No), 도 44의 단계 S4405로 이행한다.
한편, 특정된 경우(단계 S4802 : Yes), 컴퓨터(1100)는, 2그램 문자열 출현 맵 생성 처리를 실행하고(단계 S4803), 단계 S4405로 이행한다.
도 49는 2그램 문자열 출현 맵 생성 처리(단계 S4803)의 상세한 처리 순서예를 도시한 플로우차트이다. 도 49에 있어서, 우선, 컴퓨터(1100)는, 도 48의 2그램 문자열 특정 처리(단계 S4801)에서 특정된 2그램 문자열의 제1 그램(특정 단일 문자 또는 분할 문자 코드)에 관해, 2N 분지 무절점 허프만 트리(H)의 리프에 액세스하여, 압축 부호를 취득한다(단계 S4901). 마찬가지로, 컴퓨터(1100)는, 제2 그램(특정 단일 문자 또는 분할 문자 코드)에 관해, 2N 분지 무절점 허프만 트리(H)의 리프에 액세스하여, 압축 부호를 취득한다(단계 S4902).
그리고, 컴퓨터(1100)는, 제1 그램의 압축 부호와 제2 그램의 압축 부호를 연결한다(단계 S4903). 그리고, 컴퓨터(1100)는, 연결 압축 부호를 포인터로 하는 출현 맵이 설정 완료되었는지 여부를 판단한다(단계 S4904). 설정 완료된 경우(단계 S4904 : Yes), 단계 S4906으로 이행한다.
한편, 설정 완료되지 않은 경우(단계 S4904 : No), 컴퓨터(1100)는, 연결 압축 부호를, 특정된 2그램 문자열의 출현 맵에 대한 포인터로 설정한다(단계 S4905). 이 후, 단계 S4906에서는, 컴퓨터(1100)는, 특정된 2그램 문자열의 출현 맵의 대상 파일(Fi)의 비트를 ON으로 한다(단계 S4906).
이에 따라, 2그램 문자열 출현 맵 생성 처리(단계 S4803)를 종료하고, 단계 S4405로 이행한다. 이 2그램 문자열 출현 맵 생성 처리(단계 S4803)에 의하면, 2그램 문자열의 연결 압축 부호에 의해, 2그램 문자열의 출현 맵을 직접 지정할 수 있다.
<압축 처리의 구체예>
다음으로, 대상 파일(Fi)의 압축 처리의 구체예에 관해 설명한다. 전술한 바와 같이, 압축 부호 맵(Ms)을 생성한 경우에는, 검색 문자열을 압축한 압축 부호열에 의해 압축 부호 맵(Ms) 내의 출현 맵을 포인트하는 것이 가능해진다. 이하, 압축 처리의 구체예에 관해 설명한다.
도 50은 2N 분지 무절점 허프만 트리(H)를 이용한 압축 처리의 구체예를 도시한 설명도이다. 우선, 컴퓨터(1100)는, 대상 파일군(Fs)으로부터 1문자째의 압축 대상 문자 코드를 취득하고, 대상 파일(Fi) 상의 위치를 유지해 둔다. 그리고, 컴퓨터(1100)는, 기초 단어의 구조체(2300)에 대하여 2분 트리 탐색을 행한다. 기초 단어는 2문자 이상의 문자 코드열이기 때문에, 1문자째의 압축 대상 문자 코드가 히트한 경우, 2문자째의 문자 코드를 압축 대상 문자 코드로서 취득한다.
그리고, 2문자째의 문자 코드는, 1문자째의 압축 대상 문자 코드가 히트한 위치로부터 탐색한다. 3문자째 이후도, 불일치의 압축 대상 문자 코드가 출현할 때까지 반복하여 2분 트리 탐색을 행한다. 일치하는 기초 단어 ra(a는 리프의 번호)가 탐색된 경우, 기초 단어의 구조체(2300)에 있어서 대응지어져 있는 리프 La에 대한 포인터에 의해 리프 La의 구조체에 액세스한다. 그리고, 컴퓨터(1100)는, 액세스처인 리프 La의 구조체에 저장되어 있는 기초 단어 ra의 압축 부호를 탐색하여, 압축 버퍼(5000)에 저장한다.
한편, 불일치의 압축 문자 코드가 출현한 경우, 기초 단어의 구조체(2300)에 대한 2분 트리 탐색을 종료한다(EOT(End Of Transmission)까지 진행함). 그리고, 컴퓨터(1100)는, 1문자째의 압축 대상 문자 코드를 재차 레지스터에 세트하고, 특정 단일 문자의 구조체(2100)에 대한 2분 트리 탐색을 행한다.
일치하는 문자 코드 eb(b는 리프의 번호)가 탐색된 경우, 컴퓨터(1100)는, 그 리프 Lb에 대한 포인터에 의해 리프 Lb의 구조체에 액세스한다. 그리고, 컴퓨터(1100)는, 액세스처인 리프 Lb의 구조체에 저장되어 있는 문자 코드 eb의 압축 부호를 탐색하여, 압축 버퍼(5000)에 저장한다.
한편, 일치하는 문자 코드가 출현하지 않고 2분 트리 탐색을 종료한 경우, 압축 대상 문자 코드는 특정 단일 문자 코드가 아니기 때문에, 컴퓨터(1100)는, 상위 8비트와 하위 8비트로 분할한다. 그리고, 컴퓨터(1100)는, 상위 8비트의 분할 문자 코드에 관해, 분할 문자 코드의 구조체(2200)에 대한 2분 트리 탐색을 행한다. 일치하는 분할 문자 코드 Dc1(c1은 리프의 번호)이 탐색된 경우, 컴퓨터(1100)는, 그 리프 Lc1에 대한 포인터에 의해 리프 Lc1의 구조체에 액세스한다. 그리고, 컴퓨터(1100)는, 액세스처인 리프 Lc1의 구조체에 저장되어 있는 분할 문자 코드 Dc1의 압축 부호를 탐색하여, 압축 버퍼(5000)에 저장한다.
계속해서, 컴퓨터(1100)는, 하위 8비트의 분할 문자 코드에 관해, 분할 문자 코드의 구조체에 대한 2분 트리 탐색을 행한다. 일치하는 분할 문자 코드 Dc2(c2는 리프의 번호)가 탐색된 경우, 컴퓨터(1100)는, 그 리프 Lc2에 대한 포인터에 의해 리프 Lc2의 구조체에 액세스한다. 그리고, 컴퓨터(1100)는, 액세스처인 리프 Lc2의 구조체에 저장되어 있는 분할 문자 코드 Dc2의 압축 부호를 탐색하여, 압축 버퍼(5000)에 저장한다. 이에 따라, 대상 파일(Fi)이 압축되게 된다.
<대상 파일군(Fs)의 압축 처리>
다음으로, 제1 압축부(1103)에 의한 대상 파일군(Fs)의 압축 처리의 처리 순서에 관해 설명한다.
도 51은 제1 압축부(1103)에 의한 2N 분지 무절점 허프만 트리(H)를 이용한 대상 파일군(Fs)의 압축 처리 순서예를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 파일 번호 : p를 p=1로 하고(단계 S5101), 대상 파일(Fp)을 판독한다(단계 S5102). 다음으로, 컴퓨터(1100)는, 압축 처리를 실행하고(단계 S5103), 파일 번호 : p를 인크리먼트한다(단계 S5104). 압축 처리(단계 S5103)의 상세한 것은 도 52에서 설명한다.
그리고, 컴퓨터(1100)는, p>α인지 여부를 판단한다(단계 S5105). α는 대상 파일군(Fs)의 파일 총수이다. p>α가 아닌 경우(단계 S5105 : No), 단계 S5102로 되돌아간다. 한편, p>α인 경우(단계 S5105 : Yes), 대상 파일군(Fs)의 압축 처리를 종료한다.
도 52는 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제1 플로우차트이다. 도 52에 있어서, 우선, 컴퓨터(1100)는, 대상 파일군(Fs)에 압축 대상 문자 코드가 있는지 여부를 판단한다(단계 S5201). 있는 경우(단계 S5201 : Yes), 컴퓨터(1100)는, 압축 대상 문자 코드를 취득하여 레지스터에 세트한다(단계 S5202). 그리고, 컴퓨터(1100)는, 선두의 압축 대상 문자 코드인지 여부를 판단한다(단계 S5203).
여기서, 선두의 압축 대상 문자 코드란, 미압축의 1문자째의 문자 코드를 말한다. 선두인 경우(단계 S5203 : Yes), 컴퓨터(1100)는, 그 압축 대상 문자 코드의 대상 파일군(Fs) 상의 위치(선두 위치)가 되는 포인터를 취득하고(단계 S5204), 단계 S5205로 이행한다. 한편, 선두가 아닌 경우(단계 S5203 : No), 선두 위치를 취득하지 않고 단계 S5205로 이행한다.
그리고, 컴퓨터(1100)는, 기초 단어의 구조체(2300)에 대하여 2분 트리 탐색을 행한다(단계 S5205). 압축 대상 문자 코드가 일치한 경우(단계 S5206 : Yes), 컴퓨터(1100)는, 연속하여 일치한 문자 코드열이 기초 단어(의 문자 코드열)에 해당하는지 여부를 판단한다(단계 S5207). 해당하지 않는 경우(단계 S5207 : No), 컴퓨터(1100)는, 단계 S5202로 되돌아가 후속의 문자 코드를 압축 대상 문자 코드로서 취득한다. 이 경우, 후속의 문자 코드는 선두가 아니기 때문에, 선두 위치는 취득하지 않게 된다.
한편, 단계 S5207에 있어서, 기초 단어에 해당하는 경우(단계 S5207 : Yes), 컴퓨터(1100)는, 해당하는 기초 단어의 리프(L#)에 대한 포인터에 의해 리프(L#)의 구조체에 액세스한다(단계 S5208). 그리고, 컴퓨터(1100)는, 포인트된 리프(L#)의 구조체에 저장되어 있는 기초 단어의 압축 부호를 추출한다(단계 S5209).
이 후, 컴퓨터(1100)는, 추출된 압축 부호를 압축 버퍼(5000)에 저장하고(단계 S5210), 단계 S5201로 되돌아간다. 이 루프가 기초 단어의 압축 처리의 흐름이 된다. 단계 S5201에 있어서, 압축 대상 문자 코드가 없는 경우(단계 S5201 : No), 컴퓨터(1100)는, 대상 파일(Fp)로부터 압축된 압축 파일(fp)을 압축 버퍼(5000)로부터 파일 출력하여 보존한다(단계 S5211). 그리고, 단계 S5104로 이행한다. 한편, 단계 S5206에 있어서 불일치가 된 경우(단계 S5206 : No), 16비트의 문자 코드의 압축 처리의 루프에 들어 간다.
도 53은 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 제2 플로우차트이다. 도 53에 있어서, 컴퓨터(1100)는, 단계 S5204에서 취득된 선두 위치의 포인터를 참조하여, 대상 파일군(Fs)으로부터 압축 대상 문자 코드를 취득하여 레지스터에 세트한다(단계 S5301).
다음으로, 컴퓨터(1100)는, 압축 대상 문자 코드에 관해, 특정 단일 문자의 구조체(2100)에 대하여 2분 트리 탐색을 행한다(단계 S5302). 일치한 경우(단계 S5303 : Yes), 컴퓨터(1100)는, 해당하는 문자의 리프(L#)에 대한 포인터에 의해 리프(L#)의 구조체에 액세스한다(단계 S5304). 그리고, 컴퓨터(1100)는, 포인트된 리프(L#)의 구조체에 저장되어 있는 압축 대상 문자 코드의 압축 부호를 추출한다(단계 S5305).
이 후, 컴퓨터(1100)는, 탐색된 압축 부호를 압축 버퍼(5000)에 저장하고(단계 S5306), 단계 S5201로 되돌아간다. 이 루프가 16비트의 문자 코드의 압축 처리의 흐름이 된다. 한편, 단계 S5303에 있어서 일치하는 문자 코드가 존재하지 않은 경우(단계 S5303 : No), 분할 문자 코드의 압축 처리의 루프에 들어 간다.
도 54는 도 51에 도시한 압축 처리(단계 S5103)의 상세한 처리 순서를 도시한 플로우차트(그 3)이다. 도 54에 있어서, 우선, 컴퓨터(1100)는, 압축 대상 문자 코드를 상위 8비트와 하위 8비트로 분할하고(단계 S5401), 상위 8비트의 분할 문자 코드를 추출한다(단계 S5402). 그리고, 컴퓨터(1100)는, 분할 문자 코드의 구조체(2200)에 대하여 2분 트리 탐색을 행한다(단계 S5403).
그리고, 컴퓨터(1100)는, 탐색된 분할 문자 코드의 리프(L#)에 대한 포인터에 의해 리프(L#)의 구조체에 액세스한다(단계 S5404). 그리고, 컴퓨터(1100)는, 포인트된 리프(L#)의 구조체에 저장되어 있는 분할 문자 코드의 압축 부호를 추출한다(단계 S5405). 이 후, 컴퓨터(1100)는, 탐색된 압축 부호를 압축 버퍼(5000)에 저장한다(단계 S5406).
다음으로, 컴퓨터(1100)는, 하위 8비트가 탐색 완료되었는지 여부를 판단하여(단계 S5407), 탐색 완료되지 않은 경우(단계 S5407 : No), 컴퓨터(1100)는, 하위 8비트의 분할 문자 코드를 추출하고(단계 S5408), 단계 S5403∼S5406을 실행한다. 한편, 하위 8비트가 탐색 완료된 경우(단계 S5407 : Yes), 단계 S5301로 되돌아가, 기초 단어의 압축 처리의 루프에 들어 간다.
이와 같이, 2N 분지 무절점 허프만 트리(H)를 이용한 압축 처리에서는, 내부 절점이 없기 때문에 루트를 향하여 탐색할 필요가 없고, 포인트된 리프(L#)의 구조체에 저장되어 있는 문자 정보를 추출하여, 압축 버퍼(5000)에 기록하기만 하면 된다. 따라서, 압축 처리의 고속화를 도모할 수 있다.
또한, 압축 대상 문자 코드가 저장되어 있는 리프(L#)의 구조체를, 기초 단어의 구조체, 특정 단일 문자 코드의 구조체 및 분할 문자 코드의 구조체에 의해 즉시 특정할 수 있다. 따라서, 2N 분지 무절점 허프만 트리(H)의 리프를 탐색할 필요가 없어, 압축 처리의 고속화를 도모할 수 있다. 또한, 저위 문자 코드를 상위 비트 코드와 하위 비트 코드로 분할함으로써, 비특정 단일 문자를 256종의 분할 문자 코드의 압축 부호로 압축할 수 있다. 따라서, 압축률의 향상을 도모할 수 있다.
<맵 압축의 구체예>
다음으로, 제2 압축부(1106)에 의한 압축 부호 맵(Ms) 내의 각 출현 맵의 맵 압축의 구체예에 관해 설명한다. 제2 압축부(1106)는, 압축 영역 내의 출현 맵을 압축하고, 비압축 영역의 출현 맵은 압축하지 않는다. 압축 영역이란, 파일 번호 1∼α까지 번호가 매겨져 있는 경우에, n×(α/n의 몫)이 되는 파일 번호까지의 출현 맵의 비트열이다. 예컨대, n=256비트이고, 현재의 대상 파일수 α=600인 경우, α/n의 몫은 2가 되기 때문에, 파일 번호 1∼2n까지의 출현 맵의 비트열이 압축 영역이 된다. 그리고, 파일 번호 (2n+1)∼α까지의 비트열은 비압축 영역이 되어 압축되지 않는다.
또한, 출현 맵의 비트열은, 파일 총수 α가 증대됨으로써, 비트열 내의 “0”이 연속하는 개소도 많아진다. 또한, 출현 빈도가 높은 문자 정보에 관해서는, 이와는 반대로 “1”이 연속하는 개소가 많아진다. 따라서, 문자의 출현율에 따른 출현율 영역을 설정한다. 출현율 영역이란, 출현율의 범위이다. 출현율 영역에 따라, 출현 맵 압축용의 허프만 트리(h)를 할당하는 것으로 한다.
도 55는 출현율과 출현율 영역의 관계를 도시한 설명도이다. 출현율이 0∼100%의 범위로 하면, 도 55에 도시한 바와 같이, A∼E 영역 및 A'∼E' 영역으로 영역 분할할 수 있다. 따라서, A∼E 영역 및 A'∼E' 영역으로 특정된 출현율 영역에 따라, 출현 맵 압축용의 허프만 트리(h)를 압축 패턴으로서 할당한다.
도 56은 출현율 영역별의 압축 패턴을 갖는 압축 패턴 테이블을 도시한 설명도이다. 출현율은, 도 20에 도시한 바와 같이, 리프(L#)의 구조체의 제5 영역에 저장되어 있기 때문에, 리프(L#)의 구조체가 지정됨으로써, 압축 패턴 테이블(5600)을 참조하여, 압축 패턴이 특정되게 된다. 또, A 영역 및 A' 영역은, 비압축이기 때문에, 압축 패턴이 되는 허프만 트리는 존재하지 않는다.
도 57은 B 영역 및 B' 영역의 경우의 압축 패턴을 도시한 설명도이다. 압축 패턴(5700)은, 리프가 16종인 허프만 트리(h)가 된다.
도 58은 C 영역 및 C' 영역의 경우의 압축 패턴을 도시한 설명도이다. 압축 패턴(5800)은, 리프가 16종+1종인 허프만 트리(h)가 된다. 압축 패턴(5800)에서는, B 영역 및 B' 영역에 비해, “0”이 연속하는 개소 또는 “1”이 연속하는 개소가 확률적으로 많아진다. 따라서, 16비트 연속하여 값이 “0”인 비트열에, 부호어 “00”이 할당되어 있다.
도 59는 D 영역 및 D' 영역의 경우의 압축 패턴을 도시한 설명도이다. 압축 패턴(5900)은, 리프가 16종+1종인 허프만 트리가 된다. 압축 패턴(5900)에서는, C 영역 및 C' 영역에 비해, “0”이 연속하는 개소 또는 “1”이 연속하는 개소가 확률적으로 많아진다. 따라서, 32비트 연속하여 값이 “0”인 비트열에, 부호어 “00”이 할당되어 있다.
도 60은 E 영역 및 E' 영역의 경우의 압축 패턴을 도시한 설명도이다. 압축 패턴(6000)은, 리프가 16종+1종인 허프만 트리가 된다. 압축 패턴(6000)에서는, D 영역 및 D' 영역에 비해, “0”이 연속하는 개소 또는 “1”이 연속하는 개소가 확률적으로 많아진다. 따라서, 64비트 연속하여 값이 “0”인 비트열에, 부호어 “00”이 할당되어 있다. 이와 같이, 출현율 영역에 따라, 문자 코드가 존재하지 않는 것을 의미하는 “0”의 연속수가 증가하기 때문에, 문자 코드의 출현율에 따라 압축 부호 맵(Ms)의 압축 효율의 향상을 도모할 수 있다.
(압축 부호 맵 압축 처리 순서)
다음으로, 압축 부호 맵 압축 처리에 관해 설명한다. 압축 부호 맵 압축 처리는, 압축 영역의 비트열을 압축하는 처리이다. 구체적으로는, 도 56에 도시한 압축 패턴 테이블(5600)과 도 57∼도 60에 도시한 압축 패턴(5700∼6000)(허프만 트리(h))을 이용하여, 압축 부호 맵(Ms)의 압축 영역의 비트열을 압축한다. 이하, 압축 부호 맵 압축 처리 순서에 관해 설명한다.
도 61은 압축 부호 맵 압축 처리 순서를 도시한 플로우차트이다. 도 61에 있어서, 우선, 컴퓨터(1100)는, 압축 부호 맵(Ms)에 있어서, 미선택의 출현 맵에 대한 포인터가 있는지 여부를 판단한다(단계 S6101). 미선택의 어드레스가 있는 경우(단계 S6101 : Yes), 컴퓨터(1100)는, 미선택의 어드레스를 선택하여 리프(L#)의 구조체에 액세스하여(단계 S6102), 리프(L#)의 구조체의 제1 영역 중에서 문자 코드를 취득한다(단계 S6103). 그리고, 컴퓨터(1100)는, 액세스처인 리프(L#)의 구조체의 제5 영역으로부터 출현율 영역을 취득함으로써, 취득된 문자 코드의 출현율 영역을 특정한다(단계 S6104).
이 후, 컴퓨터(1100)는, 도 59의 압축 패턴 테이블(5900)을 참조하여, 특정된 출현율 영역이 비압축 영역(예컨대, 출현율 영역 A, A')인지 여부를 판단한다(단계 S6105). 비압축 영역인 경우(단계 S6105 : Yes), 단계 S6101로 되돌아가, 다음의 어드레스를 선택한다.
한편, 비압축 영역이 아닌 경우(단계 S6105 : No), 컴퓨터(1100)는, 특정된 출현율 영역에 의해, 도 57∼도 60에 도시한 압축 패턴(5700∼6000)(허프만 트리(h)) 중에서 해당하는 압축 패턴(허프만 트리(h))을 선택한다(단계 S6106). 또한, 컴퓨터(1100)는, 압축 대상이 되는 취득 문자 코드의 출현 맵에서의 압축 영역의 비트열을 추출한다(단계 S6107).
그리고, 컴퓨터(1100)는, 취득 문자 코드의 출현율이 50% 이상인지 여부를 판단한다(단계 S6108). 출현율이란, 전술한 바와 같이, 대상 파일군(Fs) 내의 전파일수를 모집단(분모)으로 하고, 상기 문자 정보가 존재하는 파일수를 분자로 한 값이다. 출현율 영역은, 출현율에 따라 정해져 있기 때문에(도 55를 참조), 출현율 영역이 A∼E인 경우, 취득 문자 코드의 출현율이 50% 이상이 아닌 것으로 판단한다. 한편, 출현율 영역이 A'∼E'인 경우, 컴퓨터(1100)는, 취득 문자 코드의 출현율이 50% 이상인 것으로 판단한다.
그리고, 출현율이 50% 이상인 경우(단계 S6108 : Yes), 컴퓨터(1100)는, 압축 효율을 높이기 위해, 단계 S6107에서 추출된 비트열을 반전한다(단계 S6109). 예컨대, 추출된 비트열이 “1110”인 경우, “0001”로 하여, “0”의 개수를 늘린다. 그리고, 컴퓨터(1100)는, 반전 후의 비트열을, 단계 S6106에서 선택한 허프만 트리를 이용하여 압축하고, 기억 장치(예컨대, 플래시 메모리나 자기 디스크(205))에 저장한다(단계 S6110). 그리고, 단계 S6101로 되돌아간다. 이와 같이, 비트열 반전을 행함으로써, 출현율 영역 A'∼E'의 허프만 트리(h)를 준비할 필요가 없기 때문에, 메모리 절감화를 도모할 수 있다.
한편, 단계 S6108에 있어서, 출현율이 50% 이상이 아닌 경우(단계 S6108 : No), 컴퓨터(1100)는, 비트열 반전(단계 S6109)을 행하지 않고, 단계 S6107에서 추출된 비트열을, 단계 S6106에서 선택한 허프만 트리를 이용하여 압축하고(단계 S6110), 단계 S6101로 되돌아간다. 또한, 단계 S6101에 있어서, 미선택의 어드레스가 없는 경우(단계 S6101 : No), 압축 부호 맵 압축 처리를 종료한다.
이러한 압축 부호 맵 압축 처리 순서에 의해, 도 3에 도시한 바와 같이, 문자 정보마다 압축 영역 내의 비트열이, 출현율에 따라 압축된다. 이와 같이, 출현율 영역에 따라, 문자 정보가 존재하지 않는 것을 의미하는 “0”의 연속수가 증가하기 때문에, 문자 정보의 출현율에 따라 압축 부호 맵(Ms)의 압축 효율의 향상을 도모할 수 있다.
또한, 대상 파일이 나중에 추가되면, 추가된 대상 파일을 압축할 때, 압축 부호 맵(Ms)에도 문자의 존재 여부를 나타내는 비트열을 추가할 필요가 있다. 압축 전의 압축 부호 맵(Ms)에서는, 파일 번호 : 1∼α의 출현 맵의 비트열에 관해서는, 압축 패턴(5700∼6000)에 의해 압축되어 레코드마다 부호 길이가 상이하다. 즉, 가변 길이이기 때문에 압축 영역이 된다.
따라서, 도 3에 도시한 바와 같이, 압축 부호열의 선두(파일 번호 k측)는 정렬되지만 말미(파일 번호 1측)가 정렬되지 않는다. 만일, 비트열의 배열을, 파일 번호 : 1∼α의 순으로, 압축 부호 맵(Ms)에 대한 포인터(문자 정보의 압축 부호)측으로부터 할당하면, 추가 파일의 비트열은, 압축 부호열의 말미측에 삽입하게 되고, 압축 부호열과 추가 파일의 비트열이 비연속으로 되어 버린다. 따라서, 미리, 압축 부호 맵(Ms)의 압축 영역의 비트열을, 선두 위치로부터 말미 위치에 걸쳐서 대상 파일군(Fs)의 파일 번호 p의 내림차순으로 배열해 둔다. 그리고, 압축 부호 맵(Ms)에 있어서, 출현 맵에 대한 포인터(문자 정보의 압축 부호)와 압축 영역 사이에 비압축 영역을 설정한다.
도 3을 예로 들면, 파일 번호 : 1∼2n+1 중 압축 부호열이 정렬되는 측에 파일 번호 : 2n+1의 비트를 할당한다. 이에 따라, 파일 번호 ; 1∼2n의 비트열을 압축한 경우에도, 비압축의 파일 번호 : 2n+1∼3n의 비트열을 삽입하더라도, 파일 번호순으로 비트열을 연속시킬 수 있다. 이에 따라, 파일 번호 ; 1∼2n의 비트열이 압축되어도, 추가 파일의 파일 번호와 그 비트의 어긋남이 없고, 대상 파일이 축약을 정확히 실행할 수 있다.
<기능적 구성예 2>
도 62는 본 실시형태에 관련된 컴퓨터 또는 컴퓨터 시스템의 기능적 구성예 2를 도시한 블럭도이다. 도 62에 있어서, 컴퓨터(1100)는, 지정부(6201)와, 제1 신장부(6202)와, 제1 압축부(1103)와, 입력부(6203)와, 추출부(6204)와, 제2 신장부(6205)와, 특정부(6206)와, 세그먼트 생성부(6207)를 구비한다. 지정부(6201)∼세그먼트 생성부(6207)는, 구체적으로는, 예컨대, 도 9에 도시한 ROM(902), RAM(903), 자기 디스크(905) 등의 기억 장치에 기억된 프로그램을 CPU(901)에 실행시킴으로써 그 기능을 실현한다. 또, 지정부(6201)∼세그먼트 생성부(6207)는, 각각 실행 결과를 기억 장치에 기록하거나, 다른 부의 실행 결과를 독출하거나 하여, 각각 연산을 실행한다. 이하, 지정부(6201)∼세그먼트 생성부(6207)에 관해 간단히 설명한다.
지정부(6201)는, 대상 파일군(Fs) 내의 어느 대상 파일의 오픈 지정을 접수한다. 구체적으로는, 키보드, 마우스, 터치 패널을 사용자가 조작함으로써, 지정부(6201)는, 대상 파일(Fi)의 오픈 지정을 접수한다. 상기 오픈 지정이 접수되면, 압축 부호 맵(Ms)에 있어서, 오픈 지정된 대상 파일(Fi)의 파일 번호(i)에 관련지어져 있는 압축 파일(fi)에 대한 포인터가 지정된다. 이에 따라, 포인트처가 되는 어드레스에 저장되어 있는, 오픈 지정된 대상 파일(Fi)의 압축 파일(fi)이 독출된다.
지정부(6201)에 의한 지정이 마스터 서버에 의해 실행된 경우, 지정된 대상 파일(Fi)의 파일 번호(i)를 제0 계층의 세그먼트수(K)로 나누었을 때의 몫에 일치하는 세그먼트 번호의 세그먼트를 특정한다. 이에 따라, 특정된 세그먼트로부터 압축 파일(fi)을 지정할 수 있다.
또한, 지정부(6201)는, 대상 파일(Fi)의 추가 지정을 접수한다. 구체적으로는, 키보드, 마우스, 터치 패널을 사용자가 조작함으로써, 지정부(6201)는, 대상 파일(Fi)의 추가 지정을 접수한다. 상기 추가 지정이 접수되면, 추가 지정된 대상 파일(Fi)이 제1 압축부(1103)에 의해 2N 분지 무절점 허프만 트리(H)로 압축되고, 압축 파일(fi)로서, 제0 계층의 최후미의 세그먼트에 보존된다.
또한, 지정부(6201)는, 세그먼트의 집약 지정을 접수한다. 구체적으로는, 키보드, 마우스, 터치 패널을 사용자가 조작함으로써, 지정부(6201)는, 세그먼트의 집약 지정을 접수한다. 또한, 세그먼트의 집약 지정은, 타이머에 의해 정해진 시각 또는 정해진 시간 단위로 접수해도 좋다.
제1 신장부(6202)는, 대상 파일(Fi)의 압축 파일(fi)을, 2N 분지 무절점 허프만 트리(H)로 신장한다. 구체적으로는, 예컨대, 제1 신장부(6202)는, 지정부(6201)에 의해 오픈 지정된 대상 파일(Fi)의 압축 파일(fi)을, 2N 분지 무절점 허프만 트리(H)로 신장한다. 또한, 후술하는 특정부(6206)에서 특정된 대상 파일(Fi)에 관해서도 2N 분지 무절점 허프만 트리(H)로 신장한다. 신장의 구체예에 관해서는 후술한다.
입력부(6203)는, 검색 문자열의 입력을 접수한다. 구체적으로는, 키보드, 마우스, 터치 패널을 사용자가 조작함으로써, 입력부(6203)는, 검색 문자열의 입력을 접수한다. 또한, 입력부(6203)는, 네트워크를 통해 클라이언트 장치로부터 검색 문자열을 수신함으로써, 검색 문자열의 입력을 접수한다.
추출부(6204)는, 입력부(6203)에 의해 입력된 검색 문자열 내의 문자 정보의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 추출한다. 구체적으로는, 예컨대, 추출부(6204)는, 검색 문자열로부터, 특정 단일 문자, 상위 분할 문자 코드, 하위 분할 문자 코드, 2그램 문자열, 및 기초 단어 중 해당하는 문자 정보를 추출한다.
예컨대, 검색 문자열이 「人形」인 경우, 특정 단일 문자 「人」, 「形」과, 2그램 문자열 「人形」이 추출된다. 이에 따라, 추출부(6204)는, 추출된 문자 정보의 압축 부호를 2N 분지 무절점 허프만 트리(H)에서 특정하여, 압축 부호 맵(Ms)의 해당하는 출현 맵을 포인트할 수 있다. 예컨대, 특정 단일 문자 「人」의 압축 완료된 출현 맵과, 「形」의 압축 완료된 출현 맵과, 2그램 문자열 「人形」의 압축 완료된 출현 맵을 포인트할 수 있다.
도 7에 도시한 컴퓨터 시스템에서는, 마스터 서버(MS)가 추출부(6204)에 의한 문자 정보의 추출을 행하고, 2N 분지 무절점 허프만 트리(H)에서 추출 문자 정보의 압축 부호를 취득한다. 취득된 압축 부호는, 출현 맵에 대한 포인터가 되기 때문에, 슬레이브 서버(S1, S2, …)에 송신된다.
제2 신장부(6205)는, 추출부(6204)에 의해 추출된 압축 완료된 출현 맵을 신장한다. 구체적으로는, 문자 정보의 출현율로부터 출현율 영역을 특정할 수 있기 때문에, 제2 신장부(6205)는, 특정된 출현율 영역에 따른 맵용의 허프만 트리에 의해, 압축 완료된 출현 맵의 압축 영역을 신장한다. 예컨대, 상기 예에서는, 모든 아카이브 파일(도 7을 참조)에 있어서, 특정 단일 문자 「人」의 압축 완료된 출현 맵과, 「形」의 압축 완료된 출현 맵과, 2그램 문자열 「人形」의 압축 완료된 출현 맵이, 신장된다.
도 7에 도시한 컴퓨터 시스템에서는, 마스터 서버(MS) 및 슬레이브 서버(S1, S2, …)의 각각에서, 제2 신장부(6205)에 의한 신장 처리가 실행되게 된다.
특정부(6206)는, 제2 신장부(6205)에 의한 신장 후의 출현 맵군 및 삭제 맵(D)의 AND 연산을 실행함으로써, 검색 문자열 내의 문자 정보를 포함하는 대상 파일의 압축 파일을 압축 파일군으로부터 특정한다. 상기 예에서는, 특정부(6206)는, 특정 단일 문자 「人」의 압축 완료된 출현 맵과, 「形」의 압축 완료된 출현 맵과, 2그램 문자열 「人形」의 압축 완료된 출현 맵과, 삭제 맵을 AND 연산한다.
이 AND 연산은, 도 8에 도시한 바와 같이, 최상위 계층의 세그먼트로부터 실행되어, 최종적으로 제0 계층의 세그먼트로 축약되고, 축약된 제0 계층의 세그먼트에서 AND 연산이 실행된다. 또, 도 8에서는 간략화를 위해, 2그램 문자열 「人形」의 압축 완료된 출현 맵은 생략되어 있다.
도 7에 도시한 컴퓨터 시스템에서는, 마스터 서버(MS)는, 최상위 계층으로부터 제1 계층의 세그먼트에 관해 특정부(6206)에 의한 축약을 행하고, 검색 문자열을 포함하는 대상 파일의 파일 번호를, 상기 파일 번호를 관리하는 슬레이브 서버에 송신한다. 파일 번호를 수신한 슬레이브 서버는, 특정부(6206)에 의한 특정 처리에 의해, 출현 맵 및 삭제 맵으로 AND 연산함으로써, 압축 파일을 축약하게 된다.
이에 따라, 도 8에 도시한 바와 같이, 파일 번호 3, 19(의 압축 파일 f3, f19)가 특정된다. 제1 신장부(6202)에서는, 특정부(6206)에 의해 특정된 압축 파일(상기 예에서는 압축 파일 f3, f19)을 2N 분지 무절점 허프만 트리(H)로 신장하게 된다.
이 후, 슬레이브 서버에서 축약된 압축 파일은, 마스터 서버(MS)에 송신된다. 마스터 서버(MS)는, 슬레이브 서버로부터의 압축 파일을, 제1 신장부(6202)에 의해 2N 분지 무절점 허프만 트리(H)로 신장한다. 신장된 대상 파일(상기 예에서는 F3, F19)은, 디스플레이 등의 표시 장치에 표시된다. 또한, 검색 문자열이 클라이언트 장치로부터 접수되어 있는 경우에는, 마스터 서버(MS)가 클라이언트 장치에, 검색 결과로서 신장된 대상 파일(상기 예에서는 F3, F19)을 송신하게 된다. 또한, 특정부(6206)에 있어서 압축 파일이 특정되지 않은 경우에는, 그러한 취지의 검색 결과를 되돌려 보내게 된다.
세그먼트 생성부(6207)는, 대상 파일의 추가 지정이 접수되면, 현재의 파일 총수 α가 1세그먼트당의 파일수 n의 배수인지 여부를 판단한다. n의 배수인 경우에는, 최후미의 세그먼트에는 추가 지정된 대상 파일의 압축 파일을 보존할 수 있는 빈 영역이 없기 때문에, 새롭게 제0 계층의 세그먼트를 생성한다. 세그먼트가 새롭게 생성되면, 도 1이나 도 6에 도시한 바와 같이, 관리 영역 사이에서 관련을 짓는다. 그리고, 새로운 세그먼트에 대하여 추가되는 압축 파일이 순차 저장되게 된다.
세그먼트 생성부(6207)를 실행하는 컴퓨터가 마스터 서버(MS)인 경우에는, 최후미의 세그먼트를 갖는 슬레이브 서버에 대하여, 제0 계층의 새로운 세그먼트의 생성 지시를 송신한다. 또한, 최후미의 세그먼트를 유지하는 슬레이브 서버에, 새로운 세그먼트를 유지하는 빈 영역이 없는 경우에는, 다른 슬레이브 서버에 제0 계층의 새로운 세그먼트의 생성 지시를 송신한다. 그리고, 새로운 세그먼트가 생성되면, 마스터 서버(MS)는, 추가된 압축 파일을 순차 송신하게 된다. 이에 따라, 새로운 세그먼트에, 추가된 압축 파일이 순차 저장되게 된다.
또한, 세그먼트 생성부(6207)는, 출현 맵이나 삭제 맵의 집약을 행한다. 구체적으로는, 예컨대, 세그먼트 생성부(6207)는, 도 4에 도시한 바와 같이, 출현 맵마다, 상위 계층으로의 집약을 행한다. 그리고, 세그먼트 생성부(6207)는, 도 4에 도시한 바와 같이, 집약처인 상위 계층의 세그먼트(예컨대, 세그먼트 sg1(1))의 관리 영역과, 집약원인 상위 계층의 세그먼트군(예컨대, 세그먼트 sg0(1)∼sg0(m))의 각 관리 영역 사이에서 관련을 짓는다. 이 집약 처리는 삭제 맵에 관해서도 동일하게 실행된다.
<파일 신장예>
도 63은 파일 신장예를 도시한 설명도이다. 파일 신장예에서 나타내는 처리는, 입력부(6203), 추출부(6204), 제2 신장부(6205), 특정부(6206), 제1 신장부(6202)에 의해 실행된다. (G1) 우선, 입력부(6203)에 의해 검색 문자열 「人形」이 입력된 경우, 검색 문자열 「人形」을 구성하는 문자 「人」, 「形」에 관해 특정 단일 문자의 구조체(2100)에 대하여 2분 탐색함으로써, 특정 단일 문자 「人」, 「形」이 검색된다. 특정 단일 문자의 구조체(2100)에는, 2N 분지 무절점 허프만 트리(H)의 리프(특정 단일 문자)에 대한 포인터가 관련지어져 있다. 따라서, 특정 단일 문자의 구조체에서 히트하면, 2N 분지 무절점 허프만 트리(H)의 리프를 직접 지정할 수 있다.
(G2) 2N 분지 무절점 허프만 트리(H)의 리프를 직접 지정하면, 상기 리프의 구조체 내의 대조 플래그가 ON으로 설정되고, 압축 부호가 추출된다. 압축 부호는 특정 단일 문자의 출현 맵에 대한 포인터가 되기 때문에, 직접 지정할 수 있다. 본 예의 경우, 특정 단일 문자 「人」, 「形」의 압축 부호가 추출되기 때문에, 「人」의 출현 맵과 「形」의 출현 맵이 추출된다. 또한, 「人」의 압축 부호 및 「形」의 압축 부호를 연결한 연결 압축 부호도 2그램 문자열의 출현 맵에 대한 포인터가 되기 때문에, 직접 지정할 수 있다. 따라서, 2그램 문자열 「人形」의 출현 맵도 추출된다.
(G3) 추출된 3개의 출현 맵은, 맵용 허프만 트리에 의해 신장된다. 이 후, 도 8에 도시한 바와 같이, 특정부(6206)가, 최상위 계층의 세그먼트로부터 축약을 행하여, 세그먼트 sg0(1)에 있어서, 신장된 출현 맵과 삭제 맵에 의해 AND 연산을 실행하여, AND 결과가 얻어진다.
(G4) 세그먼트 sg0(1)의 AND 결과에 있어서 파일 번호 3이 ON으로 되어 있기 때문에, 검색 문자열 「人形」이 대상 파일 F3에 존재하는 것이 판명된다. 따라서, 압축 파일군(fs)으로부터 압축 파일 f3이 추출된다. 이에 따라 신장해야 할 압축 파일이 축약되게 되어, 쓸데 없는 신장 처리를 저감시킬 수 있다.
(G5) 마지막으로, 추출된 압축 파일 f3을 압축 상태 그대로, 대조, 신장함으로써, 신장 후의 대상 파일 F3이 오픈된다. 또, 「人」, 「形」의 리프의 구조체에서는 대조 플래그가 ON으로 되어 있기 때문에, 「人」, 「形」의 신장시, 강조 표시가 되도록 문자열 치환되어 신장된다. 예컨대, 대조 플래그가 ON인 「人」, 「形」에 관해서는, <B></B> 태그 사이에 넣어 신장함으로써, 굵은 글씨로 표시된다. 대조 플래그가 OFF인 문자에 관해서는 <B></B> 태그 사이에 넣지 않고 그대로 신장한다.
<신장 처리의 구체예>
다음으로, 도 63에서의 신장 처리의 구체예에 관해 설명한다. 여기서는, 검색 문자열 「人形」의 압축 부호열을 이용하여 압축 파일(fi)에 관해 대조하면서 신장하는 예에 관해 설명한다. 또, 예로서, 특정 단일 문자 「人」의 압축 부호를 「1100010011」(10비트)로 하고, 특정 단일 문자 「形」의 압축 부호를 「0100010010」(10비트)으로 한다.
또한, 신장 처리에서는, 레지스터에 압축 부호열을 세트하고, 마스크 패턴에 의해 압축 부호를 추출한다. 추출한 압축 부호를, 1패스(1브랜치분의 액세스)로 2N 분지 무절점 허프만 트리(H)의 루트로부터 탐색한다. 그리고, 액세스한 리프(L#)의 구조체에 저장되어 있는 문자 코드를 독출하여 신장 버퍼에 저장한다.
또한, 압축 부호를 추출하기 위해, 마스크 패턴의 마스크 위치를 오프셋한다. 또한, 마스크 패턴의 초기값을 “0xFFF00000”으로 한다. 이 마스크 패턴은 선두 12비트가 “1”이고, 후속의 20비트가 “0”인 비트열이다.
도 64 및 도 65는, 도 63에서의 신장 처리의 구체예를 도시한 설명도이다. 도 64에서는, 특정 단일 문자 「人」에 관한 신장예(A)를 나타내고 있다. 도 64에 있어서, 우선, CPU는, 비트 어드레스(abi)와 바이트 오프셋(byos)과 비트 오프셋(bios)을 산출한다. 비트 어드레스(abi)는, 추출된 압축 부호의 비트 위치를 나타내는 값이고, 금회의 비트 어드레스(abi)는, 전회의 비트 어드레스(abi)에 전회 추출된 압축 부호의 압축 부호 길이(leg)를 가산한 값이 된다. 또, 초기 상태에서는, 비트 어드레스(abi)는 abi=0으로 한다.
바이트 오프셋(byos)은, 메모리에 유지되어 있는 압축 부호열의 바이트 경계를 나타내는 값이고, 비트 어드레스(abi)/8의 몫으로 구해진다. 예컨대, 바이트 오프셋(byos)=0일 때에는, 메모리에 기억되어 있는 선두로부터의 압축 부호열을 레지스터에 세트하고, 바이트 오프셋(byos)=1일 때에는, 메모리에 기억되어 있는 선두 1바이트째로부터의 압축 부호열을 레지스터에 세트한다.
또한, 비트 오프셋(bios)은, 마스크 패턴의 마스크 위치(“FFF”)를 오프셋하는 값이고, 비트 어드레스(abi)/8의 나머지이다. 예컨대, 비트 오프셋(bios)=0일 때에는, 마스크 위치는 시프트되지 않게 되고, 마스크 패턴은, “0xFFF00000”이 된다. 한편, 비트 오프셋(bios)=4일 때에는, 마스크 위치는 말미 방향으로 4비트 시프트하게 되고, 마스크 패턴은, “0x0FFF0000”이 된다.
레지스터 시프트수(rs)는, 마스크 패턴과의 AND 연산 후의 레지스터 내의 압축 부호열을 말미 방향으로 시프트하는 비트수이고, rs=32-12-bios로 구해진다. 이 시프트에 의해, 시프트 후의 레지스터의 말미 m비트의 비트열을 대상 비트열로서 추출한다. 대상 비트열의 추출 후에는 레지스터를 클리어한다.
또, 메모리 내의 블록은 1바이트의 비트열을 나타내고, 내부의 숫자는, 바이트 경계가 되는 바이트 위치를 나타내고 있다. 도 64에서는, 비트 어드레스(abi)=0에 의해, 바이트 오프셋(byos)=0, 비트 오프셋(bios)=0이 된다. 바이트 오프셋(byos)=0에 의해, 메모리에 유지되어 있는 압축 부호열 중 선두로부터 4바이트분(도면 중, 망점 표시)의 압축 부호열을 레지스터에 세트한다.
또한, 비트 오프셋(bios)=0에 의해, 마스크 패턴은, “0xFFF00000”이다. 따라서, 레지스터에 세트된 압축 부호열과 마스크 패턴 “0xFFF00000”을 논리곱(AND) 연산함으로써, AND 결과가 얻어진다.
또한, 비트 오프셋(bios)=0에 의해, 레지스터 시프트수(rs)는, rs=32-m-bios=32-12-0=20이 된다. 따라서, 레지스터 내의 AND 결과를 말미 방향으로 20비트분 시프트한다. 이 시프트에 의해 레지스터에는, “110001001100”이 남기 때문에, 말미 12비트를 대상 비트열로서 추출한다. 이 경우에는, “110001001100”이 대상 비트열로서 추출된다. 추출 후, 레지스터는 클리어된다.
2N 분지 무절점 허프만 트리(H)의 루트의 구조체에는, 추출된 대상 비트열 “110001001100”이 있기 때문에, 이 대상 비트열과 일치하는 리프(L#)에 대한 포인터(브랜치 번호)를 탐색한다. 이 경우, 리프 L97에 대한 포인터군 중 하나와 일치하기 때문에, 해당하는 리프 L97에 대한 포인터를 독출하고, 리프 L97의 구조체에 액세스한다.
리프 L97의 구조체에는, 문자 코드 “0xBA4E”가 저장되어 있기 때문에, 상기 문자 코드 “0xBA4E”를 추출하여 신장 버퍼에 저장한다. 이 경우, 대조 플래그가 ON이기 때문에, 문자 코드 “0xBA4E”를 <B></B> 태그 사이에 넣어 저장한다.
또한, 리프 L97의 구조체에는, 문자 코드 “0xBA4E”의 압축 부호 길이(leg)(=10비트)도 저장되어 있기 때문에, 문자 코드 “0xBA4E”의 압축 부호 길이(leg)도 추출한다. 이 추출된 압축 부호 길이(leg)에 의해 비트 어드레스(abi)를 갱신한다. 이 경우, 갱신 후의 비트 어드레스(abi)는 abi=0+10=10이 된다.
도 65에서는, 특정 단일 문자 「形」에 관해 신장하는 예(B)를 나타내고 있다. 구체적으로는, 도 64의 상태(A)로부터 레지스터를 바이트 오프셋(bios)분 시프트한 경우, 전회인 (A)의 비트 어드레스(abi)는 abi=0, 압축 부호 길이(leg)는 10비트이기 때문에, (B)의 비트 어드레스(abi)는 abi=10비트가 된다.
또한, 이 비트 어드레스(abi)=10에 의해, 바이트 오프셋(byos)=1, 비트 오프셋(bios)=2가 된다. 바이트 오프셋(byos)=1에 의해, 메모리에 유지되어 있는 압축 부호열 중 선두 1바이트째로부터 4바이트분(도면 중, 망점 표시)의 압축 부호열을 레지스터에 세트한다.
또한, 비트 오프셋(bios)=2에 의해, 마스크 패턴은, “0x3FFC0000”이다. 따라서, 레지스터에 세트된 압축 부호열과 마스크 패턴 “0x3FFC0000”을 논리곱(AND) 연산함으로써, AND 결과가 얻어진다.
또한, 비트 오프셋(bios)=2에 의해, 레지스터 시프트수(rs)는, rs=32-m-bios=32-12-2=18이 된다. 따라서, 레지스터 내의 AND 결과를 말미 방향으로 18비트분 시프트한다. 이 시프트에 의해 레지스터에는, “00000100010010”이 남기 때문에, 말미 10비트를 대상 비트열로서 추출한다. 이 경우에는, “0100010010”이 대상 비트열로서 추출된다. 추출 후, 레지스터는 클리어된다.
2N 분지 무절점 허프만 트리(H)의 루트의 구조체에는, 추출된 대상 비트열 “0100010010”이 있기 때문에, 이 비트열과 일치하는 리프(L#)에 대한 포인터(브랜치 번호)를 탐색한다. 이 경우, 대상 비트열 “0100010010”이 리프 L105에 대한 포인터군 중 하나와 일치하기 때문에, 해당하는 리프 L105에 대한 포인터를 독출하고, 리프 L24의 구조체에 액세스한다.
리프 L105의 구조체에는, 문자 코드 “0x625F”가 저장되어 있기 때문에, 상기 문자 코드 “0x625F”를 추출하여 신장 버퍼에 저장한다. 파일 신장예(G1)의 경우에는, 그대로 신장 버퍼에 저장하지만, 파일 신장예(G2)의 경우에는, 대조 플래그가 ON이기 때문에, 문자 코드 “0x625F”를 <B></B> 태그 사이에 넣어 저장한다. 또한, 리프 L105의 구조체에는, 문자 코드 “0x625F”의 압축 부호 길이(leg)(=8비트)도 저장되어 있기 때문에, 문자 코드 “0x625F”의 압축 부호 길이(leg)도 추출한다. 이 추출된 압축 부호 길이(leg)에 의해 비트 어드레스(abi)를 갱신한다. 이 경우, 갱신 후의 비트 어드레스(abi)는 abi=10+8=18이 된다. 이와 같이 하여 신장함으로써, 대상 파일이 오픈되게 된다.
<파일 추가 처리의 구체예>
다음으로, 파일 추가 처리의 구체예에 관해 설명한다. 여기서는, 압축 완료된 압축 부호 맵(Ms)을 신장하지 않고, 세그먼트 생성부(6207)가, 추가 대상이 되는 대상 파일 F(n+1)의 추가와, 압축 부호 맵(Ms)의 갱신을 실행한다.
도 66은 파일 추가 처리의 구체예를 도시한 설명도이다. 도 66에서는, 대상 파일 F(n+1)을 추가하는 경우를 예로 들어 설명한다. 우선, 도 63의 파일 신장예에 의해, 압축 파일군(fs)으로부터 압축 파일 f3이 신장되고, 신장 후의 대상 파일 F3이 메인 메모리(예컨대, RAM(903)) 상에 기록된 것으로 한다. 여기서, 대상 파일 F(n+1)로 변경하여, 신규 보존 지시를 부여한 것으로 한다. 이 경우, 메인 메모리 상의 대상 파일 F(n+1)에는 새롭게 번호가 매겨진 파일 번호 n+1이 할당된다. 즉, 세그먼트 sg0(1)에는 빈 영역이 없기 때문에, 세그먼트 sg0(2)가 설정되고, 세그먼트 sg0(1)과의 사이에서 관련지어진다.
(I) 그리고, 대상 파일 F(n+1)을 2N 분지 무절점 허프만 트리(H)로 압축하여 압축 파일 f(n+1)로 하고, 세그먼트 sg0(2)에 보존한다. (J) 또한, 메인 메모리 상의 대상 파일 F(n+1)의 문자 정보를 집계부(1101)에 의해 집계함으로써, 문자 정보의 존재 여부를 검출할 수 있다. 따라서, 새롭게 번호가 매겨진 파일 번호 n+1의 비트를, 각 문자 정보의 출현 맵에 추가(디폴트는 OFF)하고, 문자 정보가 출현한 비트에 관해 ON으로 한다. 또한, 파일 번호 n+1의 비트를 삭제 맵(D)에도 추가(디폴트는 ON)한다.
(K) 또한, 압축 파일 f(n+1)에 관해서는, 세그먼트 sg0(2)의 관리 영역에서 포인터가 관련지어진다. 이에 따라, 이후에, 세그먼트 sg0(2)에 있어서 파일 번호 (n+1)이 지정되면, 압축 파일 f(n+1)을 신장하여 대상 파일 F(n+1)을 오픈할 수 있다.
또한, 도 7에 도시한 컴퓨터 시스템에 있어서, 파일 총수가 α인 것으로 하면, α=파일 번호 m×n의 경우, 슬레이브 서버 S1에만 아카이브 파일 A0(1)이 저장되어 있다. 그리고, 새롭게 대상 파일 F(m×n+1)이 추가되는 경우, 마스터 서버(MS)는, 대상 파일 F(m×n+1)의 압축 파일 f(m×n+1)을, 할당처가 되는 슬레이브 서버 S2에 송신한다. 할당처를 어느 슬레이브 서버로 할지는 미리 정해 두는 것으로 한다. 슬레이브 서버 S2는, 슬레이브 서버 S1의 세그먼트 sg0(m)의 후속 세그먼트로서 세그먼트 sg0(m+1)을 생성하고, 마스터 서버(MS)로부터의 압축 f(m×n+1)을 보존하게 된다.
도 67은 세그먼트 추가 처리의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 지정부(6201)에 의해 파일 추가가 지정되는 것을 대기한다(단계 S6701 : No). 파일 추가의 지정이 된 경우(단계 S6701 : Yes), 컴퓨터(1100)는, 보존 대상 세그먼트 sg0(K)를 특정한다(단계 S6702). 구체적으로는, 파일수(i)를 1세그먼트당의 파일수 n으로 나눗셈한 몫과 동일한 번호의 세그먼트를 보존 대상 세그먼트 sg0(K)로 한다.
그리고, 컴퓨터(1100)는, 파일수(i)를 인크리먼트하고(단계 S6703), i>Kn인지 여부를 판단한다(단계 S6704). i>Kn이 아닌 경우(단계 S6704 : No), 현세그먼트 sg0(K)에는 아직 압축 파일을 보존할 수 있기 때문에, 컴퓨터(1100)는, 추가 파일에 의한 맵 갱신 처리를 실행한다(단계 S6709). 추가 파일에 의한 맵 갱신 처리(단계 S6709)의 상세에 관해서는 후술한다.
이 후, 컴퓨터(1100)는, 추가 파일을 2N 분지 무절점 허프만 트리(H)로 압축하고(단계 S6710), 압축 추가 파일을 보존 대상 세그먼트 sg0(K)에 보존한다(단계 S6711). 그리고, 컴퓨터(1100)는, 보존 대상 세그먼트 sg0(K)의 관리 영역 AK에, 압축 추가 파일에 대한 포인터를 관련짓는다(단계 S6712). 이에 따라, 세그먼트 추가 처리를 종료한다.
또한, 단계 S6704에 있어서, i>Kn인 경우(단계 S6704 : Yes), 현세그먼트 sg0(K)에서는 압축 추가 파일을 보존할 수 없기 때문에, 컴퓨터(1100)는, 현세그먼트 sg0(K)의 압축 부호 맵을 맵용 허프만 트리로 압축한다(단계 S6705). 그리고, 컴퓨터(1100)는, 신세그먼트의 영역을 확보하고(단계 S6706), 세그먼트 번호(K)를 인크리먼트한다(단계 S6707). 이 후, 컴퓨터(1100)는, 인크리먼트 후의 세그먼트 sg0(K)와 그 선행 세그먼트의 포인터의 연계 처리를 실행한다(단계 S6708). 이에 따라, 도 1에 도시한 바와 같이, 선행 세그먼트와 관련지어지게 된다. 이 후, 단계 S6709로 이행한다.
도 68은 도 67에 도시한 추가 파일에 의한 맵 갱신 처리(단계 S6709)의 상세한 처리 순서를 도시한 플로우차트(전반)이다. 우선, 컴퓨터(1100)는, 압축 부호 맵(Ms) 및 삭제 맵(Ds)에서, 추가 파일의 파일 번호의 비트를 설정한다(단계 S6801). 구체적으로는, 출현 맵에 관해서는 OFF의 비트를 추가 파일의 파일 번호에 대하여 설정하고, 삭제 맵(D)에 관해서는 ON의 비트를 추가 파일의 파일 번호에 대하여 설정한다.
다음으로, 컴퓨터(1100)는, 추가 파일 내의 선두 문자를 대상 문자로 설정하고(단계 S6802), 대상 문자에 관해 최장 일치 검색 처리를 실행한다(단계 S6803). 최장 일치 검색 처리(단계 S6803)는, 도 31에 도시한 처리와 동일 처리이기 때문에 설명을 생략한다.
이 후, 컴퓨터(1100)는, 최장 일치한 기초 단어가 기초 단어의 구조체(2300)에 있는지 여부를 판단한다(단계 S6804). 없는 경우(단계 S6804 : No), 도 69의 단계 S6901로 이행한다. 한편, 있는 경우(단계 S6804 : Yes), 컴퓨터(1100)는, 최장 일치한 기초 단어의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 특정하여, 상기 압축 부호에 의해, 최장 일치한 기초 단어의 출현 맵을 지정한다(단계 S6805). 그리고, 컴퓨터(1100)는, 지정된 출현 맵에 있어서 추가 파일의 파일 번호에 대응하는 비트를 ON으로 한다(단계 S6806). 이 후, 도 69의 단계 S6901로 이행한다.
도 69는 도 67에 도시한 추가 파일에 의한 맵 갱신 처리(단계 S6709)의 상세한 처리 순서를 도시한 플로우차트(후반)이다. 우선, 컴퓨터(1100)는, 대상 문자가 특정 단일 문자인지 여부를 판단한다(단계 S6901). 구체적으로는, 예컨대, 컴퓨터(1100)는, 대상 문자가 특정 단일 문자의 구조체에서 히트했는지 여부를 판단한다.
대상 문자가 특정 단일 문자인 경우(단계 S6901 : Yes), 컴퓨터(1100)는, 히트한 특정 단일 문자의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 특정하여, 상기 압축 부호에 의해, 히트한 특정 단일 문자의 출현 맵을 지정한다(단계 S6902). 그리고, 컴퓨터(1100)는, 지정된 출현 맵에 있어서 추가 파일의 파일 번호에 대응하는 비트를 ON으로 한다(단계 S6903). 이 후, 단계 S6909로 이행한다.
한편, 대상 문자가 특정 단일 문자가 아닌 경우(단계 S6901 : No), 컴퓨터(1100)는, 대상 문자를 상위 분할 문자 코드와 하위 분할 문자 코드로 분할한다(단계 S6904). 그리고, 컴퓨터(1100)는, 분할 문자 코드의 구조체에서 히트한 상위 분할 문자 코드의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 특정하여, 상기 압축 부호에 의해, 히트한 상위 분할 문자 코드의 출현 맵을 지정한다(단계 S6905). 그리고, 컴퓨터(1100)는, 지정된 출현 맵에 있어서 추가 파일의 파일 번호에 대응하는 비트를 ON으로 한다(단계 S6906).
마찬가지로, 컴퓨터(1100)는, 분할 문자 코드의 구조체에서 히트한 하위 분할 문자 코드의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 특정하여, 상기 압축 부호에 의해, 히트한 하위 분할 문자 코드의 출현 맵을 지정한다(단계 S6907). 그리고, 컴퓨터(1100)는, 지정된 출현 맵에 있어서 추가 파일의 파일 번호에 대응하는 비트를 ON으로 한다(단계 S6908). 이 후, 단계 S6909로 이행한다.
또한, 단계 S6909에 있어서, 컴퓨터(1100)는, 2그램 문자열 특정 처리를 실행한다(단계 S6909). 2그램 문자열 특정 처리(단계 S6909)는, 도 37에 도시한 처리와 동일 처리이기 때문에 설명을 생략한다.
이 후, 컴퓨터(1100)는, 2그램 문자열(예컨대 「人形」) 중 선두 그램 문자(예컨대, 「人」)의 압축 부호와 말미 그램 문자(예컨대, 「形」)의 압축 부호를 연결한다(단계 S6910). 다음으로, 컴퓨터(1100)는, 연결 압축 부호에 의해, 2그램 문자열의 출현 맵을 지정한다(단계 S6911). 그리고, 컴퓨터(1100)는, 지정된 출현 맵에 있어서 추가 파일의 파일 번호에 대응하는 비트를 ON으로 하고(단계 S6912), 일련의 처리를 종료한다.
<세그먼트 계층화 처리>
다음으로, 세그먼트 계층화 처리에 관해 설명한다. 세그먼트 계층화 처리란, 도 4 및 도 5에 도시한 바와 같이, 하위 계층의 세그먼트군의 인덱스 정보군을 상위 계층의 인덱스 정보로 집약해 가는 처리이다. 세그먼트 계층화 처리는, 세그먼트 생성부(6207)가 실행한다.
도 70은 세그먼트 계층화 처리의 상세한 처리 순서를 도시한 플로우차트이다. 도 70에 있어서, 컴퓨터(1100)는, 지정부에 의해, 세그먼트의 집약 지정을 대기한다(단계 S7001 : No). 집약 지정이 접수된 경우(단계 S7001 : Yes), 컴퓨터(1100)는, 출현 맵을 지정하는 포인터인 압축 부호를 순차 선택한다(단계 S7002). 구체적으로는, 미선택의 압축 부호가 있는 경우(단계 S7002 : Yes), 컴퓨터(1100)는, 미선택의 압축 부호를 하나 선택하고(단계 S7003), 선택 출현 맵 집약 처리를 실행한다(단계 S7004). 선택 출현 맵 집약 처리(단계 S7004)의 상세에 관해서는 후술한다.
선택 출현 맵 집약 처리(단계 S7004) 후, 단계 S7002로 되돌아간다. 그리고, 미선택의 압축 부호가 없는 경우(단계 S7002 : No), 컴퓨터(1100)는, 삭제 맵 집약 처리를 실행한다(단계 S7005). 삭제 맵 집약 처리(단계 S7005)의 상세에 관해서는 후술한다. 이에 따라, 세그먼트 계층화 처리를 종료한다.
도 71은 도 70에 도시한 선택 출현 맵 집약 처리(단계 S7004)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, f=0, h=f+1, j=1로 설정한다(단계 S7101). 여기서, f는 대상이 되는 계층 번호이고, h는 대상 계층의 상위 계층의 계층 번호이다. j는 세그먼트 번호이다. 다음으로, 컴퓨터(1100)는, 대상 계층인 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)에서 압축 파일의 빈 영역이 있는지 여부를 판단한다(단계 S7102). m은, 집약 가능한 세그먼트수이다.
빈 영역이 없는 경우(단계 S7102 : No), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)의 각각에는 압축 파일이 최대한 저장되어 있기 때문에, 컴퓨터(1100)는, 상위 계층인 제h 계층의 세그먼트 sgh(j)에 집약 완료되었는지 여부를 판단한다(단계 S7103). 구체적으로는, 예컨대, 컴퓨터(1100)는, 제h 계층의 세그먼트 sgh(j)가 존재하는지 여부를 판단한다.
집약이 완료되지 않은 경우(단계 S7103 : No), 컴퓨터(1100)는, 상위 세그먼트 sgh(j)를 설정하고, 상위 세그먼트 sgh(j) 내에 선택 압축 부호의 인덱스 영역을 확보한다(단계 S7104). 그리고, a=j로 설정한다(단계 S7105). 여기서, a는 대상 세그먼트 sgh(j)를 특정하는 변수이다.
그리고, 컴퓨터(1100)는, a=j+m인지 여부를 판단한다(단계 S7106). a=j+m이 아닌 경우(단계 S7106 : No), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)의 전부 에 관해 집약 처리가 완료되어 있지 않다. 따라서, 컴퓨터(1100)는, 선택 압축 부호에 관해 세그먼트 sgf(a)의 인덱스 정보를 추출한다(단계 S7107).
그리고, 컴퓨터(1100)는, 추출된 세그먼트 sgf(a)의 인덱스 정보인 비트열이 모두 0, 즉, 선택 압축 부호에 관한 문자 정보가 세그먼트 sgf(a) 내의 압축 파일군 중 어디에도 존재하고 있지 않은지 여부를 판단한다(단계 S7108).
모두 0의 경우(단계 S7108 : Yes), 컴퓨터(1100)는, 상위 세그먼트 sgh(a)에 집약 결과로서 「0」을 기록하고(단계 S7109), 단계 S7111로 이행한다. 한편, 모두 0이 아닌 경우(단계 S7108 : No), 상위 세그먼트 sgh(a)에 집약 결과로서 「1」을 기록하고(단계 S7110), 단계 S7111로 이행한다. 단계 S7111에서는, a를 인크리먼트하고(단계 S7111), 단계 S7106으로 되돌아간다.
또한, 단계 S7106에 있어서, a=j+m이 된 경우(단계 S7106 : Yes), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)의 전부에 관해 집약 처리가 완료된 것이 된다. 따라서, 컴퓨터(1100)는, 상위 세그먼트 sgh(j)와 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1) 사이에서 포인터에 의해 관련을 짓는다(단계 S7112). 이 후, j=j+m으로 하여 j를 세그먼트 m개분 시프트하고(단계 S7113), 단계 S7102로 되돌아간다.
또한, 단계 S7102에 있어서, 빈 영역이 있는 경우(단계 S7102 : Yes), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)의 집약 처리를 실행할 수 없기 때문에, f=f+1, j=1로 한다(단계 S7114). 그리고, 컴퓨터(1100)는, 세그먼트 sgf(j)가 존재하는지 여부를 판단한다(단계 S7115). 존재하는 경우(단계 S7115 : Yes), 단계 S7102로 되돌아간다. 이에 따라, 단계적으로 계층을 올려 집약할 수 있다. 한편, 존재하지 않는 경우(단계 S7115 : No), 단계 S7002로 되돌아간다.
도 72는 도 70에 도시한 삭제 맵 집약 처리(단계 S7005)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, f=0, h=f+1, j=1로 설정한다(단계 S7201). 여기서, f는 대상이 되는 계층 번호이고, h는 대상 계층의 상위 계층의 계층 번호이다. j는 세그먼트 번호이다. 다음으로, 컴퓨터(1100)는, 대상 계층인 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)에서 압축 파일의 빈 영역이 있는지 여부를 판단한다(단계 S7202). m은, 집약 가능한 세그먼트수이다.
빈 영역이 없는 경우(단계 S7202 : No), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)의 각각에는 압축 파일이 최대한 저장되어 있기 때문에, 컴퓨터(1100)는, 상위 계층인 제h 계층의 세그먼트 sgh(j)에 집약 완료되었는지 여부를 판단한다(단계 S7203). 구체적으로는, 예컨대, 컴퓨터(1100)는, 제h 계층의 세그먼트 sgh(j)가 존재하는지 여부를 판단한다.
집약 완료되지 않은 경우(단계 S7203 : No), 컴퓨터(1100)는, 상위 세그먼트 sgh(j) 내에 삭제 맵의 인덱스 영역을 확보한다(단계 S7204). 그리고, a=j로 설정한다(단계 S7205). 여기서, a는 대상 세그먼트 sgh(j)를 특정하는 변수이다.
그리고, 컴퓨터(1100)는, a=j+m인지 여부를 판단한다(단계 S7206). a=j+m이 아닌 경우(단계 S7206 : No), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)의 전부 에 관해 집약 처리가 완료되어 있지 않다. 따라서, 컴퓨터(1100)는, 삭제 맵에 관해 세그먼트 sgf(a)의 인덱스 정보를 추출한다(단계 S7207).
그리고, 컴퓨터(1100)는, 추출된 세그먼트 sgf(a)의 인덱스 정보인 비트열이 모두 0, 즉, 세그먼트 sgf(a) 내의 압축 파일군이 삭제되었는지 여부를 판단한다(단계 S7208).
모두 0의 경우(단계 S7208 : Yes), 컴퓨터(1100)는, 상위 세그먼트 sgh(a)에 집약 결과로서 「0」을 기록하고(단계 S7209), 단계 S7211로 이행한다. 한편, 모두 0이 아닌 경우(단계 S7208 : No), 컴퓨터(1100)는, 상위 세그먼트 sgh(a)에 집약 결과로서 「1」을 기록하고(단계 S7210), 단계 S7211로 이행한다. 단계 S7211에서는, a를 인크리먼트하고(단계 S7211), 단계 S7206으로 되돌아간다.
또한, 단계 S7206에 있어서, a=j+m이 된 경우(단계 S7206 : Yes), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)의 전부에 관해 집약 처리가 완료된 것이 된다. 따라서, 컴퓨터(1100)는, 상위 세그먼트 sgh(j)와 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1) 사이에서 포인터에 의해 관련을 짓는다(단계 S7212). 이 후, j=j+m으로 하여 j를 세그먼트 m개분 시프트하고(단계 S7213), 단계 S7202로 되돌아간다.
또한, 단계 S7202에 있어서, 빈 영역이 있는 경우(단계 S7202 : Yes), 제f 계층의 세그먼트 sgf(j)∼sgf(j+m-1)에 관해 집약 처리를 실행할 수 없기 때문에, f=f+1, j=1로 한다(단계 S7214). 그리고, 컴퓨터(1100)는, 세그먼트 sgf(j)가 존재하는지 여부를 판단한다(단계 S7215). 존재하는 경우(단계 S7215 : Yes), 단계 S7202로 되돌아간다. 이에 따라, 단계적으로 계층을 올려 집약할 수 있다. 한편, 존재하지 않는 경우(단계 S7215 : No), 단계 S7002로 되돌아간다.
이와 같이, 세그먼트 계층화 처리를 실행함으로써, 도 4 및 도 5에 도시한 바와 같이 세그먼트의 계층화가 실현된다. 따라서, 도 7에 도시한 바와 같은 아카이브 파일의 계층 구조를 구축할 수 있다.
<검색 처리 순서>
다음으로, 본 실시형태에 관련된 검색 처리 순서에 관해 설명한다. 구체적으로는, 예컨대, 도 63에 도시한 파일 신장예에 관한 처리 순서가 된다.
도 73은 본 실시형태에 관련된 검색 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 검색 문자열의 입력을 대기하여(단계 S7301 : No), 검색 문자열이 입력된 경우(단계 S7301 : Yes), 포인터 특정 처리(단계 S7302), 파일 축약 처리(단계 S7303), 신장 처리(단계 S7304)를 실행한다. 포인터 특정 처리(단계 S7302)는, 검색 문자열로부터 출현 맵을 지정하는 포인터가 되는 압축 부호를 특정한다. 포인터 특정 처리(단계 S7302)의 상세한 것은, 도 74 및 도 75에서 설명한다.
파일 축약 처리(단계 S7303)는, 도 8에 도시한 바와 같이, 계층 구조 세그먼트군으로부터 검색 문자열을 구성하는 문자 정보가 존재하는 대상 파일(Fi)의 압축 파일(fi)을 축약한다. 파일 축약 처리(단계 S7303)의 상세한 것은, 도 76에서 설명한다.
신장 처리(단계 S7304)는, 파일 축약 처리(단계 S7303)에서 축약된 압축 파일(fi)을 신장하는 과정에서, 신장 대상이 되는 압축 부호열과 검색 문자열의 압축 문자열을 대조한다. 신장 처리(단계 S7304)의 상세한 것은, 도 77 및 도 78에서 설명한다.
도 74는 도 73에 도시한 포인터 특정 처리(단계 S7302)의 상세한 처리 순서를 도시한 제 1플로우차트이다. 우선, 컴퓨터(1100)는, 검색 문자열을 대상 문자열로 설정하고(단계 S7401), 최장 일치 검색 처리를 실행한다(단계 S7402). 최장 일치 검색 처리(단계 S7402)는, 도 31에 도시한 최장 일치 검색 처리(단계 S2901)와 동일 처리이기 때문에 설명을 생략한다.
그리고, 컴퓨터(1100)는, 기초 단어의 구조체에 있어서, 최장 일치 검색 처리(단계 S7402)에서 얻어진 최장 일치 검색 결과를 2분 탐색한다(단계 S7403). 최장 일치 검색 결과가, 기초 단어의 구조체에서 탐색된 경우(단계 S7403 : Yes), 탐색된 기초 단어의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 취득하여 검색 버퍼에 보존한다(단계 S7404).
그리고, 컴퓨터(1100)는, 대상 문자열에 후속이 있는지 여부를 판단한다(단계 S7405). 후속이 있는 경우(단계 S7405 : Yes), 컴퓨터(1100)는, 후속 문자열을 대상 문자열로 설정하고(단계 S7406), 최장 일치 검색 처리(단계 S7402)로 되돌아간다. 한편, 후속이 없는 경우(단계 S7405 : No), 포인터 특정 처리(단계 S7302)는 종료되고, 파일 축약 처리(단계 S7303)로 이행한다.
또한, 단계 S7403에 있어서, 최장 일치 검색 결과가, 기초 단어의 구조체에서 탐색되지 않은 경우(단계 S7403 : No), 도 75의 단계 S7501로 이행한다. 구체적으로는, 최장 일치 검색 결과가 기초 단어의 구조체에 등록되어 있지 않은 경우, 또는, 최장 일치 검색에서 최장 일치 후보가 없었던 경우(단계 S7403 : No)에, 도 75의 단계 S7501로 이행한다.
도 75는 도 73에 도시한 포인터 특정 처리(단계 S7302)의 상세한 처리 순서를 도시한 제2 플로우차트이다. 우선, 컴퓨터(1100)는, 대상 문자열의 선두 문자를 대상 문자로 설정한다(단계 S7501). 다음으로, 컴퓨터(1100)는, 특정 단일 문자의 구조체에 있어서 대상 문자를 2분 탐색한다(단계 S7502). 대상 문자가 탐색된 경우(단계 S7503 : Yes), 컴퓨터(1100)는, 특정 단일 문자의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 취득하여 검색 버퍼에 보존한다(단계 S7504).
한편, 단계 S7503에 있어서, 탐색되지 않은 경우(단계 S7503 : No), 컴퓨터(1100)는, 대상 문자를 상위 8비트와 하위 8비트로 분할한다(단계 S7505). 그리고, 컴퓨터(1100)는, 상위 분할 문자 코드의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 취득하여 검색 버퍼에 보존한다(단계 S7506).
또한, 컴퓨터(1100)는, 하위 분할 문자 코드의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 취득하여 검색 버퍼에 보존한다(단계 S7507). 또한, 컴퓨터(1100)는, 대상 문자나 단계 S7505에서 분할된 분할 문자 코드에 관해, 2N 분지 무절점 허프만 트리(H)의 리프에 액세스하고, 대조 플래그를 ON으로 한다(단계 S7508). 이 후, 컴퓨터(1100)는, 2그램 문자열 특정 처리를 실행한다(단계 S7509). 2그램 문자열 특정 처리(단계 S7509)는, 도 37에 도시한 2그램 문자열 특정 처리(단계 S3406)와 동일 처리이기 때문에 설명을 생략한다.
그리고, 컴퓨터(1100)는, 2그램 문자열 특정 처리(단계 S7509)에서 2그램 문자열이 특정되지 않은 경우(단계 S7510 : No), 도 74의 단계 S7405로 되돌아간다. 한편, 2그램 문자열이 특정된 경우(단계 S7510 : Yes), 컴퓨터(1100)는, 2그램 문자열의 압축 부호를 2N 분지 무절점 허프만 트리(H)로부터 취득하여 검색 버퍼에 보존한다(단계 S7511). 구체적으로는, 예컨대, 컴퓨터(1100)는, 제1 그램의 압축 부호 및 제2 그램의 압축 부호를 2N 분지 무절점 허프만 트리(H)에 액세스함으로써 취득, 연결하고, 2그램 문자열의 압축 부호 맵(M)으로부터 연결 압축 부호로 지정된 출현 맵을 취득한다. 그리고, 도 74의 단계 S7405로 되돌아간다.
도 76은 도 73에 도시한 파일 축약 처리(단계 S7303)의 상세한 처리 순서를 도시한 플로우차트이다. 우선, 컴퓨터(1100)는, 계층 번호(h)를 현시점에서의 최상위 계층의 계층 번호 H로 하고(단계 S7601), 세그먼트 번호(j)를 j=1로 설정한다(단계 S7602).
다음으로, 컴퓨터(1100)는, 세그먼트 sgH(j)가 존재하는지 여부를 판단한다(단계 S7603). 세그먼트 sgH(j)가 존재하는 경우(단계 S7603 : Yes), 컴퓨터(1100)는, 검색 버퍼 내의 압축 부호마다, 출현 맵 및 삭제 맵을 지정한다(단계 S7604). 그리고, 컴퓨터(1100)는, 지정된 출현 맵 및 삭제 맵으로부터 대상 세그먼트 sgH(j)의 인덱스 정보를 추출한다(단계 S7605).
그리고, 컴퓨터(1100)는, 추출된 인덱스 정보군을 AND 연산한다(단계 S7606). 이 후, 컴퓨터(1100)는, 현재의 계층 번호(h)가 h=0인지 여부를 판단한다(단계 S7607). h≠0의 경우(단계 S7607 : No), AND 결과로 얻어지는 「1」의 위치는 하위 세그먼트의 번호가 되기 때문에, 상기 번호를 검색 버퍼에 보존하고, 단계 S7610으로 이행한다(단계 S7608).
한편, h=0의 경우(단계 S7607 : Yes), AND 결과로 얻어지는 「1」의 위치는 파일 번호가 되기 때문에, 상기 번호의 압축 파일을 검색 버퍼에 보존하고, 단계 S7610으로 이행한다(단계 S7609).
단계 S7610에서는, 세그먼트 번호(j)를 인크리먼트하고(단계 S7610), 단계 S7603으로 되돌아간다. 이 때, 후속 세그먼트와는 포인터로 관련지어져 있기 때문에, 세그먼트 번호의 인크리먼트에 의해 후속 세그먼트를 특정할 수 있게 된다.
또한, 단계 S7603에 있어서, 대상 세그먼트 sgH(j)가 존재하지 않는 경우(단계 S7603 : No), 컴퓨터(1100)는, 계층 번호(h)를 디크리먼트하고(단계 S7611), h<0인지 여부를 판단한다(단계 S7612). h<0이 아닌 경우(단계 S7612 : No), 단계 S7602로 되돌아간다. 한편, h<0인 경우(단계 S7612 : Yes), 단계 S7609에 의해 신장 대상의 압축 파일이 특정되어 있기 때문에, 신장 처리(단계 S7304)로 이행한다.
도 77은 도 73에 도시한 2N 분지 무절점 허프만 트리(H)를 이용한 신장 처리(단계 S7304)의 상세한 처리 순서예를 도시한 제1 플로우차트이다. 도 77에 있어서, 우선, 컴퓨터(1100)는, 비트 어드레스(abi)를 abi=0으로 하고(단계 S7701), 바이트 오프셋(byos)을 산출하고(단계 S7702), 비트 오프셋(bios)을 산출한다(단계 S7703). 그리고, 컴퓨터(1100)는, 바이트 오프셋(byos)의 위치로부터의 압축 부호열을 레지스터 r1에 세트한다(단계 S7704).
다음으로, 컴퓨터(1100)는, 레지스터 r2에 세트된 마스크 패턴을 비트 오프셋(bios)분, 말미 방향으로 시프트하고(단계 S7705), 레지스터 r1에 세트된 압축 부호열과의 AND 연산을 행한다(단계 S7706). 이 후, 컴퓨터(1100)는, 레지스터 시프트수(rs)를 산출하고(단계 S7707), AND 연산 후의 레지스터 r2를 레지스터 시프트수(rs)분, 말미로 시프트한다(단계 S7708).
도 78은 도 73에 도시한 2N 분지 무절점 허프만 트리(H)를 이용한 신장 처리(단계 S7304)의 상세한 처리 순서예를 도시한 제2 플로우차트이다. 단계 S7708 후, 도 78에 있어서, 컴퓨터(1100)는, 시프트 후의 레지스터 r2로부터 말미 N비트를 대상 비트열로서 추출한다(단계 S7801). 다음으로, 컴퓨터(1100)는, 2N 분지 무절점 허프만 트리(H)의 루트의 구조체로부터 리프(L#)에 대한 포인터를 특정하고(단계 S7802), 포인트처가 되는 리프(L#)의 구조체에 1패스로 액세스한다(단계 S7803). 이 후, 컴퓨터(1100)는, 액세스처인 리프(L#)의 구조체의 대조 플래그가 ON인지 여부를 판단한다(단계 S7804).
대조 플래그가 ON인 경우(단계 S7804 : Yes), 컴퓨터(1100)는, 액세스처인 리프(L#)의 구조체 내의 문자 정보에 관해 치환 문자를 신장 버퍼에 기록하고(단계 S7805), 단계 S7807로 이행한다. 한편, 대조 플래그가 OFF인 경우(단계 S7804 : No), 컴퓨터(1100)는, 액세스처인 리프(L#)의 구조체 내의 문자 정보(신장 문자)를 신장 버퍼에 기록하고(단계 S7806), 단계 S7807로 이행한다.
단계 S7807에서는, 컴퓨터(1100)는, 액세스처인 리프(L#)의 구조체로부터 압축 부호 길이(leg)를 추출하고(단계 S7807), 비트 어드레스(abi)를 갱신한다(단계 S7808). 이 후, 컴퓨터(1100)는, 메모리에 압축 부호열이 있는지 여부, 구체적으로는, 마스크 패턴에 의한 마스크 처리가 실시되어 있지 않은 압축 부호열이 있는지 여부를 판단한다(단계 S7809). 예컨대, 바이트 오프셋(byos)에 해당하는 바이트 위치가 있는지 여부에 의해 판단한다. 압축 부호열이 있는 경우(단계 S7809 : Yes), 도 77의 단계 S7702로 되돌아간다. 한편, 압축 부호열이 없는 경우(단계 S7809 : No), 신장 처리(단계 S7304)를 종료한다.
이러한 신장 처리(단계 S3704)에 의해, 압축 상태 그대로 대조·신장을 행할 수 있어, 신장 속도의 고속화를 도모할 수 있다.
이상 설명한 바와 같이, 본 실시형태에 의하면, 검색 대상 파일군을 복수의 세그먼트로 분할하여 보존하고 있기 때문에, 세그먼트 단위의 인덱스 정보로 검색을 행할 수 있다. 따라서, 검색 대상 파일의 파일수의 증대에 수반하여 인덱스 정보의 사이즈가 증대되더라도, 검색 처리 시간의 증대를 억제할 수 있다.
또한, 동일 계층의 세그먼트군을 집약하여 상위 계층의 세그먼트를 생성하여 계층 구조 세그먼트군(SG)을 구축하고 있다. 따라서, 계층 구조 세그먼트군(SG)의 최상위 계층의 세그먼트의 인덱스 정보로부터 순차 축약을 행함으로써, 검색 문자열이 존재하지 않는 세그먼트 및 상기 세그먼트의 하위에 존재하는 압축 파일을 축약 대상으로부터 제외시킬 수 있다. 이와 같이, 쓸데 없는 축약을 하지 않아도 되기 때문에, 검색 속도의 향상을 도모할 수 있다.
또한, 전술한 실시형태에서는, 마스터 서버가 제1 계층까지의 축약을 행하고, 축약된 파일 번호를, 상기 파일 번호를 소유하는 슬레이브 서버에 송신한다. 따라서, 송신되지 않은 슬레이브 서버에서는 축약 처리를 실행하지 않아도 되기 때문에, 쓸데 없는 검색을 억제할 수 있어, 검색 효율의 향상을 도모할 수 있다.
또, 전술한 실시형태에서는, 마스터 서버(MS)가 압축 파일(fi)의 신장을 행하는 예에 관해 설명했지만, 마스터 서버(MS)가 2N 분지 무절점 허프만 트리(H)를 각 슬레이브 서버에 미리 송신해 둠으로써, 각 슬레이브 서버에 있어서 압축 파일(fi)의 신장 처리를 실행하는 것으로 해도 좋다. 이 경우, 마스터 서버(MS)로부터 파일 번호(i)를 받은 슬레이브 서버는, 상기 파일 번호(i)의 압축 파일(Fi)을 신장하고, 신장한 대상 파일(Fi)을 마스터 서버(MS)에 되돌려 보내게 된다. 이와 같이, 슬레이브 서버에 신장 처리를 실행시킴으로써, 마스터 서버(MS)에 대한 부하 집중을 억제하고 부하 분산을 도모할 수 있다.
또한, 전술한 실시형태에서는, 압축 파일(fi)을 축약하는 예에 관해 설명했지만 축약 대상은, 비압축의 대상 파일(Fi)이어도 좋다. 이 경우, 전술한 압축 처리나 신장 처리는 불필요해진다. 또한, 출현 맵에 대한 포인터는 압축 부호가 아니라, 문자 정보를 특정하는 포인터이면 된다.
또한, 미리, 압축 부호 맵(Ms)의 압축 영역의 비트열을, 선두 위치로부터 말미 위치에 걸쳐서 대상 파일군(Fs)의 파일 번호 p의 내림차순으로 배열해 둔다. 이에 따라, 파일 번호 ; 1∼n의 비트열이 압축되어도, 추가 파일의 파일 번호와 그 비트의 어긋남이 없고, 대상 파일(Fi)의 축약을 정확히 실행할 수 있다.
또한, 압축 부호 맵(Ms)의 압축 영역을 정해진 수의 최대 배수(예컨대, 정해진 파일수 n=256의 최대 배수)의 비트열로 함으로써, 대상 파일이 추가될 때마다, 압축 부호 맵(Ms)의 압축을 행할 필요가 없다. 이에 따라, 컴퓨터의 연산 부하를 저감시킬 수 있다. 또한, 추가 후의 파일 총수가 초기의 파일수의 최대 배수에 도달한 경우에, 압축 부호 맵(Ms)의 파일 번호에 대응하는 전비트가 압축 영역이 되기 때문에, 압축 부호 맵(Ms)이 허프만 트리(h)에 의해 압축된다. 이에 따라, 메모리 절감화를 도모할 수 있다. 이와 같이, 정해진 파일수 n(예컨대 256개) 단위로 압축이 행해지기 때문에, 연산 부하 저감과 메모리 절감화를 동시에 실현할 수 있다.
또, 본 실시형태에서 설명한 정보 처리 방법은, 미리 준비된 프로그램을 퍼스널·컴퓨터나 워크 스테이션 등의 컴퓨터(1100)에서 실행함으로써 실현할 수 있다. 본 정보 처리 프로그램은, 하드 디스크, 플렉시블 디스크, CD-ROM, MO, DVD 등의 컴퓨터(1100)에서 판독 가능한 기록 매체에 기록되고, 컴퓨터(1100)에 의해 기록 매체로부터 독출됨으로써 실행된다. 또한 본 정보 처리 프로그램은, 인터넷 등의 네트워크를 통해 배포해도 좋다.
6201 : 지정부, 6202 : 제1 신장부, 6203 : 입력부, 6204 : 추출부, 6205 : 제2 신장부, 6206 : 특정부, 6207 : 세그먼트 생성부
Claims (11)
- 컴퓨터에,
복수의 파일의 각각에 관해 정해진 문자 정보를 포함하는지 여부를 나타내는 제1 정보와, 상기 복수의 파일 중 적어도 어느 하나가 상기 정해진 문자 정보를 포함하는지 여부를 나타내는 제2 정보를 기억 수단에 기억하고,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 것을 실행시키는 것을 특징으로 하는 추출 방법. - 제1항에 있어서, 상기 컴퓨터에,
상기 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내지 않는 것이 검출되면, 상기 복수의 파일이 상기 정해진 문자 정보를 포함하지 않는다고 판정하는 것을 추가로 실행시키는 것을 특징으로 하는 추출 방법. - 제1항 또는 제2항에 있어서, 상기 제1 정보는, 상기 복수의 파일의 각각에 관해 상기 정해진 문자 정보를 포함하는지 여부를 나타내는 비트에 의한 비트열이고,
상기 제2 정보는, 상기 비트열에 포함되는 각 비트를 연산하여 얻어지는 비트인 것을 특징으로 하는 추출 방법. - 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 컴퓨터에,
상기 기억 수단에, 상기 복수의 파일의 각각에 관해 검색 대상으로 하는지 여부를 나타내는 제3 정보를 추가로 기억하고,
상기 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보 및 상기 제3 정보에 기초하여, 검색 대상이며, 상기 정해진 문자 정보를 포함하는 파일을 추출하는 것을 실행시키는 것을 특징으로 하는 추출 방법. - 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 컴퓨터에,
상기 기억 수단에, 상기 복수의 파일 중 적어도 어느 하나가 검색 대상인지 여부를 나타내는 제4 정보를 추가로 기억하고,
상기 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내며, 상기 제4 정보가 상기 복수의 파일 중 적어도 어느 하나가 검색 대상이라는 취지를 나타내는 것을 검출하면, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 것을 실행시키는 것을 특징으로 하는 추출 방법. - 컴퓨터에,
복수의 파일의 각각에 관해 정해진 문자 정보를 포함하는지 여부를 나타내는 제1 정보와, 상기 복수의 파일 중 일부의 파일에 관해, 상기 일부의 파일 중 적어도 어느 하나가 상기 정해진 문자 정보를 포함하는지 여부를 나타내는 제2 정보를 기억 수단에 기억하고,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보에 기초하여 상기 복수의 파일로부터 상기 정해진 문자 정보를 포함하는 파일을 추출하고,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내지 않는 것이 검출되면, 상기 복수의 파일 중 상기 일부의 파일에 포함되지 않는 파일로부터, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 것을 실행시키는 것을 특징으로 하는 추출 방법. - 컴퓨터에,
복수의 파일의 각각에 관해 정해진 문자 정보를 포함하는지 여부를 나타내는 제1 정보와, 상기 복수의 파일 중 적어도 어느 하나가 상기 정해진 문자 정보를 포함하는지 여부를 나타내는 제2 정보를 기억 수단에 기억하고,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 것을 실행시키는 것을 특징으로 하는 추출 프로그램. - 컴퓨터에,
복수의 파일의 각각에 관해 정해진 문자 정보를 포함하는지 여부를 나타내는 제1 정보와, 상기 복수의 파일 중 일부의 파일에 관해, 상기 일부의 파일 중 적어도 어느 하나가 상기 정해진 문자 정보를 포함하는지 여부를 나타내는 제2 정보를 기억 수단에 기억하고,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보에 기초하여 상기 복수의 파일로부터 상기 정해진 문자 정보를 포함하는 파일을 추출하고,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내지 않는 것이 검출되면, 상기 복수의 파일 중 상기 일부의 파일에 포함되지 않는 파일로부터, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 것을 실행시키는 것을 특징으로 하는 추출 프로그램. - 복수의 파일의 각각에 관해 정해진 문자 정보를 포함하는지 여부를 나타내는 제1 정보와, 상기 복수의 파일 중 적어도 어느 하나가 상기 정해진 문자 정보를 포함하는지 여부를 나타내는 제2 정보를 기억하는 기억 수단과,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 추출 수단을 구비하는 것을 특징으로 하는 추출 장치. - 복수의 파일의 각각에 관해 정해진 문자 정보를 포함하는지 여부를 나타내는 제1 정보와, 상기 복수의 파일 중 일부의 파일에 관해, 상기 일부의 파일 중 적어도 어느 하나가 상기 정해진 문자 정보를 포함하는지 여부는 제2 정보를 기억하는 기억 수단과,
상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내는 것이 검출되면, 상기 제1 정보에 기초하여 상기 복수의 파일로부터 상기 정해진 문자 정보를 포함하는 파일을 추출하고, 상기 정해진 문자 정보에 관한 검색 요구를 받았을 때에, 상기 제2 정보가 상기 정해진 문자 정보를 포함한다는 취지를 나타내지 않는 것이 검출되면, 상기 복수의 파일 중 상기 일부의 파일에 포함되지 않는 파일로부터, 상기 제1 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 추출 수단을 구비하는 것을 특징으로 하는 추출 장치. - 복수의 컴퓨터와, 할당 장치를 포함하는 추출 시스템으로서,
상기 할당 장치가,
복수의 파일을 분할하여 얻어지는 복수의 파일군의 각각에 관해, 각각의 파일군에 포함되는 적어도 하나의 파일이 정해진 문자 정보를 포함하는지를 나타내는 정보를 유지하는 유지 수단과,
상기 정해진 문자 정보에 관한 검색 요구를 받은 경우에, 상기 유지 수단에 유지된 정보에 상기 정해진 문자 정보를 포함하는 파일을 적어도 하나 포함한다는 취지를 나타내는 파일군의 수에 따라, 상기 복수의 파일군을 상기 복수의 컴퓨터의 각각에 할당하는 할당 수단을 포함하고,
상기 복수의 컴퓨터의 각각이,
상기 복수의 파일군의 각각에 관해, 각각의 파일군에 포함되는 어느 파일이 정해진 문자 정보를 포함하는지를 나타내는 인덱스 정보를 기억하는 기억 수단과,
상기 기억 수단에 기억된 상기 복수의 파일군 각각에 관한 인덱스 정보 중, 상기 할당 장치에 할당된 파일군에 관한 상기 인덱스 정보에 기초하여 상기 정해진 문자 정보를 포함하는 파일을 추출하는 추출 수단을 포함하는 것을 특징으로 하는 추출 시스템.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2011/071028 WO2013038527A1 (ja) | 2011-09-14 | 2011-09-14 | 抽出方法、抽出プログラム、抽出装置、および抽出システム |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140061450A true KR20140061450A (ko) | 2014-05-21 |
KR101560109B1 KR101560109B1 (ko) | 2015-10-13 |
Family
ID=47882786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147006760A KR101560109B1 (ko) | 2011-09-14 | 2011-09-14 | 추출 방법, 추출 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 추출 장치, 및 추출 시스템 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9916314B2 (ko) |
EP (1) | EP2757488B1 (ko) |
JP (1) | JP5741699B2 (ko) |
KR (1) | KR101560109B1 (ko) |
CN (1) | CN103797480B (ko) |
AU (1) | AU2011377004B2 (ko) |
WO (1) | WO2013038527A1 (ko) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6086021B2 (ja) * | 2013-04-25 | 2017-03-01 | 富士通株式会社 | 検索システムおよび検索方法 |
US10540404B1 (en) * | 2014-02-07 | 2020-01-21 | Amazon Technologies, Inc. | Forming a document collection in a document management and collaboration system |
US9450601B1 (en) * | 2015-04-02 | 2016-09-20 | Microsoft Technology Licensing, Llc | Continuous rounding of differing bit lengths |
JP6662169B2 (ja) | 2016-04-18 | 2020-03-11 | 富士通株式会社 | 符号化プログラム、符号化方法、符号化装置、検索プログラム、検索方法および検索装置 |
JP6720664B2 (ja) | 2016-04-18 | 2020-07-08 | 富士通株式会社 | インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法 |
JP6648620B2 (ja) | 2016-04-19 | 2020-02-14 | 富士通株式会社 | 符号化プログラム、符号化装置および符号化方法 |
KR102006245B1 (ko) * | 2017-09-15 | 2019-08-06 | 주식회사 인사이너리 | 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템 |
CN109993025B (zh) * | 2017-12-29 | 2021-07-06 | 中移(杭州)信息技术有限公司 | 一种关键帧提取方法及设备 |
US10541708B1 (en) * | 2018-09-24 | 2020-01-21 | Redpine Signals, Inc. | Decompression engine for executable microcontroller code |
CN109855566B (zh) * | 2019-02-28 | 2021-12-03 | 易思维(杭州)科技有限公司 | 一种槽孔特征的提取方法 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5469354A (en) * | 1989-06-14 | 1995-11-21 | Hitachi, Ltd. | Document data processing method and apparatus for document retrieval |
JP3263963B2 (ja) * | 1991-12-25 | 2002-03-11 | 株式会社日立製作所 | 文書検索方法及び装置 |
US5748953A (en) * | 1989-06-14 | 1998-05-05 | Hitachi, Ltd. | Document search method wherein stored documents and search queries comprise segmented text data of spaced, nonconsecutive text elements and words segmented by predetermined symbols |
DE69032712T2 (de) | 1989-06-14 | 1999-07-01 | Hitachi, Ltd., Tokio/Tokyo | Hierarchischer vorsuch-typ dokument suchverfahren, vorrichtung dazu, sowie eine magnetische plattenanordnung für diese vorrichtung |
JP2986865B2 (ja) | 1989-07-24 | 1999-12-06 | 株式会社日立製作所 | データ検索方法および装置 |
US5745745A (en) * | 1994-06-29 | 1998-04-28 | Hitachi, Ltd. | Text search method and apparatus for structured documents |
US5778361A (en) * | 1995-09-29 | 1998-07-07 | Microsoft Corporation | Method and system for fast indexing and searching of text in compound-word languages |
JPH09138809A (ja) * | 1995-11-15 | 1997-05-27 | Oki Electric Ind Co Ltd | 全文検索方法 |
CA2340531C (en) * | 2001-03-12 | 2006-10-10 | Ibm Canada Limited-Ibm Canada Limitee | Document retrieval system and search method using word set and character look-up tables |
US7149748B1 (en) * | 2003-05-06 | 2006-12-12 | Sap Ag | Expanded inverted index |
CN1567174A (zh) * | 2003-06-09 | 2005-01-19 | 吴胜远 | 对象表示和处理的方法及其装置 |
US8504565B2 (en) * | 2004-09-09 | 2013-08-06 | William M. Pitts | Full text search capabilities integrated into distributed file systems— incrementally indexing files |
US20100005072A1 (en) | 2004-09-09 | 2010-01-07 | Pitts William M | Nomadic File Systems |
WO2006123429A1 (ja) * | 2005-05-20 | 2006-11-23 | Fujitsu Limited | 情報検索方法、装置、プログラム、該プログラムを記録した記録媒体 |
JP2009048352A (ja) * | 2007-08-17 | 2009-03-05 | Nippon Telegr & Teleph Corp <Ntt> | 情報検索装置、情報検索方法および情報検索プログラム |
JP5376163B2 (ja) * | 2007-11-15 | 2013-12-25 | 日本電気株式会社 | 文書管理・検索システムおよび文書の管理・検索方法 |
CN101452465A (zh) * | 2007-12-05 | 2009-06-10 | 高德软件有限公司 | 大批量文件数据存放和读取方法 |
US8266179B2 (en) * | 2009-09-30 | 2012-09-11 | Hewlett-Packard Development Company, L.P. | Method and system for processing text |
JP4893805B2 (ja) * | 2009-11-06 | 2012-03-07 | 富士通株式会社 | 情報処理プログラム、情報検索プログラム、および情報処理装置 |
JP5418218B2 (ja) | 2009-12-25 | 2014-02-19 | 富士通株式会社 | 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置 |
-
2011
- 2011-09-14 KR KR1020147006760A patent/KR101560109B1/ko active IP Right Grant
- 2011-09-14 CN CN201180073519.7A patent/CN103797480B/zh active Active
- 2011-09-14 EP EP11872214.9A patent/EP2757488B1/en active Active
- 2011-09-14 AU AU2011377004A patent/AU2011377004B2/en active Active
- 2011-09-14 WO PCT/JP2011/071028 patent/WO2013038527A1/ja active Application Filing
- 2011-09-14 JP JP2013533401A patent/JP5741699B2/ja active Active
-
2014
- 2014-03-10 US US14/202,429 patent/US9916314B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN103797480B (zh) | 2017-11-28 |
EP2757488B1 (en) | 2019-02-20 |
US9916314B2 (en) | 2018-03-13 |
US20140229484A1 (en) | 2014-08-14 |
JPWO2013038527A1 (ja) | 2015-03-23 |
EP2757488A4 (en) | 2015-04-22 |
AU2011377004B2 (en) | 2015-11-12 |
JP5741699B2 (ja) | 2015-07-01 |
CN103797480A (zh) | 2014-05-14 |
KR101560109B1 (ko) | 2015-10-13 |
WO2013038527A1 (ja) | 2013-03-21 |
EP2757488A1 (en) | 2014-07-23 |
AU2011377004A1 (en) | 2014-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101560109B1 (ko) | 추출 방법, 추출 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 추출 장치, 및 추출 시스템 | |
JP4893805B2 (ja) | 情報処理プログラム、情報検索プログラム、および情報処理装置 | |
JP4707198B2 (ja) | 情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置 | |
JP5062131B2 (ja) | 情報処理プログラム、情報処理装置、および情報処理方法 | |
JP5782214B2 (ja) | 情報検索プログラム、情報検索装置および情報検索方法 | |
JP5391583B2 (ja) | 検索装置、生成装置、プログラム、検索方法および生成方法 | |
JP5418218B2 (ja) | 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置 | |
US7756859B2 (en) | Multi-segment string search | |
JPWO2012150637A1 (ja) | 抽出方法、情報処理方法、抽出プログラム、情報処理プログラム、抽出装置、および情報処理装置 | |
JP5605288B2 (ja) | 出現マップ生成方法、ファイル抽出方法、出現マップ生成プログラム、ファイル抽出プログラム、出現マップ生成装置、およびファイル抽出装置 | |
CN1703692A (zh) | 创建和使用紧凑语言数据的***和方法 | |
US6675171B2 (en) | Memory based on a digital trie structure | |
JP5505524B2 (ja) | 生成プログラム、生成装置、および生成方法 | |
JP5621906B2 (ja) | 検索プログラム、検索装置、および検索方法 | |
JP2016149160A (ja) | 情報生成方法、およびインデックス情報 | |
JP2016149160A5 (ko) | ||
Allen | A file index for document storage and retrieval utilizing descriptor fragments | |
JPH08161351A (ja) | 単語番号置換方法,インデックス作成方法,文書検索方法及び文書検索装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20180918 Year of fee payment: 4 |