JP5418218B2 - 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置 - Google Patents

情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置 Download PDF

Info

Publication number
JP5418218B2
JP5418218B2 JP2009296410A JP2009296410A JP5418218B2 JP 5418218 B2 JP5418218 B2 JP 5418218B2 JP 2009296410 A JP2009296410 A JP 2009296410A JP 2009296410 A JP2009296410 A JP 2009296410A JP 5418218 B2 JP5418218 B2 JP 5418218B2
Authority
JP
Japan
Prior art keywords
character code
map
compression
gram
pointer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2009296410A
Other languages
English (en)
Other versions
JP2011138230A (ja
Inventor
正弘 片岡
啓士郎 田中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009296410A priority Critical patent/JP5418218B2/ja
Priority to US12/973,017 priority patent/US10389378B2/en
Publication of JP2011138230A publication Critical patent/JP2011138230A/ja
Application granted granted Critical
Publication of JP5418218B2 publication Critical patent/JP5418218B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/3332Query translation
    • G06F16/3337Translation of the query language, e.g. Chinese to English

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、ハフマン木を用いた情報の圧縮、伸長をおこなう情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置に関する。
従来において、文字と該文字を含む文書との対応付けを示す文字成分表と、文書から付属語を除いて作成した凝縮本文と文書とを対応付けて格納した凝縮本文ファイルとを備える検索技術がある。当該検索技術では、文字成分表を参照し、検索キーワードに含まれる文字に対応する文書を特定し、文字成分表を参照するステップの実行結果に応じて、凝縮本文ファイル中の凝縮本文から検索キーワードを含む文書を特定する(たとえば、下記特許文献1を参照)。
また、テキストデータを,ある長さnの文字列単位で読み出し,各文字列に対応する文字成分表のエントリに文字列が存在したことを表す情報を記録する技術が開示されている。そして、検索タームを長さnの文字列に分割し,各文字列に対応する連接文字成分表のエントリに全て存在情報が記録されている文書を出力し、テキストそのものを検索する以前に階層的に文字成分表サーチを行うことにより検索対象を絞り込み、フルテキストサーチを高速に行っている(たとえば、下記特許文献2を参照)。
また、英語などの文字種が少ない表音文字によって構成される文書を対象とした場合に、与えられた検索タームから十分な絞り込みを行うことのできる連接文字成分表サーチ手段により等価的に高速なフルテキストサーチを実現する技術が開示されている(たとえば、下記特許文献3を参照)。
また、登録する各文書について、テキストデータにおける文字の出現状況を記述した文字成分表を作成し、予め定められた文書構造名に従って文書構造を認識し、構造毎にテキストデータを分割し、出現する文字毎に各文字が出現する文書構造に対応する特定のビット位置に1を立て、文字毎の出現文書構造位置を記述した構造ビット列を格納しておく技術が開示されている。そして、ユーザより検索文字列として“極限作業”、文書構造として“発明の名称”OR“請求の範囲”OR“効果”が指定されたとき、“極限作業”で文字成分表サーチを行ない、結果として文書1,7,15,38・・・を得、指定文書構造に基づく指定文書構造ビット列100100001と検索された文書の構造ビット列とのビットANDをとり、検索結果として文書1,7,38・・・を得る(たとえば、下記特許文献4を参照)。
特許第2986865号公報 特許第3263963号公報 特許第3497243号公報 特許第3518933号公報
しかしながら、上述した従来技術では、膨大な数(たとえば、1万個)の文書ファイルで構成されたコンテンツについて、64K種の16ビット文字コードの文字コードで文字成分表を作成している。検索ノイズ削減のため、文字成分表を単字のほか、2連字用、3連字用、4連字用、…と増加させると、サイズ爆発を引き起こし、データのファイルサイズが激増し、省資源のハード環境では処理が困難になるという問題があった。一方、ハッシュ関数などにより、ファイルサイズの縮小を行うと、検索ノイズが増加し、検索速度が低下するという問題があった。さらに、2連字用、3連字用、4連字用、…の文字成分表を生成する処理時間も増大するという問題があった。
この発明は、上述した従来技術による問題点を解消するため、省メモリ化と検索ノイズの低減化とを図ることができる情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置を提供することを目的とする。
本発明の一観点によれば、文字コード列が記述されている対象ファイル群を記憶しておき、前記対象ファイル群の中から選ばれた一の対象ファイル内の連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成し、生成された複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の連続グラム分割マップとし、特定された複数種類の連続グラム分割マップにおいて、前記連続する2グラムの文字コード列の前記一の対象ファイルでの存否をあらわすビットを更新する情報処理プログラムおよび情報処理装置が提供される。
本発明の他の観点によれば、文字コード列が記述されている対象ファイル群と、連続する2グラムの文字コード列ごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の連続グラム分割マップ群と、を記憶しておき、検索キーワードの入力を受け付け、入力された検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成し、前記複数種類の連続グラム分割マップ群の中から、生成された複数種類の組み合わせ識別情報が割り当てられている複数種類の連続グラム分割マップを、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定し、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定された複数種類の連続グラム分割マップ群に基づいて、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在する対象ファイルを前記対象ファイル群の中から特定する情報検索プログラムおよび情報検索装置が提供される。
開示の情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置によれば、データのファイルサイズの縮小、かつ、検索ノイズの低減化とを図ることができるという効果を奏する。
対象ファイルの圧縮までの処理の流れを示す説明図である。 分枝ハフマン木の生成元となる節点集合体を示す説明図である。 分枝ハフマン木を示す説明図である。 圧縮前処理を示す説明図である。 実施の形態にかかる情報処理装置のハードウェア構成を示すブロック図である。 実施の形態にかかる情報処理装置の機能的構成1を示すブロック図である。 文字出現頻度集計テーブルを示す説明図である。 予約語出現頻度集計テーブルを示す説明図である。 文字コードおよび予約語の出現頻度を統合した集計結果テーブルを示す説明図である。 分割文字出現頻度集計テーブルを示す説明図である。 上位8ビットに関する分割文字出現頻度集計テーブルを示す説明図である。 下位8ビットに関する分割文字出現頻度集計テーブルを示す説明図である。 算出部による算出結果テーブルを示す説明図である。 分枝ハフマン木の構造体を示す説明図である。 分枝ハフマン木の構造体を示す説明図である。 第4階層から第3階層へ最適化する場合の算出結果テーブルの更新例を示す説明図である。 第3階層から第2階層へ最適化する場合の算出結果テーブルの更新例を示す説明図である。 第2階層から第1階層へ最適化する場合の算出結果テーブルの更新例を示す説明図である。 最適化後の2分枝ハフマン木の構造体を示す説明図である。 最適化後の2分枝ハフマン木における葉の構造体が格納する情報を示す説明図である。 予約語の構造体を示す説明図である。 高位文字コードの構造体を示す説明図である。 分割文字コードの構造体を示す説明図である。 情報処理装置が自動実行する2分枝ハフマン木生成処理手順を示すフローチャートである。 図19に示した葉数削減処理(ステップS1903)の詳細な処理手順を示すフローチャートである。 図19に示したパラメータ算出処理(ステップS1905)の詳細な処理手順を示すフローチャートである。 図19に示した構造体セル構築処理(ステップS1906)の詳細な処理手順を示すフローチャートである。 図22に示した第i階層の構造体セルC(i,j)の構築処理(ステップS2204)の詳細な処理手順を示すフローチャート(前半)である。 図22に示した第i階層の構造体セルC(i,j)の構築処理(ステップS2204)の詳細な処理手順を示すフローチャート(後半)である。 図19に示した最適化処理(ステップS1907)の詳細な処理手順を示すフローチャートである。 分枝の無節点ハフマン木を示す説明図である。 分枝の無節点ハフマン木の節点(根)の構造体を示す説明図である。 無節点ハフマン木の葉の構造体を示す説明図である。 葉の構造体に格納される情報を示す説明図である。 実施の形態にかかる情報処理装置の機能的構成2を示すブロック図である。 情報処理装置が自動実行する2分枝ハフマン木→2分枝無節点ハフマン木変換処理手順を示すフローチャートである。 図31−1に示した圧縮符号マップへのポインタ設定処理(ステップS3110)の詳細な処理手順を示すフローチャートである。 実施の形態にかかる情報処理装置の機能的構成3を示すブロック図である。 圧縮対象文字コード列の一例を示す説明図である。 圧縮符号列の一例を示す説明図である。 分枝の無節点ハフマン木を用いた圧縮処理の具体例を示す説明図である。 情報処理装置が自動実行する2分枝の無節点ハフマン木H2を用いたファイル圧縮処理手順を示すフローチャートである。 図35に示した圧縮処理(ステップS3503)の詳細な処理手順を示すフローチャート(その1)である。 図35に示した圧縮処理(ステップS3503)の詳細な処理手順を示すフローチャート(その2)である。 図35に示した圧縮処理(ステップS3503)の詳細な処理手順を示すフローチャート(その3)である。 圧縮符号マップ群の初期状態を示す説明図である。 圧縮符号マップ更新部による更新後の圧縮符号マップ群を示す説明図である。 2グラムの圧縮符号マップのサイズ縮小を示す説明図である。 2グラムの圧縮符号マップの分割時のサイズを示す図表である。 2グラムの圧縮符号マップへのポインタの分割例(その1)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その2)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その3)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その4)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その5)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その6)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その7)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その8)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その9)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その10)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その11)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その12)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その13)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その14)を示す説明図である。 2グラムの圧縮符号マップへのポインタの分割例(その15)を示す説明図である。 連続グラム分割マップの具体例(その1)を示す説明図である。 連続グラム分割マップの具体例(その2)を示す説明図である。 連続グラム分割マップの具体例(その3)を示す説明図である。 連続グラム分割マップの具体例(その4)を示す説明図である。 連続グラム分割マップの具体例(その5)を示す説明図である。 連続グラム分割マップの具体例(その6)を示す説明図である。 連続グラム分割マップの具体例(その7)を示す説明図である。 連続グラム分割マップの具体例(その8)を示す説明図である。 連続グラム分割マップの具体例(その9)を示す説明図である。 連続グラム分割マップの具体例(その10)を示す説明図である。 連続グラム分割マップの具体例(その11)を示す説明図である。 連続グラム分割マップの具体例(その12)を示す説明図である。 連続グラム分割マップの具体例(その13)を示す説明図である。 連続グラム分割マップの具体例(その14)を示す説明図である。 連続グラム分割マップの具体例(その15)を示す説明図である。 連続グラム分割マップの具体例(その16)を示す説明図である。 連続グラム分割マップの具体例(その17)を示す説明図である。 連続グラム分割マップの具体例(その18)を示す説明図である。 連続グラム分割マップの具体例(その19)を示す説明図である。 連続グラム分割マップの具体例(その20)を示す説明図である。 連続グラム分割マップの具体例(その21)を示す説明図である。 連続グラム分割マップの具体例(その22)を示す説明図である。 連続グラム分割マップの具体例(その23)を示す説明図である。 連続グラム分割マップの具体例(その24)を示す説明図である。 連続グラム分割マップの具体例(その25)を示す説明図である。 連続グラム分割マップの具体例(その26)を示す説明図である。 連続グラム分割マップの具体例(その27)を示す説明図である。 連続グラム分割マップの具体例(その28)を示す説明図である。 連続グラム分割マップの具体例(その29)を示す説明図である。 連続グラム分割マップの具体例(その30)を示す説明図である。 連続グラム分割マップの具体例(その31)を示す説明図である。 連続グラム分割マップの具体例(その32)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その1)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その2)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その3)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その4)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その5)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その6)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その7)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その8)を示す説明図である。 連続グラム分割マップおよびxグラム頭尾分割マップの生成例(その9)を示す説明図である。 図44−1〜図44−9におけるマップ生成用レジスタのポインタ格納状態を示す説明図である。 高位文字コードどうしの連続グラム分割マップへのポインタの生成例を示す説明図である。 高位文字コードと上位分割文字コードとの連続グラム分割マップへのポインタの生成例を示す説明図である。 上位分割文字コードと下位分割文字コードとの連続グラム分割マップへのポインタの生成例を示す説明図である。 下位分割文字コードと高位文字コードとの連続グラム分割マップへのポインタの生成例を示す説明図である。 図32に示した圧縮符号マップ特定部3206および圧縮符号マップ更新部3207による圧縮符号マップ生成処理手順を示すフローチャートである。 図46−1に示した1グラムの圧縮符号マップ生成処理(ステップS4602)の詳細な処理手順を示すフローチャートである。 図46−1に示した2グラムの分割マップ生成処理(ステップS4603)の詳細な処理手順を示すフローチャートである。 図46−3に示したポインタ分割処理(ステップS4635、S4637、S4642、S4644)の詳細な処理手順を示すフローチャートである。 グラム数xの変動処理を示すフローチャートである。 出現率と出現率領域との関係を示す説明図である。 出現率領域別の圧縮パターンを有する圧縮パターンテーブルを示す説明図である。 B領域およびB´領域の場合の圧縮パターンを示す説明図である。 C領域およびC´領域の場合の圧縮パターンを示す説明図である。 D領域およびD´領域の場合の圧縮パターンを示す説明図である。 E領域およびE´領域の場合の圧縮パターンを示す説明図である。 圧縮された圧縮符号マップ群msを示す説明図である。 圧縮された圧縮符号マップ群msへのビット列追加を示す説明図である。 削除マップを示す説明図である。 圧縮符号マップ圧縮処理手順を示すフローチャートである。 追加ファイル圧縮処理手順を示すフローチャートである。 削除マップ更新処理手順を示すフローチャートである。 圧縮ファイルfの検索と対象ファイルFへの伸長までの処理の流れを示す説明図である。 実施の形態にかかる情報検索装置の機能的構成を示すブロック図である。 対象ファイルFp内の記述例を示す説明図である。 検索条件が指定されたときの検索キーワードへの特殊文字の自動付与結果を示す説明図である。 圧縮ファイル特定部による特定例を示す説明図である。 5グラムの検索キーワード「人形芝居」について、連続グラム分割マップ群と5グラム頭尾分割マップ群とを用いた圧縮ファイルfの特定例(その1)を示す説明図である。 5グラムの検索キーワード「人形芝居」について、連続グラム分割マップ群と5グラム頭尾分割マップ群とを用いた圧縮ファイルfの特定例(その2)を示す説明図である。 5グラムの検索キーワード「人形芝居」について、連続グラム分割マップ群と5グラム頭尾分割マップ群とを用いた圧縮ファイルfの特定例(その3)を示す説明図である。 抽出部、葉特定部および伸長コード格納部による2分枝の無節点ハフマン木H2を用いた伸長処理の具体例(その1)を示す説明図である。 抽出部、葉特定部および伸長コード格納部による2分枝の無節点ハフマン木H2を用いた伸長処理の具体例(その2)を示す説明図である。 抽出部、葉特定部および伸長コード格納部による2分枝の無節点ハフマン木H2を用いた伸長処理の具体例(その3)を示す説明図である。 抽出部、葉特定部および伸長コード格納部による2分枝の無節点ハフマン木H2を用いた伸長処理の具体例(その4)を示す説明図である。 抽出部、葉特定部および伸長コード格納部による2分枝の無節点ハフマン木H2を用いた伸長処理の具体例(その5)を示す説明図である。 照合処理の具体例(その1)を示す説明図である。 照合処理の具体例(その2)を示す説明図である。 照合処理の具体例(その3)を示す説明図である。 検索キーワード圧縮処理手順を示すフローチャートである。 圧縮ファイル特定部によるファイル絞込み処理手順を示すフローチャートである。 図64−1に示した1グラムでのファイル絞込み処理(ステップS6412)の詳細な処理手順を示すフローチャートである。 図64−2に示したアクセス先の圧縮符号マップ伸長処理(ステップS6425)の詳細な処理手順を示すフローチャートである。 図64−1に示した複数グラムでのファイル絞込み処理(ステップS6413)の詳細な処理手順を示すフローチャート(その1)である。 図64−1に示した複数グラムでのファイル絞込み処理(ステップS6413)の詳細な処理手順を示すフローチャート(その2)である。 図64−1に示した複数グラムでのファイル絞込み処理(ステップS6413)の詳細な処理手順を示すフローチャート(その3)である。 特定圧縮ファイル伸長処理手順を示すフローチャートである。 無節点ハフマン木H2を用いた伸長処理手順を示すフローチャート(その1)である。 無節点ハフマン木H2を用いた伸長処理手順を示すフローチャート(その2)である。 照合処理手順を示すフローチャート(その1)である。 照合処理手順を示すフローチャート(その2)である。 間引き処理を示す説明図である。 間引き分割マップ群を用いた圧縮ファイル特定例を示す説明図である。
以下に添付図面を参照して、情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置の好適な実施の形態を詳細に説明する。まず、本実施の形態にかかる2分枝ハフマン木について説明する。
<対象ファイルの圧縮までの処理の流れ>
図1は、対象ファイルの圧縮までの処理の流れを示す説明図である。本実施の形態では、まず、(1)情報処理装置が、対象ファイル群Fsを読み込んで対象ファイル群Fs内に出現する文字の出現頻度を集計する。対象ファイル群Fsは、数千〜数万種の文字(厳密には文字コード)が記述されている電子文書である。
対象ファイル群Fsは文字コードが含まれていれば、テキスト形式でもよく、HTML(HyperText Markup Language)やXML(Extensible Markup Language)で記述されていてもよい。対象ファイル群Fsとしては、たとえば、国語辞典、外国語辞典(英和や和英など)、専門用語辞典などの辞書データやWebページを適用することができる。
出現頻度とは、文字が出現する回数である。たとえば、対象ファイル群Fsのファイル数が3個(F1〜F3)であり、ある文字Xの出現回数が対象ファイルF1で2回、対象ファイルF2で3回、対象ファイルF3で0回の場合、文字Xの出現頻度は5である。文字ごとに集計された出現頻度を集計結果10とする。
つぎに、(2)情報処理装置が、集計結果10を用いて2分枝ハフマン木H1を生成する。2分枝ハフマン木H1とは、節点からその下位節点への枝数が2本のハフマン木である。nはn≧2の自然数である。節点の階層数はk(kはk≧2の自然数)である。また、第i階層(iは1≦i≦kの自然数)の節点数は2n(i−1)である。各節点が上位節点へのポインタを格納している。
また、各節点は、2個の葉または下位節点への2個のポインタを格納可能である。本実施の形態では、日本語の漢字等は16ビットコードで表現されるため、16ビットの文字コードを圧縮/伸長の対象とする場合はn=4とし、k=4として説明する。2分枝ハフマン木H1の詳細については、図2−1および図2−2において後述する。
つぎに、(3)情報処理装置は、2分枝ハフマン木H1を2分枝の無節点ハフマン木H2に変換する。無節点ハフマン木H2とは、根と葉のみからなる内部節点のないハフマン木である。無節点ハフマン木H2は、枝の本数が多くなるが、根から1パスで葉にアクセスすることができるハフマン木である。無節点ハフマン木H2の詳細については、図26において後述する。
このあと、(4)情報処理装置は、対象ファイル群Fsを1ファイルずつ読み込んで無節点ハフマン木により圧縮符号を探索する。そして、(5)探索された圧縮符号を並べてファイル化することで対象ファイル群Fsを圧縮する。これにより、圧縮ファイル群fsが得られることとなる。
また、(6)上記(5)の処理と並行して、圧縮符号マップ群Msを生成する。圧縮符号マップ群Msとは、圧縮符号マップMの集合であり、圧縮符号マップMとは、対象ファイル群Fsでの各文字の存否を文字ごとに示すテーブルである。圧縮符号マップ群Msを用いることにより、検索キーワードを構成する文字を含む圧縮ファイル群fsを伸長せずに絞り込むことができる。圧縮符号マップ群Msは、具体的には、たとえば、RAM、磁気ディスク、光ディスクなどの記憶媒体に記憶されており、CPUがアクセス可能である。
圧縮符号マップ群Msは、具体的には、文字ごとの対象ファイル数分のビット列により構成されている。たとえば、文字Xについてファイル番号#に対応するビットの値が「1」であれば、文字XはファイルF♯に存在することを示す。一方、文字Xについてファイル番号#に対応するビットの値が「0」であれば、文字XはファイルF♯に存在しないことを示す。圧縮符号マップ群Msの詳細については、図39−1および図39−2において後述する。
<2分枝ハフマン木の内容>
図2−1は、2(n=4により2=16)分枝ハフマン木の生成元となる節点集合体を示す説明図である。図2−1の節点集合体100において、第1階層では1個の節点の構造体セル、第2階層では16個の節点の構造体セル、第3階層では256個の節点の構造体セル、第4階層では4096個の節点の構造体セルを有する。各構造体セルC(i,j)は、リンク元となる上位節点のポインタを格納している。最上位となる第1階層の節点の構造体C(1,1)は、根の構造体であるため、上位節点のポインタはない。
図2−2は、2分枝ハフマン木を示す説明図である。図2−2では、n=4、すなわち、16分枝ハフマン木である。2分枝ハフマン木は、具体的には、たとえば、RAM、磁気ディスク、光ディスクなどの記憶媒体に記憶されており、CPUがアクセス可能である。
分枝ハフマン木H1において、根は図2−1の第1階層の節点の構造体セルC(1,1)に相当する。また、(A)〜(C)は節点または葉を示している。図2−2中、□は葉を示しており、■は節点を示している。下位節点/葉に枝が出ていない■は、使用されない節点である。また、葉の直下の数字は、葉の番号を示している。以降、葉をL♯(♯は葉の番号)と表記する。
すなわち、(A)の□は第1階層の根からリンクする葉L1〜L3である。また、■は根からリンクする第2階層の節点であり、節点の構造体セルC(2,4)〜C(2,16)に相当する。(B)の□は第2階層の節点からリンクする葉L4〜L134である。また、■は根からリンクする第3階層の節点であり、節点の構造体セルC(3,135)〜C(3,256)に相当する。(C)の□は第3階層の節点からリンクする葉L135〜L1295である。また、■は根からリンクする第4階層の節点であり、節点の構造体セルC(4,1296)〜C(4,4096)に相当する。つぎに、圧縮の前処理について説明する。
<圧縮前処理>
図3は、圧縮前処理を示す説明図である。対象ファイル群Fsには数千〜数万種の文字が記述されており、本プログラムでは、対象ファイル群Fs内の文字コードについて出現頻度を集計して降順にソートする。そして、高位(たとえば、1〜1024位まで)の文字コードと低位(1025位以下)の文字コードに分ける。
高位の文字コードは出現頻度が高いため、16ビットコードとして圧縮符号を割り当てる。低位の文字コードは、上位8ビットと下位8ビットに分割する。16ビットコードでは最大で65536(256×256)種の文字を扱えるが、低位の文字コードを、8ビットで分割することにより、6万種以上ある低位の文字コードを256種の分割文字コードに抑えることができる。
たとえば、漢字の「兎」の16ビットの文字コードは“0x514E”であるため、上位8ビット“0x51”と下位8ビット“0x4E”に分割する。同様に、漢字の「兆」の16ビットの文字コードは“0x5146”であるため、上位8ビット“0x51”と下位8ビット“0x46”に分割する。そして、分割された8ビットの分割文字コードの出現頻度を集計する。この「兎」および「兆」の例では、分割文字コード“0x51”の出現頻度は2回、分割文字コード“0x4E”,“0x46”は1回となる。
また、<p>や<p/>といったタグなどを予約語とする。予約語は数十種決めておく。そして、高位文字コード群、分割文字コード群および予約語群を混在させて出現頻度を再集計し、出現頻度の降順に再ソートする。これにより、出現頻度の降順にソートされた約1300種の文字コードが得られる。文字コード種をこの程度の数に抑えることで、16ビットの文字コードを12ビット以下の圧縮符号に圧縮し、圧縮符号を16ビットの文字コードに伸長することが可能となる。
<情報処理装置のハードウェア構成>
図4は、実施の形態にかかる情報処理装置のハードウェア構成を示すブロック図である。図4において、情報処理装置は、CPU(Central Processing Unit)401と、ROM(Read‐Only Memory)402と、RAM(Random Access Memory)403と、磁気ディスクドライブ404と、磁気ディスク405と、光ディスクドライブ406と、光ディスク407と、ディスプレイ408と、I/F(Interface)409と、キーボード410と、マウス411と、スキャナ412と、プリンタ413と、を備えている。また、各構成部はバス400によってそれぞれ接続されている。
ここで、CPU401は、情報処理装置の全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。磁気ディスクドライブ404は、CPU401の制御にしたがって磁気ディスク405に対するデータのリード/ライトを制御する。磁気ディスク405は、磁気ディスクドライブ404の制御で書き込まれたデータを記憶する。
光ディスクドライブ406は、CPU401の制御にしたがって光ディスク407に対するデータのリード/ライトを制御する。光ディスク407は、光ディスクドライブ406の制御で書き込まれたデータを記憶したり、光ディスク407に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)409は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク414に接続され、このネットワーク414を介して他の装置に接続される。そして、I/F409は、ネットワーク414と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F409には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ412は、画像を光学的に読み取り、情報処理装置内に画像データを取り込む。なお、スキャナ412は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ413は、画像データや文書データを印刷する。プリンタ413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
<情報処理装置の機能的構成1>
図5は、実施の形態にかかる情報処理装置の機能的構成1を示すブロック図である。図5では、図1に示した処理の流れ(1)〜(6)のうち、(1)および(2)の処理を実行する機能的構成を示している。図5において、情報処理装置500は、入力部501と、取得部502と、分類部506と、算出部507と、2分枝ハフマン木生成部(ポインタ生成部508、ポインタ格納部509、葉生成部510、文字コード格納部511)と、検出部512と、特定部513と、最適化部514と、文字構造体生成部515と、を備えている。
入力部501〜文字構造体生成部515は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。
入力部501は、対象ファイル群Fsから文字コードを入力する機能を有する。具体的には、たとえば、CPU401が対象ファイル群Fsを走査して2ビットの文字コードを順次対象ファイル群Fsから読み出す。読み出された文字コードはCPU401内のレジスタに保持される。
取得部502は、対象ファイル群Fsに記述されている2ビットの文字コードの出現頻度の集計結果を取得する機能を有する。集計結果さえ取得できれば、集計結果自体を直接読み込んでもよく、また、入力部501によりレジスタにセットされる文字コードを順次集計してもよい。後者の場合、取得部502は、具体的には、たとえば、集計部503とソート部504とを有する。集計部503は、レジスタにセットされる文字コードの数を集計する。たとえば、CPU401がレジスタにセットされる文字コードと一致する文字コードについて文字出現頻度集計テーブルの計数値をインクリメントする。
図6は、文字出現頻度集計テーブルを示す説明図である。文字出現頻度集計テーブル600は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。文字出現頻度集計テーブル600は、文字ごとに計数値を記憶する。文字項目は実際には説明の便宜上、各種文字が割り当てられているが、実際には入力文字コードと比較するため文字コードが割り当てられている。すなわち、CPU401は、入力文字コードを文字項目で走査することで一致する文字コードを検出する。そして、検出された場合に計数値を1ポイントインクリメントする。
図7は、予約語出現頻度集計テーブルを示す説明図である。予約語出現頻度集計テーブル700も、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。予約語出現頻度集計テーブル700は、予約語ごとに計数値を記憶する。予約語項目は説明の便宜上、各種文字が割り当てられているが、実際には入力文字コードと比較するため文字コード列が割り当てられている。すなわち、図6に示した文字出現頻度集計テーブル600との照合に先立って、CPU401は、入力文字コードを予約語項目で走査することで一致する文字コードを検出する。
一致する場合は、次の入力文字コードを予約語項目で走査する。これを繰り返し、一致する文字コード列が検出された場合、その予約語の文字コード列の計数値を1ポイントインクリメントする。不一致の文字コードが出現した場合は、文字出現頻度集計テーブル600にアクセスして、これまで一致した文字コード列の各文字コードの計数値を1ポイントインクリメントする。そして、不一致となった文字コードについては、上述したように、文字出現頻度集計テーブル600を用いて集計する。
図5に戻って、ソート部504は、集計結果をソートする機能を有する。具体的には、たとえば、CPU401は、文字出現頻度集計テーブル600の文字(文字コード)や予約語出現頻度集計テーブル700の予約語を計数値の降順にソートする。
図8は、文字コードおよび予約語の出現頻度を統合した集計結果テーブルを示す説明図である。集計結果テーブル800では、出現頻度(計数値)の降順に文字コードまたは予約語がソートされている。集計結果テーブル800も、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。
取得部502では、さらに、文字コードまたは予約語ごとに出現率を計算し、出現率に応じた出現率領域を特定する。出現率とは、対象ファイル群Fs内の全ファイル数を母集団(分母)とし、当該文字コードまたは予約語が存在するファイル数を分子とした値である。出現率領域とは、出現率の範囲をあらわす情報であり、圧縮符号マップ群Msの圧縮に用いられるハフマン木(以下、「圧縮符号マップ用ハフマン木」)を特定する。出現率領域および圧縮符号マップ用ハフマン木については後述する(図42−1〜図42−4を参照。)。
分割部505は、ソート部504によってソートされた結果、文字コードのうち出現頻度の高位の文字コードと低位の文字コードとに分け、低位の文字コードを上位ビットコードと下位ビットコードに分割する機能を有する。具体的には、たとえば、文字出現頻度集計テーブル600の文字(コード)を計数値の降順にソートした結果、たとえば、1位〜1024位までの文字コードを高位文字コードとし、1025位以降の文字コードを低位文字コードとする。CPU401は、この低位文字コードを、図3の例1)や例2)に示したように、上位8ビットコードと下位8ビットコードに分割する。
上位8ビットコードや下位8ビットコードといった分割文字コードは、最大256種となる。16ビットコードでは最大6万種以上の文字が割り当てられ、同数の葉が必要となるが、出現順位の低い低位文字コードを分割することで、1025位以降の最大約6万種の文字コードを、たかだか256種の分割文字コードで表現できる。したがって、文字コードに割り当てる葉の数を大幅に削減(1024+256+予約語数十種)することができる。この場合、集計部503は、分割文字コードの出現頻度を再集計する。さらに、分割文字コードが上位8ビットに出現した出現頻度と下位8ビットに出現した出現頻度に分けて再集計する。
図9−1は、分割文字出現頻度集計テーブルを示す説明図である。分割文字出現頻度集計テーブル901も、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。そして、ソート部504では、16ビットである高位文字コード、予約語、分割文字コード(以下、「文字コード等」という)を統合して、図8に示した集計結果テーブル800を更新する。
図9−2は、上位8ビットに関する分割文字出現頻度集計テーブルを示す説明図である。分割文字出現頻度集計テーブル902も、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。分割文字出現頻度集計テーブル902は、圧縮符号マップ群Msの生成に用いられる。
図9−3は、下位8ビットに関する分割文字出現頻度集計テーブルを示す説明図である。分割文字出現頻度集計テーブル903も、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。分割文字出現頻度集計テーブル903は、圧縮符号マップ群Msの生成に用いられる。
分類部506は、取得部502によって取得された集計結果に基づいて、文字コード等を出現確率Pに応じて階層別に分類する機能を有する。具体的には、たとえば、文字出現頻度集計テーブル600を参照して、文字コード等を出現確率Pに応じて階層別に分類する。
ここで、出現確率Pとは、文字コード等の総数を、対象となる文字コード等の出現数(文字出現頻度集計テーブル600の計数値)で除算した値である。CPU401は、各文字コード等の出現確率Pを算出する。そして、算出された出現確率Pを階層別に分類する。たとえば、第i階層の場合、1/2ni≦P<1/2n(i−1)となる文字コードでグループ化する。ただし、第1階層(i=1)のときは1/2ni≦P<1、第n階層(i=n)のときはP<1/2n(i−1)でグループ化する。
たとえば、n=4の場合、第1階層の文字コード等は、出現確率Pが1/16≦P<1となる文字コードである。また、第2階層の文字コード等は、1/32≦P<1/16となる文字コードである。また、第3階層の文字コード等は、1/4096≦P<1/32となる文字コードである。また、第4階層の文字コード等は、P<1/4096となる文字コードである。分類結果である階層番号iや集計結果テーブル800における順位は、文字コード等ごとに付与される。集計結果テーブル800における順位は、その文字コード等の葉の番号となる。
算出部507は、分類部506によって分類された第i階層の文字コード数に基づいて、第i階層の葉へのポインタ数を算出する機能を有する。また、当該第i階層の葉へのポインタ数に基づいて、(i+1)階層の節点をリンク先とする第i階層の下位節点へのポインタ数と第i階層の節点の使用数とを算出する機能を有する。
具体的には、たとえば、CPU401は、節点集合体100と分類結果から、第i階層について、構造体セル数N(i)、葉の数Nl(i)、葉へのポインタ数Nlp(i)、下位節点へのポインタ数Nnp(i)、構造体セル使用数Ncu(i)、葉へのポインタ数の累計値ΣNlp(i)、先頭からの空きセル数Ncst(i)、末尾までの空きポインタ数Npse(i)、末尾までの空きセル数Ncse(i)を算出する。
図10は、算出部507による算出結果テーブルを示す説明図である。算出結果テーブル520も、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。算出結果テーブル520には、階層ごとに算出された各項目の値がCPU401により書き込まれる。図10では、n=4の場合の算出結果を示している。
構造体セル数N(i)とは、第i階層の節点の構造体セルC(i,j)の個数である。構造体セル数N(i)は、CPU401が節点集合体100の各階層の節点の構造体セルC(i,j)の個数を計数することで得られる。n=4の場合、第1階層は1個(根)、第2階層は16個、第3階層は256個、第4階層は4096個である。
葉の数Nl(i)とは、第i階層の葉の構造体の個数である。葉の数Nl(i)は、分類結果である階層ごとの文字コード数となる。図10の例では、第1階層は3個、第2階層は54個、第3階層は353個、第4階層は885個である。
葉へのポインタ数Nlp(i)とは、第i階層の節点の構造体セルC(i,j)に格納する葉へのポインタの総数である。葉へのポインタ数Nlp(i)は葉の数Nl(i)と同数である。
下位節点へのポインタ数Nnp(i)とは、第i階層の節点の構造体セルC(i,j)に格納する下位節点へのポインタの総数である。下位節点をポイントするため、第(i+1)階層の葉へのポインタ数Nlp(i+1)と下位節点へのポインタ数Nnp(i+1)に依存する。たとえば、CPU401は、下記式(1)により、下位節点へのポインタ数Nnp(i)を算出する。
Nnp(i)={Nlp(i+1)+Nnp(i+1)}/2+1・・・(1)
ただし、端数は切り捨て。また、i=nのときは、下位節点が存在しないため、Nnp(i)=0。
構造体セル使用数Ncu(i)とは、第i階層において、構造体セルC(i,j)のうち、葉へのポインタおよび下位節点へのポインタが格納される構造体セルC(i,j)の総数である。たとえば、CPU401は、下記式(2)により、構造体セル使用数Ncu(i)を算出する。
Ncu(i)={Nlp(i)+Nnp(i)}/2+1・・・(2)
ただし、端数は切り捨て。
葉へのポインタ数の累計値ΣNlp(i)とは、第1階層から第i階層までの葉へのポインタ数Nlp(i)の総和である。
先頭からの空きセル数Ncst(i)とは、第i階層の先頭となる構造体セルC(i、1)からの不使用セル数である。もともと節点集合体100を構成する構造体セルC(i,j)には、それぞれ上位節点へのポインタが格納されているが、その上位節点の構造体セルC(i−1,j)が葉Ljの構造体とリンクすると、葉Ljの構造体には、構造体セルC(i,j)と同一の上位節点へのポインタが格納されることとなる。
このように、ポインタが重複するため、葉Ljの構造体に格納される上位節点へのポインタを優先するために、先頭からの空きセル数Ncst(i)を計算する。具体的には、たとえば、CPU401は、下記式(3)により、先頭からの空きセル数Ncst(i)を算出する。
Ncst(i)=ΣNlp(i−1)・・・(3)
ただし、i=1のときは、Ncst(i)=0。
したがって、図10の例では、第2階層では、構造体セルC(2,1)〜C(2,3)が先頭からの空きセル(不使用セル)となる。また、第3階層では、構造体セルC(3,1)〜C(3,57)が先頭からの空きセル(不使用セル)となる。同様に、第4階層では、構造体セルC(4,1)〜C(4,410)が先頭からの空きセル(不使用セル)となる。
末尾までの空きポインタ数Npse(i)とは、第i階層において、先頭からの空きセルの次の構造体セルC(i,j)から葉へのポインタおよび下位節点へのポインタが格納された場合の空きポインタの総数である。なお、先頭からの空きセルの空きポインタは除かれる。具体的には、たとえば、CPU401は、下記式(4)により、末尾までの空きポインタ数Npse(i)を算出する。
Npse(i)
=N(i)×2−Nlp(i)−Nnp(i)−Ncst(i)×2・・・(4)
末尾までの空きセル数Ncse(i)とは、第i階層の構造体セル群のうち、先頭からの空きセルと葉へのポインタや下位節点へのポインタが格納された構造体セルC(i,j)を除いた残余の構造体セルC(i,j)の個数である。具体的には、たとえば、CPU401は、下記式(5)により、末尾までの空きセル数Ncse(i)を算出する。
Ncse(i)=N(i)−Ncu(i)−Ncst(i)・・・(5)
ポインタ生成部508は、算出部507によって算出された算出結果に基づいて、第i階層の葉へのポインタと第i階層の下位節点へのポインタを生成する機能を有する。具体的には、たとえば、CPU401が算出結果テーブル520にアクセスして、第i階層の葉へのポインタ数と下位節点へのポインタ数を取得する。
分枝ハフマン木H1では、節点からの枝本数は2本なので、n=4の場合、枝番号となる下位節点へのポインタは4ビットコードとなる。たとえば、第1階層の根C(1,1)においては、葉L1へのポインタは“0000”、葉L2へのポインタは“0001”、葉L3へのポインタは“0010”となる。また、下位節点C(2,4)へのポインタは“0011”、下位節点C(2,5)へのポインタは“0100”、…、下位節点C(2,8)へのポインタは“0111”となる。生成されたポインタは、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に一時的に保持される。
ポインタ格納部509は、第i階層の使用数分の節点に、ポインタ生成部508によって生成された第i階層の葉へのポインタと第i階層の下位節点へのポインタとを格納する機能を有する。具体的には、たとえば、CPU401は、第i階層の構造体セルC(i,j)のうち、ポインタの格納可能な先頭の構造体セルを特定する。
具体的には、たとえば、CPU401が算出結果テーブル520にアクセスして、先頭からの空きセル数Ncst(i)を取得する。そして、ポインタの格納可能な先頭の構造体セルC(i,j)を、構造体セルC(i,Ncst(i)+1)に決定する。この構造体セルC(i,Ncst(i)+1)以降の構造体セルに、まず葉へのポインタを葉の番号順に格納し、ついで、下位節点へのポインタを格納する。葉へのポインタおよび下位節点へのポインタが格納された構造体セルの総数は、算出結果テーブル520の構造体セル使用数Ncu(i)に一致する。
葉生成部510は、分類部506によって分類された第i階層の文字ごとに、ポインタ格納部509によって第i階層の節点に格納された葉へのポインタにより第i階層の節点のリンク先となる葉を、文字コードごとに生成する機能を有する。具体的には、たとえば、階層ごとに、葉の数Nl(i)分の葉L♯の構造体を生成する。葉L♯の構造体は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶される。
図11は、2(16)分枝ハフマン木の構造体を示す説明図である。n=4の16分枝の場合、ハフマン木は1個の第1階層の節点(根)の構造体1101、16個の第2階層の節点の構造体1102、256個の第3階層の節点の構造体1103、4096個の第4階層の節点の構造体1104、および1295個の葉L#の構造体1105で構成される。
節点の構造体は、上位節点へのポインタ1110と下位第1節点へのポインタ1111〜第16節点へのポインタ1126の17種のポインタで構成される。葉L♯の構造体は、第1領域1131〜第4領域1134を有する。第1領域1131には、上位節点へのポインタが格納される。具体的には、たとえば、第i階層のj番目の節点の構造体の下位第12節点へのポインタがl番目の葉L♯の構造体をポイントしていた場合、第1領域1131には、第i階層のj番目の節点の構造体への先頭アドレス(ポインタ)が格納される。
また、第2領域1132には、葉の標識および伸長種別などが格納される。葉の標識とは、圧縮や伸長の際に参照されるフラグであり、「0」(OFFを示す)の場合は一般の節点を、「1」(ONを示す)の場合は葉を意味する。伸長種別は、伸長対象の出現頻度が高位の16ビットの文字コードか、低位文字コードから分割された上位8ビットの分割文字コードか、低位文字コードから分割された下位8ビットの分割文字コードか、または予約語かを示す識別子である。第3領域1133には、伸長種別に対応して、高位の16ビット文字コード、8ビットの分割文字コード、または予約語へのポインタが格納される。第4領域1134には、図8に示した出現率領域が格納される。
文字コード格納部511は、葉生成部510によって生成された葉に、当該葉の番号に対応付けられた文字コードを格納することにより、2分枝ハフマン木H1を生成する機能を有する。具体的には、たとえば、文字コードの出現頻度の順位(図8を参照)と一致する葉L♯の番号♯を格納する葉L♯の構造体の第3領域1133にその文字コードを格納する。予約語の場合は、予約語へのポインタを格納する。なお、第3領域1133の大きさによっては予約語の文字コード列を格納してもよい。また、文字コード格納部511は、文字コードの格納とともに、格納する文字コードの出現率領域も、集計結果テーブル800から読み出して、第4領域1134に格納する。
このように、葉生成部510によって生成された葉L♯の構造体を図1に示した節点集合体100の該当する節点の構造体セルC(i,j)にリンクさせ、ポインタ格納部509により節点集合体100の構造体セルC(i,j)に葉L♯へのポインタを格納し、文字コード格納部511により葉L♯の構造体に文字コードや予約語のポインタを格納することで、節点集合体100から2分枝ハフマン木H1が生成される。
図12は、2分枝ハフマン木H1の構造体を示す説明図である。2分枝ハフマン木H1は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶される。図12では、n=4、すなわち、16分枝ハフマン木を示している。
検出部512は、第i階層の葉へのポインタ数と第(i−1)階層の空き節点内の空きポインタ数とを検出する機能を有する。具体的には、たとえば、CPU401が、算出結果テーブル520から第i階層の葉へのポインタ数Nlp(i)と第(i−1)階層の末尾までの空きポインタ数Npse(i−1)とを読み出す。
特定部513は、検出部512によって検出された第i階層の葉へのポインタ数と第(i−1)階層の空き節点内の空きポインタ数とに基づいて、第i階層から第(i−1)階層の空き節点への移動対象となる第i階層の葉L♯へのポインタ(以下、「移動対象ポインタ」という)を特定する機能を有する。具体的には、たとえば、CPU401が、読み出された第i階層の葉へのポインタ数Nlp(i)と第(i−1)階層の末尾までの空きポインタ数Npse(i−1)と第(i−1)階層の下位節点へのポインタ数Nnp(i−1)を用いて、下記式(6)により判断する。
Npse(i−1)+Nnp(i−1)>Nlp(i)・・・(6)
(6)式を満たす場合、第i階層の葉L♯へのポインタはすべて第(i+1)階層に移動可能である。(6)式を満たさない場合、第(i−1)階層の末尾までの空きポインタ数Npse(i−1)と同数の第i階層の葉へのポインタを移動対象ポインタとする。たとえば、図11の2分枝ハフマン木H1を最適化する場合、算出結果テーブル520を参照すると、i=4の場合、第4階層の葉へのポインタ数Nlp(4)=885、第3階層の末尾までの空きポインタ数Npse(3)=2775、第3階層の下位節点へのポインタ数Nnp(3)=56であるため、(6)式を満たすこととなる。したがって、第4階層の葉L411へのポインタ〜葉L1295へのポインタはすべて第3階層の空きセル内に移動可能となる。
最適化部514は、特定部513によって特定された移動対象ポインタを格納する節点へのポインタを第(i−1)階層の節点から削除し、移動対象ポインタを第(i−1)階層の節点に移動させる機能を有する。具体的には、たとえば、上記の例では、移動対象ポインタ(第4階層の葉L411へのポインタ〜葉L1295へのポインタ)を格納する節点C(4,411)〜C(4,466)へのポインタを第3階層から削除する。そして、第3階層の構造体セルC(3,80)から順次、移動対象ポインタを移動させる。すなわち、葉L411の構造体〜葉L1295の構造体は、第4階層から第3階層に昇格する。
これにより、第4階層の場合は圧縮符号長が16ビットであったが、第3階層に昇格することで、圧縮符号長が12ビットに短縮され、圧縮率の向上を図ることができる。このように、第i階層から第(i−1)階層に昇格することで、圧縮符号長がn×iビットからn×(i−1)ビットに短縮され、圧縮率の向上を図ることができる。
また、最適化部514は、最適化する都度、算出結果テーブル520を更新する。図13−1〜図13−3は、最適化する場合の算出結果テーブル520の更新例である。このように、最適化は、最下位の階層から実行することとなる。
図13−1は、第4階層から第3階層へ最適化する場合の算出結果テーブル520の更新例を示す説明図である。図13−1は、図10に示した状態からの更新例を示している。
図13−2は、第3階層から第2階層へ最適化する場合の算出結果テーブル520の更新例を示す説明図である。図13−2は、図13−1に示した状態からの更新例を示している。
図13−3は、第2階層から第1階層へ最適化する場合の算出結果テーブル520の更新例を示す説明図である。図13−3は、図13−2に示した状態からの更新例を示している。
図14は、最適化後の2分枝ハフマン木H1の構造体を示す説明図である。図12と比較すると、最適化後の2分枝ハフマン木H1では、第4階層の葉L♯の構造体が存在しない。このように、上位階層の空きポインタに下位階層の葉L♯へのポインタを移動させているため、圧縮符号の短縮化を図ることができる。
図15は、最適化後の2分枝ハフマン木H1における葉L♯の構造体が格納する情報を示す説明図である。図15の各レコードがそれぞれの葉L♯の構造体が格納する情報に相当する。なお、圧縮符号は2分枝ハフマン木H1の根から該当する葉L♯までの枝番号となる下位節点へのポインタ〜葉へのポインタのコード列である。
図5に戻って、文字構造体生成部515は、文字構造体530を生成する機能を有する。具体的には、たとえば、CPU401が、予約語出現頻度集計テーブル700、文字出現頻度集計テーブル600、分割文字出現頻度集計テーブル901、2分枝ハフマン木H1にアクセスし、指定された情報を抽出することで、予約語の構造体、高位文字コードの構造体、および分割上位文字コードの構造体を生成する。
図16は、予約語の構造体を示す説明図である。予約語の構造体1600は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶され、CPU401がアクセス可能である。予約語の構造体1600は、予約語総数(図16の例では15個)、予約語の最大ビット長Lrmax、各予約語r1〜r15とそのビット長および葉L♯へのポインタを格納する。
CPU401は、予約語出現頻度集計テーブル700から予約語総数、各予約語、予約語の最大ビット長、各予約語のビット長を読み出す。また、2分枝ハフマン木H1における予約語の葉L♯の構造体から上位節点を特定し、その上位節点の構造体セル内の予約語の葉L♯へのポインタを読み出す。これにより、予約語の構造体1600が生成される。
図17は、高位文字コードの構造体を示す説明図である。高位文字コードの構造体1700は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶され、CPU401がアクセス可能である。高位文字コードの構造体1700は、文字コードe♯とその葉L♯へのポインタを格納する。
CPU401は、文字出現頻度集計テーブル600から文字コードe♯を読み出す。また、2分枝ハフマン木H1においてその文字コードe♯に対応する葉L♯の構造体から上位節点を特定し、その上位節点の構造体セル内の文字コードe♯に対応する葉L♯へのポインタを読み出す。これにより、高位文字コードの構造体1700が生成される。
図18は、分割文字コードの構造体を示す説明図である。分割文字コードの構造体1800は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶され、CPU401がアクセス可能である。分割文字コードの構造体1800は、分割文字コードとその葉L♯へのポインタを格納する。
CPU401は、分割文字出現頻度集計テーブル901から分割文字コードを読み出す。また、2分枝ハフマン木H1においてその分割文字コードに対応する葉L♯の構造体から上位節点を特定し、その上位節点の構造体セル内の分割文字コードに対応する葉L♯へのポインタを読み出す。これにより、分割文字コードの構造体1800が生成される。
<2分枝ハフマン木生成処理手順>
図19は、情報処理装置500が自動実行する2分枝ハフマン木生成処理手順を示すフローチャートである。図19において、まず、入力部501により対象ファイル群Fsを読み込む(ステップS1901)。つぎに、集計部503により文字コードと予約語の出現頻度を集計する(ステップS1902)。そして、葉数削減処理を実行する(ステップS1903)。つぎに、分類部506により、文字コード等をその出現確率Pに応じて階層別に分類する(ステップS1904)。
このあと、算出部507によるパラメータ算出処理(ステップS1905)、ポインタ生成部508、ポインタ格納部509、葉生成部510、文字コード格納部511による構造体セル構築処理(ステップS1906)、最適化処理(ステップS1907)を実行する。これにより、2n分枝ハフマン木H1が自動生成される。
図20は、図19に示した葉数削減処理(ステップS1903)の詳細な処理手順を示すフローチャートである。まず、ソート部504により、16ビットの文字コードおよび予約語を出現頻度の降順にソートする(ステップS2001)。その順位を参照して、低位文字コードを抽出し(ステップS2002)、低位文字コードを前後8ビットの分割文字コードに分割する(ステップS2003)。そして、分割文字コードの出現頻度を集計する(ステップS2004)。最後に、16ビットの文字コード、分割文字コード、予約語の出現頻度をすべて含めて出現頻度の降順にソートする(ステップS2005)。このあと、ステップS1904に移行する。
図21は、図19に示したパラメータ算出処理(ステップS1905)の詳細な処理手順を示すフローチャートである。まず、階層番号iをi=1にセットし(ステップS2101)、i>kであるか否かを判断する(ステップS2102)。
i>kでない場合(ステップS2102:No)、第i階層における葉L♯へのポインタ数Nlp(i)、第i階層における下位節点へのポインタ数Nnp(i)、第i階層における構造体セルC(i,j)の使用数Ncu(i)、葉へのポインタ数の累計値ΣNlp(i)、第i階層における先頭からの空きセル数Ncst(i)、第i階層における末尾までの空きポインタ数Npse(i)、第i階層における末尾までの空きセル数Ncse(i)を算出する(ステップS2103〜S2109)。
そして、階層番号iを1ポイントインクリメントし(ステップS2110)、ステップS2102に戻る。ステップS2102において、i>kである場合(ステップS2102:Yes)、ステップS1906に移行する。
図22は、図19に示した構造体セル構築処理(ステップS1906)の詳細な処理手順を示すフローチャートである。まず、節点集合体100を読み込み(ステップS2201)、階層番号iをi=1にセットし(ステップS2202)、セル番号jをj=1にセットする(ステップS2203)。そして、第i階層の構造体セルC(i,j)の構築処理を実行する(ステップS2204)。
このあと、jが第i階層の節点数2n(i−1)に対して、j>2n(i−1)であるか否かを判断する(ステップS2205)。j>2n(i−1)でない場合(ステップS2205:No)、jを1ポイントインクリメントし(ステップS2206)、ステップS2204に戻る。一方、j>2n(i−1)である場合(ステップS2205:Yes)、i>kであるか否かを判断する(ステップS2207)。i>kでない場合(ステップS2207:No)、iを1ポイントインクリメントし(ステップS2208)、ステップS2203に戻る。一方、i>kである場合(ステップS2207:Yes)、ステップS1907に移行する。
図23は、図22に示した第i階層の構造体セルC(i,j)の構築処理(ステップS2204)の詳細な処理手順を示すフローチャート(前半)である。まず、Nlp(i)個の葉L♯へのポインタを生成し(ステップS2301)、第i階層に関する葉L♯の構造体を生成する(ステップS2302)。そして、Nnp(i)個の下位節点へのポインタを生成する(ステップS2303)。このあと、セル番号jが先頭からの空きセル数Ncst(i)に対して、j>Ncst(i)であるか否かを判断する(ステップS2304)。
j>Ncst(i)でない場合(ステップS2304:No)、構造体セルC(i,j)を空きセルに決定する(ステップS2305)。そして、jを1ポイントインクリメントし(ステップS2306)、ステップS2304に戻る。一方、j>Ncst(i)である場合(ステップS2304:Yes)、j>Ncst(i)+Ncu(i)であるか否かを判断する(ステップS2307)。Ncu(i)は第i階層における構造体セル使用数である。
j>Ncst(i)+Ncu(i)である場合(ステップS2307:Yes)、ステップS2205に移行する。一方、j>Ncst(i)+Ncu(i)でない場合(ステップS2307:No)、ステップS2401に移行する。
図24は、図22に示した第i階層の構造体セルC(i,j)の構築処理(ステップS2204)の詳細な処理手順を示すフローチャート(後半)である。ステップS2401において、構造体セルC(i,j)に空きがあるか否かを判断する(ステップS2401)。空きがない場合(ステップS2401:No)、jを1ポイントインクリメントして(ステップS2402)、ステップS2401に戻る。
一方、空きがある場合(ステップS2401:Yes)、葉L♯へのポインタを葉の番号♯の若い順に構造体セルC(i,j)に格納する(ステップS2403)。そして、格納した葉L♯のポインタによりリンク先となる葉L♯の構造体に上位節点C(i−1,j)へのポインタを生成・格納する(ステップS2404)。
そして、未保存の葉L♯へのポインタがあるか否かを判断する(ステップS2405)。未保存の葉L♯へのポインタがある場合(ステップS2405:Yes)、ステップS2401に戻る。一方、未保存の葉L♯へのポインタがない場合(ステップS2405:No)、構造体セルC(i,j)に空きがあるか否かを判断する(ステップS2406)。空きがない場合(ステップS2406:No)、jを1ポイントインクリメントして(ステップS2407)、ステップS2406に戻る。
一方、構造体セルC(i,j)に空きがある場合(ステップS2406:Yes)、下位節点へのポインタを節点番号の若い順に構造体セルC(i,j)に格納する(ステップS2408)。そして、未格納の下位節点へのポインタがあるか否かを判断する(ステップS2409)。未格納の下位節点へのポインタがある場合(ステップS2409:Yes)、ステップS2406に戻る。一方、未格納の下位節点へのポインタがない場合(ステップS2409:No)、図23のステップS2304に戻る。
図25は、図19に示した最適化処理(ステップS1907)の詳細な処理手順を示すフローチャートである。まず、階層番号iをi=kとし(ステップS2501)、i=1であるか否かを判断する(ステップS2502)。i=1でない場合(ステップS2502:No)、検出部512により、第i階層の葉L♯へのポインタ数Nlp(i)、第(i−1)階層の下位節点へのポインタ数Nnp(i−1)、および第(i−1)階層の末尾までの空きポインタ数Npse(i−1)を算出結果テーブル520から検出する(ステップS2503)。
そして、Nlp(i)=0であるか否かを判断する(ステップS2504)。Nlp(i)=0である場合(ステップS2504:Yes)、移動させる葉L♯へのポインタがないため、ステップS2509に移行する。一方、Nlp(i)=0でない場合(ステップS2504:No)、Npse(i−1)=0であるか否かを判断する(ステップS2505)。Npse(i−1)=0である場合(ステップS2505:Yes)、空きがないこととなり、ステップS2509に移行する。
一方、Npse(i−1)=0でない場合(ステップS2505:No)、特定部513により、上記(6)式を用いて、第i階層から第(i−1)階層へ移動させる葉L♯へのポインタ(移動対象ポインタ)およびその数を特定する(ステップS2506)。
つぎに、移動対象ポインタを格納している構造体セルC(i,j)をポイントする第(i−1)階層の下位節点C(i,j)へのポインタを第(i−1)階層から削除する(ステップS2507)。そして、移動対象ポインタを第(i−1)階層に移動させ、葉L♯の番号♯が連続するように格納する(ステップS2508)。この後、ステップS2509において、階層番号iを1ポイントデクリメントし(ステップS2509)、ステップS2502に戻る。ステップS2502において、階層番号i=1の場合(ステップS2502:Yes)、一連の処理を終了する。これにより、情報処理装置500が自動実行する2分枝ハフマン木生成処理手順の一連の説明を終了する。
つぎに、2分枝ハフマン木H1を用いた圧縮処理と伸長処理について説明する。ここでは、上述した生成処理により自動生成された2分枝ハフマン木H1を用いてもよく、あらかじめ与えられた2分枝ハフマン木H1であってもよい。具体的には、2分枝ハフマン木H1を無節点ハフマン木H2に変換し、無節点ハフマン木H2を用いて圧縮処理と伸長処理を実行する。
<無節点ハフマン木>
ここで、無節点ハフマン木H2について説明する。無節点ハフマン木H2とは、根と葉のみからなる内部節点のないハフマン木である。無節点ハフマン木H2は、枝の本数が多くなるが、根から1パスで葉にアクセスすることができる。無節点ハフマン木H2は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されており、CPU401がアクセス可能である。
図26は、2分枝の無節点ハフマン木を示す説明図である。2(m=12)分枝の無節点ハフマン木H2では、根から葉へのポインタとなる枝番号はmビットコードのアドレスとなる。すなわち、葉の番号1〜4096の葉へのポインタは、“000000000000”〜“111111111111”となる。16ビットの文字コードの場合、12ビットコード以下に圧縮されることとなる。なお、mは、m<2となる値であり、たとえば、この不等式を満たす値のうち4の倍数で最大のものを用いる。mはnに応じてあらかじめ設定される。たとえば、n=4の場合、m=12とする。
図27は、2分枝の無節点ハフマン木H2の節点(根)の構造体を示す説明図である。上述の2n分枝ハフマン木H1の場合と同様、葉の総数が1295個であるとすると、葉の数が余ることとなる。したがって、出現頻度の高い文字コード等を格納する葉に対して複数(たとえば、256個)のポインタを用意する。
図27では、出現頻度が高い2分枝ハフマン木H1の第1階層の葉L1〜L3に対して、それぞれ256個の葉へのポインタを割り当てて根の構造体セルC(1,1)に格納する。また、出現頻度の高い第2階層の葉L4〜葉L134についても、それぞれ16個の葉へのポインタを割り当てて根の構造体セルC(1,1)に格納する。第3階層の葉L135〜葉L1295については、それぞれ1個の葉へのポインタを割り当てて根の構造体セルC(1,1)に格納する。
図28は、無節点ハフマン木H2の葉の構造体を示す説明図である。葉の全体は、第1領域2801〜第5領域2805を有する。無節点ハフマン木H2の葉の構造体は、2分枝ハフマン木H1の葉の構造体から複写された構造体であるため、第1領域2801〜第4領域2804は、図11の第1領域1131〜第4領域1134に対応する。第1領域2801には、圧縮符号およびその圧縮符号長が格納される。第2領域2802には、図11と同様、葉の標識と伸長種別が格納される。第3領域2803には、図11と同様、伸長種別に応じて高位16ビット文字コード、低位の分割8ビット文字コード、または予約語へのポインタが格納される。
第4領域2804には、図11と同様、出現率領域が格納される。第5領域2805には、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または予約語へのポインタであるかを識別する情報である。符号区分とは、文字コードが16ビットであるか8ビットであるかを識別する情報である。16ビットの文字コードである場合または予約語である場合、符号区分として“1”を割り当て、8ビットの分割文字コードの場合、符号区分として“0”を割り当てる。
また、第5領域2805には、圧縮符号マップ群Msへのポインタを構成するアドレス値が格納される。圧縮符号マップ群Msへのポインタとは、圧縮符号マップ群Msのうち葉L♯の構造体に格納されている文字コード固有の圧縮符号マップM♯にアクセスするポインタである。1024種の高位文字コードの場合は、0001〜1024のアドレス値が文字コードごとに割り当てられる。
また、15種の予約語の場合は、1025〜1039のアドレス値が予約語(のポインタ)ごとに割り当てられる。上位8ビットの分割文字コードの場合は、0001〜0256のアドレス値が上位8ビットの分割文字コードごとに割り当てられる。下位8ビットの分割文字コードの場合は、0257〜0512のアドレス値が上位8ビットの分割文字コードごとに割り当てられる。なお、第5領域2805の符号区分とアドレス値により圧縮符号マップ群Msへのポインタを構成する。
図29は、葉L♯の構造体に格納される情報を示す説明図である。各レコードが葉L♯の構造体に相当する。各葉L♯の構造体は、圧縮符号およびその圧縮符号長、葉の番号、伸長種別、文字コード等(文字コード(16/8ビット)または予約語へのポインタ)、圧縮符号マップへのポインタといった情報を含む。圧縮符号マップへのポインタは、符号区分とアドレス値adr♯を連結したアドレスとする。なお、圧縮符号マップへのポインタは、たとえば、11ビットのアドレスである。先頭ビットは符号区分となる。後続の10ビットがアドレス値である。高位文字コードは1024種であるため、10ビットで表現される。分割文字コードは、0x00〜0xFFの256種であり8ビットで足りるが、上位と下位に分類するため、10ビットのうち上位2ビットを使って上位と下位を識別する。
<2分枝ハフマン木H1→無節点ハフマン木H2への変換>
無節点ハフマン木H2は、2分枝ハフマン木H1からの変換により生成することができる。具体的には、たとえば、2分枝ハフマン木H1から2分枝(m=n×k)の無節点ハフマン木H2を生成することができる。以下、2分枝の無節点ハフマン木H2へ変換するための機能的構成について説明する。
<情報処理装置500の機能的構成2>
図30は、実施の形態にかかる情報処理装置500の機能的構成2を示すブロック図である。図30では、図1に示した処理の流れ(1)〜(6)のうち、(3)の処理を実行する機能的構成を示している。なお、図5に示した構成と同一構成には同一符号を付し、その説明を省略する。
図30において、情報処理装置500は、決定部3001と、複製部3002と、根生成部3003と、第1の構築部3004と、第2の構築部3005と、文字構造体生成部515と、を備えている。決定部3001〜第2の構築部3005は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。
決定部3001は、2分枝ハフマン木H1の階層数と第i階層の葉の数に基づいて、第i階層の葉ごとに葉へのポインタの種類数を決定する機能を有する。具体的には、たとえば、CPU401は、第1階層の種類数は256種、第2階層の種類数は16種、第3階層以降の種類数は1種というように、あらかじめ設定しておく。たとえば、上述した2分枝ハフマン木H1では、第1階層の葉の数は3個、第2階層の葉の数は131個、第3階層の葉の数は1161個である。
したがって、葉のポインタ数は4025個(=3個×256種+131個×16種+1161個×1種)となり、4096個(2個)以下となる。これにより、第1階層の種類数は256種、第2階層の種類数は16種、第3階層以降の種類数は1種に確定する。もし、4096個よりも多くなった場合は、第1階層の種類数を16種にしたり、第2階層の種類数を1種にするなどして、4096個以下となるように最適化する。
複製部3002は、2分枝ハフマン木H1の葉を複製する機能を有する。具体的には、たとえば、CPU401は、葉L♯の構造体をコピーして、内部の上位節点へのポインタや圧縮符号長をクリアする。
根生成部3003は、2個の葉へのポインタを格納可能な根を生成して、記憶装置に格納する機能を有する。具体的には、たとえば、n=4の場合、m=12、すなわち、4096個の空きポインタを有する根の構造体を生成する。
第1の構築部3004は、決定部3001によって決定された種類数に基づいて、複製部3002によって複製された葉ごとに当該葉へのポインタを生成し、根生成部3003によって生成された根に格納する機能を有する。具体的には、たとえば、第1階層について256種と決定された場合、第1階層に関する葉L1に対しては、葉L1へのポインタL1P(1)〜L1P(256)を生成する。そして、この葉L1へのポインタL1P(1)〜L1P(256)を根の構造体に格納する。
また、第2階層について16種と決定された場合、第2階層に関する葉L4に対しては、葉L4へのポインタL4P(1)〜L4P(16)を生成する。そして、この葉L4へのポインタL4P(1)〜L4P(16)を根の構造体に格納する。また、第3階層について1種と決定された場合、第3階層に関する葉L135に対しては、葉L135へのポインタL135P(1)を生成する。そして、この葉L135へのポインタL135P(1)を根の構造体に格納する。
第2の構築部3005は、葉に対する当該葉へのポインタ群に共通のビット列からなる圧縮符号を抽出し、当該圧縮符号およびその圧縮符号長を葉に格納して葉を再構築することにより、根および葉からなる無節点ハフマン木H2を生成する機能を有する。具体的には、たとえば、任意の葉L♯について葉L♯へのポインタが複数種生成されている場合、これらのポインタに共通のビット列を圧縮符号と特定する。また、その圧縮符号長も取得する。そして、圧縮符号および圧縮符号長をその葉L♯の構造体に格納する。
たとえば、葉L1については、256種の葉L1へのポインタL1P(1)〜L1P(256)が生成されているとした場合、以下のようなビット列となる。
ポインタL1P( 1):000000000000
ポインタL1P( 2):000000000001
ポインタL1P( 3):000000000010
ポインタL1P( 4):000000000011
・ ・
・ ・
・ ・
ポインタL1P(256):000011111111
ポインタL1P(1)〜L1P(256)では、上位4ビットの“0000”が共通のビット列となるため、この上位4ビット“0000”が葉L1の構造体の圧縮符号として特定される。また、この圧縮符号長は4ビットであるため、圧縮符号“0000”とともに葉L1の構造体に格納される。したがって、葉L1の構造体は、256種の葉L1へのポインタL1P(1)〜L1P(256)のいずれが指定されてもアクセスされることとなる。これにより、アクセス頻度が高くなるため、葉L1の構造体に格納されている文字コードはその圧縮符号へのアクセス頻度も高くなる。葉L2,L3も同様である。
また、葉L4については、16種の葉L4へのポインタL4P(1)〜L4P(16)が生成されているとした場合、以下のようなビット列となる。
ポインタL4P( 1):001100000000
ポインタL4P( 2):001100000001
ポインタL4P( 3):001100000010
ポインタL4P( 4):001100000011
・ ・
・ ・
・ ・
ポインタL4P(16):001100001111
ポインタL4P(1)〜L4P(16)では、上位8ビットの“00110000”が共通のビット列となるため、この上位8ビット“00110000”が葉L4の構造体の圧縮符号として特定される。また、この圧縮符号長は8ビットであるため、圧縮符号“00110000”とともに葉L4の構造体に格納される。したがって、葉L4の構造体は、16種の葉L4へのポインタL4P(1)〜L4P(16)のいずれが指定されてもアクセスされることとなる。これにより、アクセス頻度が高くなるため(葉L1〜L3よりは低いが)、葉L4の構造体に格納されている文字コードはその圧縮符号へのアクセス頻度も高くなる。
また、葉L135については、1種の葉L135へのポインタL135P(1)が生成されているとした場合、以下のようなビット列となる。
ポインタL135P(1):101000100000
ポインタL135P(1)は1種だけであるため、この12ビット“101000100000”が葉L135の構造体の圧縮符号として特定される。また、この圧縮符号長は12ビットであるため、圧縮符号“101000100000”とともに葉L135の構造体に格納される。このように構築することで、無節点ハフマン木H2が生成されることとなる。すなわち、無節点ハフマン木H2の根では、葉の数に応じた長さとなる葉へのポインタが、各葉に対する枝として文字コードの出現率に応じた個数分割り当てられていることとなる。
また、第2の構築部3005は、圧縮符号を葉L♯の構造体に格納する際、符号区分に応じて未使用のアドレス値adr♯を符号区分とともに格納する。具体的には、葉L♯の構造体において、伸長種別を参照して符号区分を格納する。そして、符号区分ごとに未使用のアドレス値adr♯を格納する。これにより、文字コード等ごとに、圧縮符号マップM♯へのポインタを、葉L♯の構造体ごとに格納することができる。
また、文字構造体生成部515は、あらたに構築された無節点ハフマン木H2を参照して文字構造体530を再度生成(更新)することとなる。すなわち、予約語の構造体1600や高位文字コードの構造体1700、分割文字コードの構造体1800中、あらたに生成された葉へのポインタが格納されることとなる。
<2分枝ハフマン木H1→2分枝無節点ハフマン木変換処理>
図31−1は、情報処理装置500が自動実行する2分枝ハフマン木H1→2分枝無節点ハフマン木変換処理手順を示すフローチャートである。図31−1において、まず、2分枝ハフマン木H1の構造体を読み込み(ステップS3101)、決定部3001により、階層ごとの葉へのポインタの種類数を決定する(ステップS3102)。
つぎに、複製部3002により2分枝ハフマン木H1の葉L♯の構造体を複製して(ステップS3103)、根生成部3003により、根の構造体を生成する(ステップS3104)。そして、階層番号iをi=1とし(ステップS3105)、第i階層の未選択の葉L♯の構造体があるか否かを判断する(ステップS3106)。
未選択の葉L♯の構造体がある場合(ステップS3106:Yes)、未選択の葉L♯の構造体を1つ選択し(ステップS3107)、決定された種類数分の葉へのポインタを生成して根の構造体に格納する(ステップS3108)。そして、種類数分の葉へのポインタから圧縮符号および圧縮符号長を特定して、葉L♯の構造体に格納する(ステップS3109)。このあと、圧縮符号マップM♯へのポインタ設定処理を実行して(ステップS3110)、ステップS3106に戻る。圧縮符号マップM♯へのポインタ設定処理については、図31−2で後述する。
一方、ステップS3106において、未選択の葉L♯の構造体がない場合(ステップS3106:No)、階層番号iを1ポイントインクリメントして(ステップS3111)、2分枝ハフマン木H1の階層数kに対してi>kであるか否かを判断する(ステップS3112)。i>kでない場合(ステップS3112:No)、ステップS3106に戻る。一方、i>kである場合(ステップS3112:Yes)、一連の変換処理を終了する。
図31−2は、図31−1に示した圧縮符号マップM♯へのポインタ設定処理(ステップS3110)の詳細な処理手順を示すフローチャートである。まず、(ステップS3107において選択されている葉L♯の構造体を参照して、文字コード等の符号種別および符号区分を特定する(ステップS3121)。つぎに、特定された符号種別および符号区分にしたがって、アドレス値adra〜adrdの初期値を設定する(ステップS3122)。
具体的には、葉L♯の構造体について、符号種別が数字、英字、特殊記号、カタカナ、ひらがな、漢字などの文字コードであり、かつ、符号区分が“1”である場合、16ビットの文字コード用のアドレス値adraの初期値をadra=0001に設定する。
また、葉L♯の構造体について、符号種別が予約語へのポインタであり、かつ、符号区分が“1”である場合、予約語へのポインタ用のアドレス値adrbの初期値をadrb=1025に設定する。
また、葉L♯の構造体について、符号種別が上位8ビットの分割文字コードであり、かつ、符号区分が“0”である場合、上位8ビットの分割文字コード用のアドレス値adrcの初期値をadrc=0001に設定する。
また、葉L♯の構造体について、符号種別が下位8ビットの分割文字コードであり、かつ、符号区分が“0”である場合、下位8ビットの分割文字コード用のアドレス値adrdの初期値をadrd=0257に設定する。
そして、葉L♯の構造体内の符号区分を判断する(ステップS3123)。符号区分が“1”であり(ステップS3123:1)、かつ、符号種別が文字コードである場合(ステップS3124:文字コード)、アドレス値adraを葉L♯の構造体の第5領域2805に格納する(ステップS3125)。このあと、アドレス値adraをインクリメントして(ステップS3126)、ステップS3106に移行する。
また、ステップS3123において、符号区分が“1”であり(ステップS3123:1)、かつ、符号種別が予約語へのポインタである場合(ステップS3124:予約語へのポインタ)、アドレス値adrbを葉L♯の構造体の第5領域2805に格納する(ステップS3127)。このあと、アドレス値adrbをインクリメントして(ステップS3128)、ステップS3106に移行する。
また、ステップS3123において、符号区分が“0”であり(ステップS3123:0)、かつ、符号種別が上位8ビットの分割文字コードである場合(ステップS3129:上位)、アドレス値adrcを葉L♯の構造体の第5領域2805に格納する(ステップS3130)。このあと、アドレス値adrcをインクリメントして(ステップS3131)、ステップS3106に移行する。
また、ステップS3123において、符号区分が“0”であり(ステップS3123:0)、かつ、符号種別が下位8ビットの分割文字コードである場合(ステップS3129:下位)、アドレス値adrdを葉L♯の構造体の第5領域2805に格納する(ステップS3132)。このあと、アドレス値adrdをインクリメントして(ステップS3133)、ステップS3106に移行する。これにより、各葉L♯の構造体に、圧縮符号マップM♯へのポインタが設定されることとなる。したがって、無節点ハフマン木H2を探索する際に、圧縮符号マップM♯を特定することができる。
このように、2分枝ハフマン木H1から2分枝の無節点ハフマン木H2に変換することにより、無節点ハフマン木H2が圧縮や伸長に用いられることとなる。無節点ハフマン木H2を圧縮や伸長に用いることにより、2分枝ハフマン木H1にくらべて圧縮率および検索速度の向上を図ることができる。
<無節点ハフマン木を用いた圧縮処理>
つぎに、2分枝の無節点ハフマン木H2を用いた圧縮処理について説明する。2分枝の無節点ハフマン木H2では1パスで葉にアクセスできるため、検索速度の高速化を図ることができる。以下、そのための機能的構成について説明する。
<情報処理装置500の機能的構成3>
図32は、実施の形態にかかる情報処理装置500の機能的構成3を示すブロック図である。図32では、図1に示した処理の流れ(1)〜(6)のうち、(4)〜(6)の処理を実行する機能的構成を示している。なお、図5に示した構成と同一構成には同一符号を付し、その説明を省略する。図32において、情報処理装置500は、圧縮部3200(分割部505、設定部3201、圧縮対象文字コード探索部3202、ハフマン木探索部3203、圧縮符号格納部3204)と、検出部3205と、生成部3256と、圧縮符号マップ特定部3206と、圧縮符号マップ更新部3207と、圧縮符号マップ圧縮部3208(ビット列圧縮部3281と非圧縮領域設定部3282)と、圧縮バッファ3211とを備えている。
設定部3201〜圧縮符号マップ圧縮部3208,生成部3256は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。また、圧縮バッファ3211は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体によりその機能を実現する。
圧縮部3200は、対象ファイル群Fsの中から選ばれた対象ファイルFに記述されている圧縮対象文字コードをハフマン木に従って順次圧縮する機能を有する。具体的には、たとえば、分割部505、設定部3201、圧縮対象文字コード探索部3202、ハフマン木探索部3203、圧縮符号格納部3204により圧縮をおこなう。
設定部3201は、圧縮処理をおこなう場合、圧縮対象文字コードを設定する機能を有する。具体的には、たとえば、入力されてくる圧縮対象文字コードや圧縮符号列を、CPU401が内部のレジスタや外部のバッファに書き込む。
図33−1は、圧縮対象文字コード列の一例を示す説明図である。ここでは、「人形芝居」という文字列を圧縮対象文字列とし、その文字コード列を示している。なお、「芝」は低位文字コードであるため、上位8ビットと下位8ビットに分割される。
図33−2は、圧縮符号列の一例を示す説明図である。ここでも、「人形芝居」という文字列の圧縮符号列を示している。「芝」は上位8ビットと下位8ビットに分割されているため、圧縮符号も分割文字コードごとに割り当てられる。
図32に戻って、圧縮対象文字コード探索部3202は、高位の文字コード群の中から設定部3201によって設定された圧縮対象文字コードを探索する機能を有する。具体的には、たとえば、CPU401が、レジスタにセットされた圧縮対象文字コードを、文字構造体530、すなわち、予約語の構造体1600、高位文字コードの構造体1700を走査することで探索する。
予約語の構造体1600、高位文字コードの構造体1700により一致する文字コードが探索されなかった場合は、CPU401は、分割部505により、圧縮対象文字コードを上位ビットと下位ビットに分割し、分割文字コードごとに、分割文字コードの構造体1800を走査して探索する。
ハフマン木探索部3203は、探索された文字コード等に対応付けられた葉L♯へのポインタを用いて、探索された文字コード等の圧縮符号を探索する機能を有する。具体的には、たとえば、CPU401は、文字構造体530から、一致した文字コード等に対応付けられている葉L♯へのポインタを読み出して、当該葉L♯の構造体を特定する。そして、ポイントされた葉L♯の構造体に格納されている文字コードの圧縮符号を抽出する。
たとえば、図26を用いて説明すると、葉L256に対応する文字コードが高位文字コードとして探索された場合、葉L256へのポインタを高位文字コードの構造体1700から読み出して、葉L256の構造体にアクセスする。この葉L256の構造体に格納されている文字コードの圧縮符号を葉L256の構造体から抽出する。
圧縮符号格納部3204は、ハフマン木探索部3203によって探索された圧縮符号を所定の記憶領域に格納する機能を有する。具体的には、たとえば、CPU401が、探索された圧縮符号を圧縮バッファ3211に書き込む。
(圧縮処理の具体例)
ここで、検出部3205〜圧縮符号マップ圧縮部3208の説明の前に、2分枝の無節点ハフマン木H2を用いた対象ファイル群Fsの圧縮処理の具体例について説明する。2分枝の無節点ハフマン木H2を用いた圧縮処理では、ハフマン木探索において、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉L♯の構造体に格納されている文字コードを抽出して、圧縮バッファ3211に書き込む。予約語へのポインタを抽出した場合は、ポイント先の予約語を抽出して、圧縮バッファ3211に書き込む。これにより、圧縮処理の高速化を図ることができる。
図34は、2分枝の無節点ハフマン木H2を用いた圧縮処理の具体例を示す説明図である。まず、対象ファイル群Fsから1文字目の圧縮対象文字コードを取得し、対象ファイル300上の位置を保持しておく。そして、予約語の構造体1600に対して2分木探索をおこなう。予約語は2文字以上の文字コード列であるため、1文字目の圧縮対象文字コードがヒットした場合、2文字目の文字コードを圧縮対象文字コードとして取得する。
そして、2文字目の文字コードは、1文字目の圧縮対象文字コードがヒットした位置から探索する。3文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し2分木探索をおこなう。一致する予約語ra(aは葉の番号)が探索された場合、その葉Laへのポインタにより葉Laの構造体にアクセスする。そして、上述したハフマン木探索により、予約語raの圧縮符号を探索して、圧縮バッファ3211に格納する。
一方、不一致の圧縮文字コードが出現した場合、予約語の構造体1600に対する2分木探索を終了し(EOT(End Of Transmission)まで進み)、1文字目の圧縮対象文字コードを再度レジスタにセットして、高位文字コードの構造体1700に対する2分木探索をおこなう。
一致する文字コードeb(bは葉の番号)が探索された場合、その葉Lbへのポインタにより葉Lbの構造体にアクセスする。そして、上述したハフマン木探索により、文字コードebの圧縮符号を探索して、圧縮バッファ3211に格納する。
一方、一致する文字コードが出現せず2分木探索を終了した場合、圧縮対象文字コードは高位文字コードではないため、上位8ビットと下位8ビットに分割する。そして、上位8ビットの分割文字コードについて、分割文字コードの構造体1800に対する2分木探索をおこなう。一致する分割文字コードDc1(c1は葉の番号)が探索された場合、その葉Lc1へのポインタにより葉Lc1の構造体にアクセスする。そして、上述したハフマン木探索により、分割文字コードDc1の圧縮符号を探索して、圧縮バッファ3211に格納する。
引き続き、下位8ビットの分割文字コードについて、分割文字コードの構造体1800に対する2分木探索をおこなう。一致する分割文字コードDc2(c2は葉の番号)が探索された場合、その葉Lc2へのポインタにより葉Lc2の構造体にアクセスする。そして、上述したハフマン木探索により、分割文字コードDc2の圧縮符号を探索して、分割文字コードDc1の圧縮符号に続けて圧縮バッファ3211に格納する。
(ファイル圧縮処理手順)
図35は、情報処理装置500が自動実行する2分枝の無節点ハフマン木H2を用いたファイル圧縮処理手順を示すフローチャートである。まず、ファイル番号:pをp=1とし(ステップS3501)、対象ファイルFpを読み込む(ステップS3502)。つぎに、圧縮処理を実行して(ステップS3503)、ファイル番号:pをインクリメントする(ステップS3504)。そして、p>αであるか否かを判断する(ステップS3505)。αは対象ファイル群Fsの総数である。p>αでない場合(ステップS3505:No)、ステップS3502に戻る。一方、p>αである場合(ステップS3505:Yes)、一連のファイル圧縮処理を終了する。
図36は、図35に示した圧縮処理(ステップS3503)の詳細な処理手順を示すフローチャート(その1)である。図36において、まず、対象ファイル群Fsに圧縮対象文字コードがあるか否かを判断する(ステップS3601)。ある場合(ステップS3601:Yes)、圧縮対象文字コードを取得してレジスタにセットする(ステップS3602)。そして、先頭の圧縮対象文字コードか否かを判断する(ステップS3603)。
ここで、先頭の圧縮対象文字コードとは、未圧縮の1文字目の文字コードをいう。先頭である場合(ステップS3603:Yes)、その圧縮対象文字コードの対象ファイル群Fs上の位置(先頭位置)となるポインタを取得し(ステップS3604)、ステップS3605に移行する。一方、先頭でない場合(ステップS3603:No)、先頭位置を取得せずにステップS3605に移行する。
そして、予約語の構造体1600に対して2分木探索をおこなう(ステップS3605)。圧縮対象文字コードが一致した場合(ステップS3606:Yes)、連続して一致した文字コード列が予約語(の文字コード列)に該当するか否かを判断する(ステップS3607)。該当しない場合(ステップS3607:No)、ステップS3602に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。
一方、ステップS3607において、予約語に該当する場合(ステップS3607:Yes)、該当する予約語の葉L♯へのポインタにより葉L♯の構造体にアクセスする(ステップS3608)。そして、ポイントされた葉L♯の構造体に格納されている予約語の圧縮符号を抽出する(ステップS3609)。
この後、抽出された圧縮符号を圧縮バッファ3211に格納して(ステップS3610)、ステップS3601に戻る。このループが予約語の圧縮処理の流れとなる。ステップS3601において、圧縮対象文字コードがない場合(ステップS3601:No)、対象ファイルFpから圧縮された圧縮ファイルfpを圧縮バッファ3211からファイル出力して保存する(ステップS3611)。そして、ステップS3504に移行する。一方、ステップS3606において不一致となった場合(ステップS3606:No)、16ビットの文字コードの圧縮処理のループに入る。
図37は、図35に示した圧縮処理(ステップS3503)の詳細な処理手順を示すフローチャート(その2)である。図37において、ステップS3604で取得された先頭位置のポインタを参照して、対象ファイル群Fsから圧縮対象文字コードを取得してレジスタにセットする(ステップS3701)。
つぎに、圧縮対象文字コードについて、高位文字コードの構造体1700に対して2分木探索をおこなう(ステップS3702)。一致した場合(ステップS3703:Yes)、該当する文字の葉L♯へのポインタにより葉L♯の構造体にアクセスする(ステップS3704)。そして、ポイントされた葉L♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出する(ステップS3705)。
この後、探索された圧縮符号を圧縮バッファ3211に格納して(ステップS3706)、ステップS3601に戻る。このループが16ビットの文字コードの圧縮処理の流れとなる。一方、ステップS3703において一致する文字コードが存在しなかった場合(ステップS3703:No)、分割文字コードの圧縮処理のループに入る。
図38は、図35に示した圧縮処理(ステップS3503)の詳細な処理手順を示すフローチャート(その3)である。図38において、まず、圧縮対象文字コードを上位8ビットと下位8ビットとに分割し(ステップS3801)、上位8ビットの分割文字コードを抽出する(ステップS3802)。そして、分割文字コードの構造体1800に対して2分木探索をおこなう(ステップS3803)。
そして、探索された分割文字コードの葉L♯へのポインタにより葉L♯の構造体にアクセスする(ステップS3804)。そして、ポイントされた葉L♯の構造体に格納されている分割文字コードの圧縮符号を抽出する(ステップS3805)。この後、探索された圧縮符号を圧縮バッファ3211に格納する(ステップS3806)。
つぎに、下位8ビットが探索済みか否かを判断し(ステップS3807)、探索済みでない場合(ステップS3807:No)、下位8ビットの分割文字コードを抽出して(ステップS3808)、ステップS3803〜S3806を実行する。一方、下位8ビットが探索済みである場合(ステップS3807:Yes)、ステップS3601に戻り、予約語の圧縮処理のループに入る。
このように、2分枝の無節点ハフマン木H2を用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉L♯の構造体に格納されている文字コードを抽出して、圧縮バッファ3211に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。
また、圧縮対象文字コードが格納されている葉L♯の構造体を、予約語の構造体1600、高位文字コードの構造体1700および分割文字コードの構造体1800により即座に特定することができる。したがって、2分枝の無節点ハフマン木H2の葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、6万種以上ある低位の文字コードをたかだか256種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。
また、図32に戻って、検出部3205〜圧縮符号マップ圧縮部3208について説明する。検出部3205は、圧縮部3200によるハフマン木の葉へのアクセスを検出する機能を有する。具体的には、たとえば、ハフマン木探索部3203による葉L♯の構造体へのアクセスを検出する。
生成部3256は、対象ファイル群Fsの中から選ばれた一の対象ファイルFp内の連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する機能を有する。
具体的には、たとえば、先行文字コードの圧縮符号マップへのポインタと後続文字コードの圧縮符号マップへのポインタとを用いる。たとえば、2分割に設定されている場合、いずれか一方のポインタを上位ビットと下位ビットに分割する。非分割である他方の圧縮符号マップへのポインタに分割されたポインタをそれぞれ連結する。これにより、2種類の組み合わせポインタを生成することができる。
また、4分割に設定されている場合、先行文字コードの圧縮符号マップへのポインタと後続文字コードの圧縮符号マップへのポインタとを、それぞれ上位ビットと下位ビットに分割する。分割された4個のビット列から2つ選択して連結することで、4種類の組み合わせポインタを生成することができる。
組み合わせポインタについては、連続するxグラムの文字コード列を構成する先頭文字コードの圧縮符号マップへのポインタと末尾文字コードの圧縮符号マップへのポインタについても同様に生成される。
圧縮符号マップ特定部3206は、圧縮符号マップ群Msの中から葉L♯の構造体に格納されている文字コード等に対応する圧縮符号マップM♯を特定する機能を有する。具体的には、たとえば、検出部3205によって、ハフマン木探索部3203による葉L♯の構造体へのアクセスが検出された場合、当該葉L#の構造体から圧縮符号マップへのポインタを読み出す。そして、読み出された圧縮符号マップへのポインタにより、葉L♯の構造体に格納されている文字コード等に対応する圧縮符号マップMにアクセスする。
図39−1は、圧縮符号マップ群Msの初期状態を示す説明図である。圧縮符号マップ群Msは、アドレス項目とビット列項目とを有する。そして、葉L♯の構造体ごとに、すなわち、高位文字コード、予約語、上位8ビット分割文字コード、下位8ビット分割文字コードごとに、アドレスとビット列とがレコード化されている。
アドレス項目の区分項目は、葉L♯の構造体の符号区分を示す。また、アドレス項目のアドレス値は、葉L♯の構造体のアドレス値を示す。したがって、区分項目の値とアドレス値とが連結されたアドレスが、その圧縮符号マップM♯へのポインタによりポイントされる。
ビット列項目は、ファイル番号順に並んだファイル数分のビット列により構成される。ビットの値が“1”であるファイル番号の対象ファイルには、アドレスにより指定される文字コード等が存在する。一方、ビットの値が“0”であるファイル番号の対象ファイルには、アドレスにより指定される文字コード等が存在しない。図39−1では、初期状態を示しているため、すべてのビット列の値は“0”である。
図32において、圧縮符号マップ更新部3207は、ファイル番号のビットを“0”から“1”に更新する機能を有する。具体的には、圧縮符号マップ群Msの、圧縮符号マップM♯へのポインタによりポイントされた圧縮符号マップM♯のビット列のうち、現在圧縮処理中である対象ファイルのファイル番号のビットを“0”から“1”に更新する。
図39−2は、圧縮符号マップ更新部3207による更新後の圧縮符号マップ群Msを示す説明図である。たとえば、一行目のレコードに該当する文字コード等は、対象ファイルF1〜F4には存在せず、対象ファイルFαには存在することを示している。
(2グラムの圧縮符号マップとその分割)
ここで、圧縮符号マップ圧縮部3208の説明の前に、2グラムの圧縮符号マップについて説明する。図39−1および図39−2では、1グラム、すなわち、単一の文字コード(分割文字コード含む)の対象ファイル群Fsでの存否をあらわす圧縮符号マップについて説明した。2グラムの圧縮符号マップとは、2グラムの文字コード(2つの文字コード)列の対象ファイルFsでの存否をあらわす圧縮符号マップである。
2グラムの圧縮符号マップには、2連続グラムの文字コード列の対象ファイルFsでの存否をあらわす圧縮符号マップと、xグラムの文字コード列のうち先頭グラムと末尾グラムの文字コードの対象ファイルFsでの存否をあらわす圧縮符号マップとがある。本明細書では、前者を「連続グラムマップ」と称し、後者を「xグラム頭尾マップ」と称す。
たとえば、「東」,「京」,「都」の各文字は高位文字コードで表現される。この場合、ある対象ファイルFpに「東京都」の文字列が存在すると、「東京」の連続グラムマップと、「京都」の連続グラムマップが生成される。そして、「東京」の連続グラムマップおよび「京都」の連続グラムマップのそれぞれに、対象ファイルFpのビットが立つこととなる。
同様に、「東京都」は3グラムの文字コード列であるため、「東」の高位文字コードを先頭グラム、「都」の高位文字コードを末尾グラムとする3グラム頭尾マップが生成される。そして、この3グラム頭尾マップに、対象ファイルFpのビットが立つこととなる。
また、高位文字コードの文字コード数は、本例の場合、1024個(=210)であるため、高位文字コードの圧縮符号マップへのポインタは、少なくとも10ビットで表現されることとなる。高位文字コードが連続する連続グラムマップでは、連続する2グラムの高位文字コード列の組み合わせを網羅する必要がある。このため、210×210(=220)のメモリサイズが必要となり、サイズ爆発を引き起こすこととなる。このような現象は、1グラム目が高位文字コードで2グラム目が上位分割文字コードの場合、1グラム目が上位分割文字コードで2グラム目が下位分割文字コードの場合、1グラム目が下位分割文字コードで2グラム目が高位文字コードの場合でも同様である。
したがって、本実施の形態では、上述した生成部3256により、連続する2グラムのうち、少なくともいずれか一方のグラムの文字コードの圧縮符号マップへのポインタを上位ビットと下位ビットに分割して、複数種類のポインタを生成する。そして、圧縮符号マップ特定部3206により、対象ファイル数α分のビット列を複数種類のポインタにそれぞれ割り当てることで、連続グラムマップを複数種類のポインタで指定される連続グラム分割マップに分割する。xグラム頭尾マップについても、同様にxグラム頭尾分割マップとする。これにより、連続グラムマップやxグラム頭尾マップのサイズの縮小化を図る。この分割に伴い、連続グラム分割マップやxグラム頭尾マップを用いた絞込みの際には、AND演算を実行すればよい。
図40は、2グラムの圧縮符号マップのサイズ縮小を示す説明図である。(A)は分割前の2グラムの圧縮符号マップのサイズを示している。第1グラムの圧縮符号マップへのポインタとして10ビット使用し、第2グラムの圧縮符号マップへのポインタとして10ビット使用している。したがって、210×210(=220)のサイズが必要となり、サイズ爆発を引き起こすこととなる。
(B)では、第2グラムの圧縮符号マップへのポインタを5ビットで分割している。したがって、サイズは、210×2×2(=216)となり、大幅なサイズ縮小を図ることができる。(B)の場合、分割された2つのマップによりAND演算することで、絞込みをおこなうことができる。
(C)では、さらに、第1グラムの圧縮符号マップへのポインタを5ビットで分割している。したがって、メモリサイズは、2×2×4(=212)となり、大幅なサイズ縮小を図ることができる。(C)の場合、分割された4つのマップによりAND演算することで、絞込みをおこなうことができる。
図41は、2グラムの圧縮符号マップの分割時のサイズを示す図表である。図40の(A)のように非分割の場合、2グラムの組み合わせでの合計サイズは、1.64Mとなる。一方、図40の(B)のような2分割の場合、2グラムの組み合わせでの合計サイズは、144Kとなる。さらに、図40の(C)のような4分割の場合、2グラムの組み合わせでの合計サイズは、10Kとなる。
図42−1〜図42−15は、2グラムの圧縮符号マップへのポインタの分割例を示す説明図である。図42−1は、2グラムの高位文字コードの圧縮符号マップへのポインタ列の2分割例を示している。図42−1では、2グラム目の高位文字コードの圧縮符号マップへのポインタのアドレス値を、上位5ビットと下位5ビットで分割している。図42−1は、図40の(B)に相当する分割例である。
図42−2および図42−3は、図42−1で分割した2グラムの高位文字コードの圧縮符号マップへのポインタ列の分割例を示している。図42−2および図42−3は、図40の(C)に相当する分割例である。
図42−4は、高位文字コードと上位分割文字コードとの圧縮符号マップへのポインタ列の2分割例を示している。図42−4では、2グラム目の上位分割文字コードの圧縮符号マップへのポインタのアドレス値を、上位4ビットと下位4ビットで分割している。図42−4は、図40の(B)に相当する分割例である。
図42−5および図42−6は、図42−4で分割した高位文字コードと上位分割文字コードとの圧縮符号マップへのポインタ列の分割例を示している。図42−5および図42−6は、図40の(C)に相当する分割例である。
図42−7は、上位分割文字コードと下位分割文字コードとの圧縮符号マップへのポインタ列の2分割例を示している。図42−7では、2グラム目の下位分割文字コードの圧縮符号マップへのポインタのアドレス値を、上位4ビットと下位4ビットで分割している。図42−7は、図40の(B)に相当する分割例である。
図42−8および図42−9は、図42−7で分割した上位分割文字コードと下位分割文字コードとの圧縮符号マップへのポインタ列の分割例を示している。図42−8および図42−9は、図40の(C)に相当する分割例である。
図42−10は、下位分割文字コードと上位分割文字コードとの圧縮符号マップへのポインタ列の2分割例を示している。図42−10では、2グラム目の上位分割文字コードの圧縮符号マップへのポインタのアドレス値を、上位4ビットと下位4ビットで分割している。図42−10は、図40の(B)に相当する分割例である。
図42−11および図42−12は、図42−10で分割した下位分割文字コードと上位分割文字コードとの圧縮符号マップへのポインタ列の分割例を示している。図42−11および図42−12は、図40の(C)に相当する分割例である。
図42−13は、下位分割文字コードと高位文字コードとの圧縮符号マップへのポインタ列の2分割例を示している。図42−13では、2グラム目の高位文字コードの圧縮符号マップへのポインタのアドレス値を、上位5ビットと下位5ビットで分割している。図42−13は、図40の(B)に相当する分割例である。
図42−14および図42−15は、図42−13で分割した下位分割文字コードと高位文字コードとの圧縮符号マップへのポインタ列の分割例を示している。図42−14および図42−15は、図40の(C)に相当する分割例である。
図43−1〜図43−32は、連続グラム分割マップの具体例を示す説明図である。なお、xグラム頭尾分割マップについては、1グラム目が先頭グラム、2グラム目が末尾グラムとなるだけであり、マップ構成は同一であるため、省略する。
図43−1〜図43−4は、連続グラムがともに高位文字コードである場合の4分割の連続グラム分割マップを示す説明図である。図43−1は、1グラム目、2グラム目ともに上位5ビットの組み合わせである。図43−2は、1グラム目が上位5ビット、2グラム目が下位5ビットの組み合わせである。図43−3は、1グラム目が下位5ビット、2グラム目が上位5ビットの組み合わせである。図43−4は、1グラム目、2グラム目とも下位5ビットの組み合わせである。
図43−5〜図43−8は、1グラム目が高位文字コードで2グラム目が上位分割文字コードである場合の4分割の連続グラム分割マップを示す説明図である。図43−5は、1グラム目の上位5ビットと2グラム目の上位4ビットの組み合わせである。図43−6は、1グラム目が上位5ビット、2グラム目が下位4ビットの組み合わせである。図43−7は、1グラム目が下位5ビット、2グラム目が上位4ビットの組み合わせである。図43−8は、1グラム目が下位5ビット、2グラム目が下位4ビットの組み合わせである。
図43−9〜図43−12は、1グラム目が上位分割文字コードで2グラム目が下位分割文字コードである場合の4分割の連続グラム分割マップを示している。図43−9は、1グラム目、2グラム目ともに上位4ビットの組み合わせである。図43−10は、1グラム目が上位4ビット、2グラム目が下位4ビットの組み合わせである。図43−11は、1グラム目が下位4ビット、2グラム目が上位4ビットの組み合わせである。図43−12は、1グラム目、2グラム目とも下位4ビットの組み合わせである。
図43−13〜図43−16は、1グラム目が下位分割文字コードで2グラム目が高位文字コードである場合の4分割の連続グラム分割マップを示している。図43−13は、1グラム目の上位4ビットと2グラム目の上位5ビットの組み合わせである。図43−14は、1グラム目が上位4ビット、2グラム目が下位5ビットの組み合わせである。図43−15は、1グラム目が下位4ビット、2グラム目が上位5ビットの組み合わせである。図43−16は、1グラム目が下位4ビット、2グラム目が下位5ビットの組み合わせである。
つぎに、前方一致検索や後方一致検索の場合に用いる連続グラム分割マップについて説明する。以降、前方一致検索に用いる連続グラム分割マップを前方一致分割マップと称し、後方一致検索に用いる連続グラム分割マップを後方一致分割マップと称す。
対象ファイルFpでは、“,(カンマ)”や“ (スペース)”で見出し語などの単語が区切られている場合がある。また、“)”の次の文字が先頭である場合がある。したがって、前方一致検索や後方一致検索を行う場合、検索キーワードに“,(カンマ)”や“ (スペース)”などの特殊文字(高位文字コード)を付加して検索をおこなう。
図43−17〜図43−24は、前方一致分割マップの具体例を示す説明図である。前方一致分割マップの作成の際には、図43−1〜図43−16に示した連続グラム分割マップのうち、1グラム目が特殊文字の高位文字コードである連続グラム分割マップを抽出することで、前方一致分割マップを作成する。
図43−25〜図43−32は、後方一致分割マップの具体例を示す説明図である。後方一致分割マップの作成の際には、図43−1〜図43−16に示した連続グラム分割マップのうち、2グラム目が特殊文字の高位文字コードである連続グラム分割マップを抽出することで、後方一致分割マップを作成する。
なお、“,(カンマ)”や“ (スペース)”など、文字列の連続性を遮断する特殊文字を仮想的に「区切り文字」と見なしUTF16の外字コードを割当て、連続グラム分割マップの1024種の高位文字コードを拡張し、1025番目に割付けすることで、上記の前方一致分割マップや後方一致分割マップを代替(省略)することができる。
(連続グラム分割マップおよびxグラム頭尾分割マップの生成例)
ここで、圧縮符号マップ特定部3206および圧縮符号マップ更新部3207による連続グラム分割マップおよびxグラム頭尾分割マップの生成例について説明する。
図44−1〜図44−9は、連続グラム分割マップおよびxグラム頭尾分割マップの生成例を示す説明図である。まず、図44−1において、対象ファイルFpに「人形芝居」という文字列が記述されているとする。文字列「人形芝居」の「人」,「形」,「居」は高位文字コードであり、「芝」は分割文字コードとなるため、文字列「人形芝居」は5グラムの文字コード列である。
(1)まず、圧縮部3200により、先頭の「人」の文字コードを2分木探索する。(2)文字構造体530で「人」の文字コードが検出され、その葉へのポインタで「人」の文字コードを含む葉L♯の構造体を指定する。(3)そして、「人」の圧縮符号マップへのポインタにより、「人」の圧縮符号マップMを指定する。(4)つぎに、ファイル番号pのビットが“0”の場合、“1”に更新する。
(5)また、「人」の文字コードを含む葉L♯の構造体から「人」の圧縮符号マップへのポインタを抽出する。そして、「人」の圧縮符号マップへのポインタをマップ生成用レジスタに格納する。
(6)つぎに、上記(1)と同様、「形」の「人」の文字コードを2分木探索する。(7)文字構造体530で「形」の文字コードが検出され、その葉へのポインタで「形」の文字コードを含む葉L♯の構造体を指定する。(8)そして、「形」の圧縮符号マップへのポインタにより、「形」の圧縮符号マップMを指定する。(9)そして、ファイル番号pのビットが“0”の場合、“1”に更新する。
(10)また、「形」の文字コードを含む葉L♯の構造体から「形」の圧縮符号マップへのポインタを抽出する。そして、「形」の圧縮符号マップへのポインタを「人」の圧縮符号マップへのポインタとともにマップ生成用レジスタに格納する。
(11)そして、「形」の文字コードを含む葉L♯の構造体の空き領域に、「人」の圧縮符号マップへのポインタを保存する。具体的には、連続グラム領域に、「人」の圧縮符号マップへのポインタを保存する。また、2グラム頭尾領域にも、「人」の圧縮符号マップへのポインタを保存する。
図44−2において、(12)〜(14)で連続グラム分割マップ群と2グラム頭尾分割マップ群を生成する。
(12)まず、現在マップ生成用レジスタに格納されている「人」の圧縮符号マップへのポインタと、「形」の圧縮符号マップへのポインタとを用いて、「人」と「形」との連続グラム分割マップへのポインタを生成する。ここでは、図40の(C)に示したように、4分割するため、「人」と「形」との連続グラム分割マップへのポインタを4種類生成する。同様に、「人」と「形」との頭尾分割マップへのポインタを4種類生成する。
(13)つぎに、「人」と「形」との連続グラム分割マップへのポインタごとに、連続グラム分割マップを設定する。すでに他の文字の圧縮時に設定済みである場合は、連続グラム分割マップへのポインタで該当する連続グラム分割マップを指定する。同様に、「人」と「形」との2グラム頭尾分割マップへのポインタごとに、2グラム頭尾分割マップを設定する。すでに他の文字の圧縮時に設定済みである場合は、2グラム頭尾分割マップへのポインタで該当する2グラム頭尾分割マップを指定する。
(14)そして、連続グラム分割マップ群および2グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
図44−3において、(15)圧縮部3200により、「芝」の文字コードを2分木探索する。「芝」の出現頻度は、1024より低いため、「芝」の文字コード“0x9D82”は、上位分割文字コード“0x9D”と下位分割文字コード“0x82”とに分割される。
(16)まず、文字構造体530で上位分割文字コード“0x9D”が検出され、その葉へのポインタで上位分割文字コード“0x9D”を含む葉L♯の構造体を指定する。(17)つぎに、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタにより、「芝」の上位分割文字コード“0x9D”の圧縮符号マップMを指定する。(18)そして、ファイル番号pのビットが“0”の場合、“1”に更新する。
(19)また、「芝」の上位分割文字コード“0x9D”を含む葉L♯の構造体から「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタを抽出する。そして、「芝」の圧縮符号マップへのポインタをマップ生成用レジスタに格納する。
(20)そして、「形」の文字コードを含む葉L♯の構造体の空き領域に、「形」の圧縮符号マップへのポインタを保存する。具体的には、連続グラム領域に、「形」の圧縮符号マップへのポインタを保存する。また、2グラム頭尾領域にも、「形」の圧縮符号マップへのポインタを保存する。
図44−4において、マップ生成用レジスタには、「人」の圧縮符号マップへのポインタと「形」の圧縮符号マップへのポインタと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタとが格納されている。
(21)まず、連続グラム分割マップへのポインタ群と、2グラム頭尾分割マップへのポインタ群と、3グラム頭尾分割マップへのポインタ群とを生成する。具体的には、「形」の圧縮符号マップへのポインタと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタとにより、「形」と「芝」の上位分割文字コード“0x9D”との連続グラム分割マップ群を生成する。
また、「形」の圧縮符号マップへのポインタと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタとにより、「形」と「芝」の上位分割文字コード“0x9D”との2グラム頭尾分割マップ群を生成する。同様に、「人」の圧縮符号マップへのポインタと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタとにより、「人」と「芝」の上位分割文字コード“0x9D”との3グラム頭尾分割マップ群を生成する。
(22)つぎに、(21)で生成された各分割マップへのポインタ群により指定する。具体的には、「形」と「芝」の上位分割文字コード“0x9D”との連続グラム分割マップ群へのポインタにより、「形」と「芝」の上位分割文字コード“0x9D”との連続グラム分割マップ群を指定する。
また、「形」と「芝」の上位分割文字コード“0x9D”との2グラム頭尾分割マップ群へのポインタにより、「形」と「芝」の上位分割文字コード“0x9D”との2グラム頭尾分割マップ群を指定する。同様に、「人」と「芝」の上位分割文字コード“0x9D”との3グラム頭尾分割マップ群へのポインタにより、「人」と「芝」の上位分割文字コード“0x9D”との3グラム頭尾分割マップ群を指定する。
(23)そして、(22)で指定された分割マップ群について、ファイル番号pのビットが“0”の場合、“1”に更新する。具体的には、「形」と「芝」の上位分割文字コード“0x9D”との連続グラム分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
また、「形」と「芝」の上位分割文字コード“0x9D”との2グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。同様に、「人」と「芝」の上位分割文字コード“0x9D”との3グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
図44−5において、上位分割文字コード“0x9D”の検出のあと、(24)文字構造体530で下位分割文字コード“0x82”が検出され、その葉へのポインタで下位分割文字コード“0x82”を含む葉L♯の構造体を指定する。
(25)つぎに、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタにより、「芝」の下位分割文字コード“0x82”の圧縮符号マップMを指定する。(26)そして、ファイル番号pのビットが“0”の場合、“1”に更新する。
(27)また、「芝」の下位分割文字コード“0x82”を含む葉L♯の構造体から「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタを抽出する。そして、「人」の圧縮符号マップへのポインタをマップ生成用レジスタに格納する。
(28)そして、「芝」の下位分割文字コード“0x82”を含む葉L♯の構造体の空き領域に、マップ生成用レジスタに格納されているポインタを保存する。具体的には、連続グラム領域に、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタを保存する。また、2グラム頭尾領域に、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタを保存する。また、3グラム頭尾領域に、「形」の圧縮符号マップへのポインタを保存する。さらに、4グラム頭尾領域に、「人」の圧縮符号マップへのポインタを保存する。
図44−6において、マップ生成用レジスタには、「人」の圧縮符号マップへのポインタと「形」の圧縮符号マップへのポインタと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタとが格納されている。
(29)まず、連続グラム分割マップへのポインタ群と、2グラム頭尾分割マップへのポインタ群と、3グラム頭尾分割マップへのポインタ群と、4グラム頭尾分割マップへのポインタ群とを生成する。
具体的には、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタとにより、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との連続グラム分割マップ群を生成する。
また、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタとにより、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との2グラム頭尾分割マップ群を生成する。
同様に、「形」の圧縮符号マップへのポインタと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタとにより、「形」と「芝」の下位分割文字コード“0x82”との3グラム頭尾分割マップ群を生成する。
また、「人」の圧縮符号マップへのポインタと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタとにより、「人」と「芝」の下位分割文字コード“0x82”との4グラム頭尾分割マップ群を生成する。
(30)つぎに、(29)で生成された各分割マップへのポインタ群により指定する。具体的には、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との連続グラム分割マップ群へのポインタにより、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との連続グラム分割マップ群を指定する。
また、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との2グラム頭尾分割マップ群へのポインタにより、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との2グラム頭尾分割マップ群を指定する。
同様に、「形」と「芝」の下位分割文字コード“0x82”との3グラム頭尾分割マップ群へのポインタにより、「形」と「芝」の下位分割文字コード“0x82”との3グラム頭尾分割マップ群を指定する。
また、「人」と「芝」の下位分割文字コード“0x82”との4グラム頭尾分割マップ群へのポインタにより、「人」と「芝」の下位分割文字コード“0x82”との4グラム頭尾分割マップ群を指定する。
(31)そして、(30)で指定された分割マップ群について、ファイル番号pのビットが“0”の場合、“1”に更新する。具体的には、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との連続グラム分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
また、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との2グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
同様に、「形」と「芝」の下位分割文字コード“0x82”との3グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。また、「人」と「芝」の下位分割文字コード“0x82”との4グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
図44−7において、(32)まず、圧縮部3200により、「居」の文字コードを2分木探索する。(33)文字構造体530で「居」の文字コードが検出され、その葉へのポインタで「居」の文字コードを含む葉L♯の構造体を指定する。(34)つぎに、「居」の圧縮符号マップへのポインタにより、「居」の圧縮符号マップMを指定する。(35)そして、ファイル番号pのビットが“0”の場合、“1”に更新する。
(36)また、「居」の葉L♯の構造体から「居」の圧縮符号マップへのポインタを抽出する。そして、「居」の圧縮符号マップへのポインタをマップ生成用レジスタに格納する。
(37)そして、「居」の葉L♯の構造体の空き領域に、マップ生成用レジスタに格納されているポインタを保存する。具体的には、連続グラム領域に、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタを保存する。また、2グラム頭尾領域に、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタを保存する。また、3グラム頭尾領域に、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタを保存する。さらに、4グラム頭尾領域に、「形」の圧縮符号マップへのポインタを保存する。また、5グラム頭尾領域に、「人」の圧縮符号マップへのポインタを保存する。
図44−8において、マップ生成用レジスタには、「人」の圧縮符号マップへのポインタと「形」の圧縮符号マップへのポインタと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタと「居」の圧縮符号マップへのポインタとが格納されている。
(38)まず、連続グラム分割マップへのポインタ群と、2グラム頭尾分割マップへのポインタ群と、3グラム頭尾分割マップへのポインタ群と、4グラム頭尾分割マップへのポインタ群と、5グラム頭尾分割マップへのポインタ群とを生成する。4グラム頭尾分割マップへのポインタ群と5グラム頭尾分割マップへのポインタ群については、図44−9にて説明する。
具体的には、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタと「居」の圧縮符号マップへのポインタとにより、「芝」の下位分割文字コード“0x82”と「居」との連続グラム分割マップ群を生成する。
また、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタと「居」の圧縮符号マップへのポインタとにより、「芝」の下位分割文字コード“0x82”と「居」との2グラム頭尾分割マップ群を生成する。
同様に、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタと「居」の圧縮符号マップへのポインタとにより、「芝」の上位分割文字コード“0x9D”と「居」との3グラム頭尾分割マップ群を生成する。
(39)つぎに、(38)で生成された各分割マップへのポインタ群により指定する。具体的には、「芝」の上位分割文字コード“0x9D”と「居」との連続グラム分割マップ群へのポインタにより、「芝」の上位分割文字コード“0x9D”と「居」との連続グラム分割マップ群を指定する。
また、「芝」の下位分割文字コード“0x82”と「居」との2グラム頭尾分割マップ群へのポインタにより、「芝」の下位分割文字コード“0x82”と「居」との2グラム頭尾分割マップ群を指定する。
同様に、「芝」の上位分割文字コード“0x9D”と「居」との3グラム頭尾分割マップ群へのポインタにより、「芝」の上位分割文字コード“0x9D”と「居」との3グラム頭尾分割マップ群を指定する。
(40)そして、(39)で指定された分割マップ群について、ファイル番号pのビットが“0”の場合、“1”に更新する。具体的には、「芝」の上位分割文字コード“0x9D”と「居」との連続グラム分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
また、「芝」の下位分割文字コード“0x82”と「居」との2グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。同様に、「芝」の上位分割文字コード“0x9D”と「居」との3グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
図44−9において、(41)4グラム頭尾分割マップへのポインタ群と、5グラム頭尾分割マップへのポインタ群とを生成する。具体的には、「形」の圧縮符号マップへのポインタと「居」の圧縮符号マップへのポインタとにより、「形」と「居」との4グラム頭尾分割マップ群を生成する。同様に、「人」の圧縮符号マップへのポインタと「居」の圧縮符号マップへのポインタとにより、「人」と「居」との5グラム頭尾分割マップ群を生成する。
(42)つぎに、(41)で生成された各分割マップへのポインタ群により指定する。具体的には、「形」と「居」との4グラム頭尾分割マップ群へのポインタにより、「形」と「居」との4グラム頭尾分割マップ群を指定する。また、「人」と「居」との5グラム頭尾分割マップ群へのポインタにより、「人」と「居」との5グラム頭尾分割マップ群を指定する。
(43)そして、(42)で指定された分割マップ群について、ファイル番号pのビットが“0”の場合、“1”に更新する。具体的には、「形」と「居」との4グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。また、「人」と「居」との5グラム頭尾分割マップ群において、ファイル番号pのビットが“0”の場合、“1”に更新する。
このように、連続グラムについては、先行グラムの圧縮符号マップへのポインタを、後続グラムの葉L♯の構造体に保存しておく。また、末尾グラムとなる葉L♯の構造体に、当該末尾グラムに対して先頭となる先頭グラムの圧縮符号マップへのポインタを格納しておく。これにより、検索処理のときに、葉L♯の構造体から先行グラムの圧縮符号マップへのポインタと後続グラムの圧縮符号マップへのポインタとを抽出することで、連続グラム分割マップへのポインタを生成することができる。したがって、当該ポインタにより連続グラム分割マップにアクセスすることができる。
同様に、検索処理のときに、葉L♯の構造体から先頭グラムの圧縮符号マップへのポインタと末尾グラムの圧縮符号マップへのポインタとを抽出することで、xグラム頭尾分割マップへのポインタを生成することができる。したがって、当該ポインタによりxグラム頭尾分割マップにアクセスすることができる。つぎに、図44−1〜図44−9におけるマップ生成用レジスタのポインタ格納状態について説明する。
図44−10は、図44−1〜図44−9におけるマップ生成用レジスタのポインタ格納状態を示す説明図である。マップ生成用レジスタには、xグラム分の領域が設定される。本例では、x=5とした例である。(A)は初期状態であり、空である。
(B)において、x=1の領域に「人」の圧縮符号マップへのポインタが格納される。(C)において、さらに、x=2の領域に「形」の圧縮符号マップへのポインタが格納される。(D)において、さらに、x=3の領域に「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタが格納される。
(E)において、さらに、x=4の領域に「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタが格納される。(F)において、さらに、x=5の領域に「居」の圧縮符号マップへのポインタが格納される。「人形芝居」のあと、文字「は」の高位文字コードがある場合、先頭の「人」の圧縮符号マップへのポインタが押し出され、順次、xの値が1つ若い領域にシフトされる。(G)そして、空き領域となったx=5の領域に、「は」の圧縮符号マップへのポインタが格納される。
つぎに、図44−1〜図44−9に示した連続グラム分割マップへのポインタの生成例について、連続グラムの組み合わせごとに説明する。なお、xグラム頭尾分割マップへのポインタもデータ構造としては同じであるため省略する。
図45−1は、高位文字コードどうしの連続グラム分割マップへのポインタの生成例を示す説明図である。(A)は、「人」と「形」との圧縮符号マップへのポインタ列を示している。なお、符号区分とは、その文字コードが高位文字コードか分割文字コードかを特定する識別子である。“1”が高位文字コード、“0”が分割文字コードである。
(B)は、各圧縮符号マップへのポインタのアドレス値の上位5ビットどうしを組み合わせた連続グラム分割マップへのポインタである。(C)は、「人」の圧縮符号マップへのポインタのアドレス値の上位5ビットと「形」の圧縮符号マップへのポインタのアドレス値の下位5ビットとを組み合わせた連続グラム分割マップへのポインタである。(D)は、「人」の圧縮符号マップへのポインタのアドレス値の下位5ビットと「形」の圧縮符号マップへのポインタのアドレス値の上位5ビットとを組み合わせた連続グラム分割マップへのポインタである。(E)は、各圧縮符号マップへのポインタのアドレス値の下位5ビットどうしを組み合わせた連続グラム分割マップへのポインタである。
図45−2は、高位文字コードと上位分割文字コードとの連続グラム分割マップへのポインタの生成例を示す説明図である。(A)は、「形」と「芝」の上位分割文字コード“0x9D”との圧縮符号マップへのポインタ列を示している。なお、上下区分とは、文字コードが分割文字コードである場合、すなわち、符号区分が“0”である場合、上位分割文字コードか下位分割文字コードかを特定する識別子である。上下区分には、10ビットのアドレス値の上位2ビットに割り当てられている。“00”が上位文字コード、“01”が下位文字コードである。上下区分にアドレス値の上位2ビットが割り当てられているため、アドレス値の残余8ビットを上位4ビットと下位4ビットで分割することとなる。
(B)は、「形」の圧縮符号マップへのポインタのアドレス値の上位5ビットと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
(C)は、「形」の圧縮符号マップへのポインタのアドレス値の上位5ビットと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
(D)は、「形」の圧縮符号マップへのポインタのアドレス値の下位5ビットと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
(E)は、「形」の圧縮符号マップへのポインタのアドレス値の下位5ビットと「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
図45−3は、上位分割文字コードと下位分割文字コードとの連続グラム分割マップへのポインタの生成例を示す説明図である。下位分割文字コードと上位分割文字コードとの連続グラムマップへのポインタの生成例も同じ生成手法になるため省略する。
(A)は、「芝」の上位分割文字コード“0x9D”と下位分割文字コード“0x82”との圧縮符号マップへのポインタ列を示している。(B)は、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
(C)は、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
(D)は、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
(E)は、「芝」の上位分割文字コード“0x9D”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットと「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットとを組み合わせた連続グラム分割マップへのポインタである。
図45−4は、下位分割文字コードと高位文字コードとの連続グラム分割マップへのポインタの生成例を示す説明図である。(A)は、「芝」の下位分割文字コード“0x82”と「居」との圧縮符号マップへのポインタ列を示している。
(B)は、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットと「居」の圧縮符号マップへのポインタのアドレス値の上位5ビットとを組み合わせた連続グラム分割マップへのポインタである。
(C)は、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの上位4ビットと「居」の圧縮符号マップへのポインタのアドレス値の下位5ビットとを組み合わせた連続グラム分割マップへのポインタである。
(D)は、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットと「居」の圧縮符号マップへのポインタのアドレス値の上位5ビットとを組み合わせた連続グラム分割マップへのポインタである。
(E)は、「芝」の下位分割文字コード“0x82”の圧縮符号マップへのポインタのアドレス値の残余ビットの下位4ビットと「居」の圧縮符号マップへのポインタのアドレス値の下位5ビットとを組み合わせた連続グラム分割マップへのポインタである。
このように、連続グラムの各圧縮符号マップへのポインタにおいて、先行グラムの上位ビットと後続グラムの下位ビットとを組み合わせることで、4種類の分割マップへのポインタを生成することができる。なお、2分割にする場合は、先行(または後続)グラムのアドレス値を分割せずに、後続(または先行)グラムのアドレス値のみを上位ビットと下位ビットに分割して組み合わせればよい。
(圧縮符号マップ生成処理手順)
つぎに、圧縮符号マップ生成処理について説明する。圧縮符号マップ生成処理は、図34および図35に示したファイル圧縮処理と並列に実行される処理である。具体的には、図34を参照すると、CPU401は、圧縮対象文字コードを圧縮する際に、葉L♯の構造体にアクセスする。圧縮符号マップ生成処理は、ファイル圧縮処理時における葉L♯の構造体へのアクセスの都度、実行される。これにより、対象ファイルFを一回走査するだけで、対象ファイルFの圧縮と対象ファイルFに存在する文字の圧縮符号マップMを同時に生成することができ、処理の高速化を図ることができる。なお、圧縮符号マップ群Msの初期状態は、図39−1に示したとおりである。
図46−1は、図32に示した圧縮符号マップ特定部3206および圧縮符号マップ更新部3207による圧縮符号マップ生成処理手順を示すフローチャートである。まず、図34に示した圧縮処理において、葉L♯の構造体へのアクセスがあったか否かを判断する(ステップS4601)。
葉L♯の構造体へのアクセスがない場合(ステップS4601:No)、ステップS4604に移行する。一方、葉L♯の構造体へのアクセスがあった場合(ステップS4601:Yes)、1グラムの圧縮符号マップ生成処理を実行し(ステップS4602)、2グラムの分割マップ生成処理を実行する(ステップS4603)。そして、対象ファイルFpの圧縮処理が終了したか否かを判断する(ステップS4604)。終了していない場合(ステップS4604:No)、ステップS4601に戻る。一方、終了した場合(ステップS4604:Yes)、圧縮符号マップ生成処理を終了する。
図46−2は、図46−1に示した1グラムの圧縮符号マップ生成処理(ステップS4602)の詳細な処理手順を示すフローチャートである。まず、葉L♯の構造体へのアクセスがあった場合(ステップS4601:Yes)、圧縮符号マップへのポインタを、アクセス先の葉L♯の構造体から取得する(ステップS4621)。そして、取得された圧縮符号マップへのポインタをマップ生成用レジスタに格納する(ステップS4622)。
また、取得された圧縮符号マップへのポインタにより圧縮符号マップを指定する(ステップS4623)。そして、指定された圧縮符号マップにおいてファイル番号pのビットが“0”であるか否かを判断する(ステップS4624)。“1”であれば、アクセス先の葉L♯の構造体に格納されている文字コードが対象ファイルFpにすでに出現しており、“0”の場合はまだ未出現であることを示している。
“1”である場合(ステップS4624:No)、更新する必要がないため、ステップS4603に移行する。一方、“0”である場合(ステップS4624:Yes)、ファイル番号pのビットを“1”に更新し(ステップS4625)、ステップS4603に移行する。
図46−3は、図46−1に示した2グラムの分割マップ生成処理(ステップS4603)の詳細な処理手順を示すフローチャートである。まず、変数yをy=1に設定する(ステップS4631)。そして、第(x−y)グラムの圧縮符号マップへのポインタがマップ生成用レジスタにあるか否かを判断する(ステップS4632)。
xの値は、1≦x≦Xをとる値(Xはxの最大値)であり、グラム数を規定している。初期値はx=1である。最大値Xは、任意に設定される。たとえば、5グラムまでの文字コード列について頭尾分割マップを生成したいときは、X=5に設定する。グラム数xの変動については、図46−5で説明する。
図46−3において、第(x−y)グラムの圧縮符号マップへのポインタがマップ生成用レジスタにない場合(ステップS4632:No)、ステップS4604に移行する。一方、第(x−y)グラムの圧縮符号マップへのポインタがマップ生成用レジスタにある場合(ステップS4632:Yes)、第(x−y)グラムの圧縮符号マップへのポインタが、アクセス先の葉L♯の構造体の連続グラム領域にあるか否かを判断する(ステップS4633)。ない場合(ステップS4633:No)、第(x−y)グラムの圧縮符号マップへのポインタを、アクセス先の葉L♯の構造体の連続グラム領域に格納する(ステップS4634)。
そして、ポインタ分割処理を実行する(ステップS4635)。ポインタ分割処理では、第(x−y)グラムの圧縮符号マップへのポインタとアクセス先の葉L♯の構造体に格納されている圧縮符号マップへのポインタとを用いて、連続グラム分割マップへのポインタやxグラム頭尾分割マップへのポインタを生成する。ポインタ分割処理の詳細については、図46−4で説明する。
ポインタ分割処理(ステップS4635)により、連続グラム分割マップへのポインタ群が生成されるため、連続グラム分割マップへの各ポインタについて、ファイル総数α分のオール0のビット列を割り当てる。そして、現在圧縮している対象ファイルFpのファイル番号pのビットを“0”から“1”に更新する(ステップS4636)。そして、ステップS4640に移行する。
また、ステップS4633において、第(x−y)グラムの圧縮符号マップへのポインタが、アクセス先の葉L♯の構造体の連続グラム領域にある場合(ステップS4633:Yes)、ポインタ分割処理を実行する(ステップS4637)。このポインタ分割処理(ステップS4637)は、ポインタ分割処理(ステップS4635)と同一処理である。
ポインタ分割処理(ステップS4637)により、連続グラム分割マップへのポインタ群が生成されるため、生成された連続グラム分割マップへのポインタ群で各連続グラム分割マップを指定する(ステップS4638)。そして、指定された各連続グラム分割マップにおいて、現在圧縮している対象ファイルFpのファイル番号pのビットを“0”から“1”に更新する(ステップS4639)。そして、ステップS4640に移行する。このように、ステップS4633〜S4639までの処理により、連続グラム分割マップの生成/更新を実行することができる。
また、ステップS4640において、第(x−y)グラムの圧縮符号マップへのポインタが、アクセス先の葉L♯の構造体のxグラム頭尾領域にあるか否かを判断する(ステップS4640)。ない場合(ステップS4640:No)、第(x−y)グラムの圧縮符号マップへのポインタを、アクセス先の葉L♯の構造体のxグラム頭尾領域に格納する(ステップS4641)。
そして、ポインタ分割処理を実行する(ステップS4642)。このポインタ分割処理(ステップS4642)も、ポインタ分割処理(ステップS4635、S4637)と同一処理である。
ポインタ分割処理(ステップS4642)により、xグラム頭尾分割マップへのポインタ群が生成されるため、xグラム頭尾分割マップへの各ポインタについて、ファイル総数α分のオール0のビット列を割り当てる。そして、現在圧縮している対象ファイルFpのファイル番号pのビットを“0”から“1”に更新する(ステップS4643)。そして、ステップS4647に移行する。
また、ステップS4640において、第(x−y)グラムの圧縮符号マップへのポインタが、アクセス先の葉L♯の構造体のxグラム頭尾領域にある場合(ステップS4640:Yes)、ポインタ分割処理を実行する(ステップS4644)。このポインタ分割処理(ステップS4644)も、ポインタ分割処理(ステップS4635、S4637、S4642)と同一処理である。
ポインタ分割処理(ステップS4644)により、xグラム頭尾分割マップへのポインタ群が生成されるため、生成されたxグラム頭尾分割マップへのポインタ群で各xグラム頭尾分割マップを指定する(ステップS4645)。
そして、指定された各xグラム頭尾分割マップにおいて、現在圧縮している対象ファイルFpのファイル番号pのビットを“0”から“1”に更新する(ステップS4646)。そして、ステップS4647に移行する。このように、ステップS4640〜S4646までの処理により、xグラム頭尾分割マップの生成/更新を実行することができる。
また、ステップS4647において、変数yをインクリメントし(ステップS4647)、第(x−y)グラムの圧縮符号マップへのポインタがマップ生成用レジスタにあるか否かを判断する(ステップS4648)。そして、第(x−y)グラムの圧縮符号マップへのポインタがマップ生成用レジスタにある場合(ステップS4648:Yes)、ステップS4640に戻る。
一方、第(x−y)グラムの圧縮符号マップへのポインタがマップ生成用レジスタにない場合(ステップS4648:No)、ステップS4604に移行する。このように、ステップS4647とステップS4648:Noにより、2グラム頭尾分割マップ群まで生成することができる。
図46−4は、図46−3に示したポインタ分割処理(ステップS4635、S4637、S4642、S4644)の詳細な処理手順を示すフローチャートである。まず、分割対象ポインタを設定する(ステップS4651)。たとえば、2分割に設定されている場合、第(x−y)グラムの圧縮符号マップへのポインタとアクセス先の葉L♯の構造体に格納されている圧縮符号マップへのポインタのうちいずれか一方のポインタを分割対象ポインタに設定する。また、4分割に設定されている場合、両ポインタを分割対象ポインタに設定する。
そして、未選択の分割対象ポインタがあるか否かを判断する(ステップS4652)。未選択の分割対象ポインタがある場合(ステップS4652:Yes)、未選択の分割対象ポインタを1つ選択する(ステップS4653)。そして、選択された分割対象ポインタを参照して、符号種別が“1”か“0”かを判断する(ステップS4654)。
“1”である場合(ステップS4654:1)、選択された分割対象ポインタに含まれているアドレス値を上位5ビットと下位5ビットに分割し(ステップS4655)、ステップS4652に戻る。一方、ステップS4654において、符号種別が“0”である場合(ステップS4654:0)、選択された分割対象ポインタに含まれているアドレス値から上下区分(先頭2ビット)を特定する(ステップS4656)。そして、残余ビットを上位4ビットと下位4ビットに分割して(ステップS4657)、ステップS4652に戻る。
ステップS4652において、未選択の分割対象ポインタがない場合(ステップS4652:No)、2グラムの分割マップへのポインタを生成する(ステップS4658)。具体的には、2分割の場合は、非分割対象ポインタと分割された上位ビットとを組み合わせ、また、非分割対象ポインタと分割された下位ビットとを組み合わせることで、2種類の分割マップへのポインタを生成することができる。
また、4分割の場合、一方の分割対象ポインタから分割された上位ビットおよび下位ビットと、他方の分割対象ポインタから分割された上位ビットおよび下位ビットとを組み合わせることで、4種類の分割マップへのポインタを生成することができる。
図46−5は、グラム数xの変動処理を示すフローチャートである。まず、図46−3の2グラムの分割マップ生成処理(ステップS4603)に先立って、グラム数xをx=1とし、最大値xmaxをxmax=Xとする(ステップS4661)。つぎに、マップ生成用レジスタに、ポインタX個分の空き領域を設定する(ステップS4662)。
そして、マップ生成用レジスタのx番目の領域にポインタが格納されているか否かを判断する(ステップS4663)。x番目の領域にポインタが格納されている場合(ステップS4663:Yes)、x=Xであるか否かを判断する(ステップS4664)。x=Xである場合(ステップS4664:Yes)、ステップS4663に戻る。x=Xでない場合(ステップS4664:No)、xをインクリメントして(ステップS4665)、ステップS4663に戻る。これにより、X番目の領域にまでポインタが格納されているか否かを判断することができる。
一方、ステップS4663において、x番目の領域にポインタが格納されていない場合(ステップS4663:No)、対象ファイルFpの圧縮処理が終了したか否かを判断する(ステップS4666)。終了していない場合(ステップS4666:No)、ステップS4663に戻る。一方、終了した場合(ステップS4666:Yes)、グラム数xの変動処理を終了する。
図32に戻って、圧縮符号マップ圧縮部3208は、図39−2に示した更新後の圧縮符号マップ群Msを圧縮する機能を有する。圧縮符号マップ圧縮部3208は、ビット列圧縮部3281と非圧縮領域設定部3282とを有する。ビット列圧縮部3281は、圧縮符号マップ群Msの各ビット列を圧縮する。ファイル総数αが膨大(たとえば、α=10000)である場合、ビット列において“0”が連続する箇所も多くなる。また、出現頻度が高い文字については、これとは逆に“1”が連続する箇所が多くなる。したがって、文字の出現率に応じた出現率領域を設定する。出現率領域とは、出現率の範囲である。出現率領域に応じて、圧縮符号マップ群Msの圧縮用ハフマン木を割り当てる。
図47−1は、出現率と出現率領域との関係を示す説明図である。出現率が0〜100%の範囲とすると、図47−1に示したように、A〜E領域およびA´〜E´領域に領域分割することができる。したがって、A〜E領域およびA´〜E´領域で特定された出現率領域に応じて、圧縮符号マップ群Msの圧縮用ハフマン木を圧縮パターンとして割り当てる。
図47−2は、出現率領域別の圧縮パターンを有する圧縮パターンテーブルを示す説明図である。出現率領域は、図28に示したように、葉L♯の構造体の第4領域2804に格納されているため、葉L♯の構造体が指定されることで、圧縮パターンテーブルを参照して、圧縮パターンが特定されることとなる。なお、A領域およびA´領域は、非圧縮のため、圧縮パターンとなるハフマン木は存在しない。
図48−1は、B領域およびB´領域の場合の圧縮パターンを示す説明図である。圧縮パターン4201は、16種のハフマン木となる。
図48−2は、C領域およびC´領域の場合の圧縮パターンを示す説明図である。圧縮パターン4202は、16種+1種のハフマン木となる。圧縮パターン4202では、B領域およびB´領域に比べて、“0”が連続する箇所または“1”が連続する箇所が確率的に多くなる。したがって、16ビット連続して値が“0”であるビット列に、符号語“00”が割り当てられている。
図48−3は、D領域およびD´領域の場合の圧縮パターンを示す説明図である。圧縮パターン4203は、16種+1種のハフマン木となる。圧縮パターン4203では、C領域およびC´領域に比べて、“0”が連続する箇所または“1”が連続する箇所が確率的に多くなる。したがって、32ビット連続して値が“0”であるビット列に、符号語“00”が割り当てられている。
図48−4は、E領域およびE´領域の場合の圧縮パターンを示す説明図である。圧縮パターン4204は、16種+1種のハフマン木となる。圧縮パターン4204では、D領域およびD´領域に比べて、“0”が連続する箇所または“1”が連続する箇所が確率的に多くなる。したがって、64ビット連続して値が“0”であるビット列に、符号語“00”が割り当てられている。このように、出現率領域に応じて、文字コードが存在しないことを意味する“0”の連続数が増加するため、文字コードの出現率に応じて圧縮符号マップMsの圧縮効率の向上を図ることができる。
図49は、圧縮された圧縮符号マップ群msを示す説明図である。圧縮符号マップ群msでは、葉L♯の構造体に対応するレコードごとに、図48−1〜図48−4に示した圧縮パターン4201〜4204を用いてビット列が圧縮されている。
また、図32において、非圧縮領域設定部3282は、圧縮符号マップ群Msにおいて非圧縮領域を設定する機能を有する。具体的には、対象ファイルFの追加が検出された場合、ファイル番号pが連続するように採番する。そして、文字コードごとに文字コードの追加ファイルでの存否をあらわすビット列を、対象ファイル群Fsのファイル番号pと連続するように配列した非圧縮領域を設定する。
たとえば、対象ファイルFが後から追加されると、追加された対象ファイルFβを圧縮する際、圧縮符号マップ群Msにも文字の存否を示すビット列を追加する必要がある。圧縮前の圧縮符号マップ群Msでは、ファイル番号:1〜αのビット列については、圧縮パターン4201〜4204により圧縮されてレコードごとに符号長が異なる。すなわち、可変長であるため圧縮領域となる。
したがって、図49に示したように、圧縮符号列の先頭(ファイル番号α側)は整列するが末尾が整列しない。仮に、ビット列の並びを、ファイル番号:1〜αの順に、アドレス項目側から割り当てると、追加ファイルのビット列は、圧縮符号列の末尾側に挿入することとなり、圧縮符号列と追加ファイルのビット列とが非連続となってしまう。したがって、あらかじめ、圧縮符号マップ群Msの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Fsのファイル番号pの降順に配列しておく。そして、非圧縮領域設定部3282は、圧縮符号マップ群Msにおいて、圧縮符号マップへのポインタと圧縮領域との間に非圧縮領域を設定する。
図50は、圧縮された圧縮符号マップ群msへのビット列追加を示す説明図である。図50に示すように、ファイル番号;1〜αのうち圧縮符号列が整列する側にファイル番号:αのビットを割り当てる。これにより、ファイル番号;1〜αのビット列を圧縮した場合でも、非圧縮のファイル番号:α+1〜βのビット列を挿入しても、ファイル番号順にビット列を連続させることができる。これにより、ファイル番号;1〜αのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルの絞込みを正確に実行することができる。なお、追加ファイルのビット列の追加は、圧縮符号マップ更新部3207により実行される。
図51は、削除マップを示す説明図である。対象ファイル群Fs(対象ファイルF1〜Fβ)の中には、途中で削除される対象ファイルもある。削除された対象ファイルFを絞り込みによって得ても無駄であるため、削除マップMdを用意しておく。削除マップMdは、ファイル総数α(追加があった場合はβ)分のビット列であり、初期状態では、すべて“1”に設定されている。
削除された対象ファイルがあった場合、削除マップMd中、削除された対象ファイルのファイル番号:dのビットの値を“1”→“0”に変更する。削除マップMdは対象ファイルの絞込み時に利用される。このため、圧縮符号マップ群Msにおいて、ある文字コードについてある対象ファイルFのビットが“1”であっても、削除マップMdでは“0”の場合、検索対象外となる。なお、削除マップMdの更新は、圧縮符号マップ更新部3207により実行される。
(圧縮符号マップ圧縮処理手順)
つぎに、圧縮符号マップ圧縮処理について説明する。圧縮符号マップ圧縮処理は、図39−2に示したように、圧縮符号マップ生成処理にて生成された圧縮符号マップ群Msの圧縮領域であるファイル番号1〜αまでのビット列を圧縮する処理である。具体的には、図52−2に示した圧縮パターンテーブルと図48−1〜図48−4に示した圧縮パターン(圧縮符号マップ用ハフマン木)を用いて、圧縮符号マップ群Msの圧縮領域のビット列を圧縮する。これにより、図49に示したような圧縮後の圧縮符号マップ群Msを得ることができる。以下、圧縮符号マップ圧縮処理手順について説明する。
図52は、圧縮符号マップ圧縮処理手順を示すフローチャートである。図52において、まず、圧縮符号マップ群Msにおいて、未選択のアドレス(圧縮符号マップへのポインタ)があるか否かを判断する(ステップS5201)。未選択のアドレスがある場合(ステップS5201:Yes)、未選択のアドレスを選択して葉L♯の構造体にアクセスし(ステップS5202)、葉L♯の構造体の第1領域2801の中から文字コードを取得する(ステップS5203)。そして、アクセス先の葉L♯の構造体の第4領域2804から出現率領域を取得することで、取得された文字コードの出現率領域を特定する(ステップS5204)。
このあと、図47−2の圧縮パターンテーブルを参照して、特定された出現率領域が非圧縮領域(たとえば、出現率領域A、A’)であるか否かを判断する(ステップS5205)。非圧縮領域である場合(ステップS5205:Yes)、ステップS5201に戻り、つぎのアドレスを選択する。
一方、非圧縮領域でない場合(ステップS5205:No)、特定された出現率領域により、図48−1〜図48−4に示した圧縮符号マップ用ハフマン木の中から該当する圧縮符号マップ用ハフマン木を選択する(ステップS5206)。また、圧縮対象となる取得文字コードの圧縮符号マップMにおける圧縮領域のビット列を抽出する(ステップS5207)。
そして、取得文字コードの出現率が50%以上であるか否かを判断する(ステップS5208)。出現率とは、上述したように、対象ファイル群Fs内の全ファイル数を母集団(分母)とし、当該文字コードまたは予約語が存在するファイル数を分子とした値である。出現率領域は、出現率に応じて決められているため(図47−1を参照)、出現率領域がA〜Eである場合、取得文字コードの出現率が50%以上でないと判断する。一方、出現率領域がA’〜E’である場合、取得文字コードの出現率が50%以上であると判断する。
そして、出現率が50%以上である場合(ステップS5208:Yes)、圧縮効率を上げるために、ステップS5206で抽出されたビット列を反転する(ステップS5209)。たとえば、抽出されたビット列が“1110”である場合、“0001”にして、“0”の個数を増やす。そして、反転後のビット列を、ステップS5206で選択したハフマン木を用いて圧縮して(ステップS5210)、ステップS5201に戻る。このように、ビット列反転をおこなうことで、出現率領域A’〜E’の圧縮符号マップ用ハフマン木を用意する必要がないため、省メモリ化を図ることができる。
一方、ステップS5208において、出現率が50%以上でない場合(ステップS5208:No)、ビット列反転(ステップS5209)をおこなうことなく、ステップS5207で抽出されたビット列を、ステップS5206で選択したハフマン木を用いて圧縮して(ステップS5210)、ステップS5201に戻る。また、ステップS5201において、未選択のアドレスがない場合(ステップS5201:No)、圧縮符号マップ圧縮処理を終了する。
このような圧縮符号マップ圧縮処理手順により、アドレスごとにファイル番号1〜αのビット列が、出現率に応じて圧縮され、図49に示したような圧縮後の圧縮符号マップ群Msを得ることができる。
なお、圧縮符号マップ圧縮処理手順は、上述した連続グラム分割マップ群やxグラム頭尾分割マップ群にも適用される。なお、連続グラム分割マップ群やxグラム頭尾分割マップ群は、2つの文字コードにより特定されるマップであるが、圧縮符号マップ圧縮処理に適用する場合は、たとえば、2グラム目の文字コードの出現率を用いて圧縮すればよい。なお、そのほかの圧縮処理の内容は同一であるため、省略する。これにより、連続グラム分割マップ群やxグラム頭尾分割マップ群のビット列も圧縮することができ、省メモリ化を図ることができる。
(追加ファイル圧縮処理手順)
つぎに、追加ファイル圧縮処理について説明する。追加ファイル圧縮処理は、あとから対象ファイルFが追加された場合、追加分の対象ファイルについての文字コード(厳密には圧縮符号マップへのポインタとなるアドレス)ごとに追加分の対象ファイルのビット列を追加する処理である。具体的には、ファイル番号α+1〜βまでのビット列を追加することで、図50に示したような圧縮符号マップ群Msが得られる。以下、圧縮後の圧縮符号マップ群Msを例に挙げて追加ファイル圧縮処理手順について説明する。なお、β個の追加分の対象ファイルについては、ファイル番号α+1〜βを付加しておく。
図53は、追加ファイル圧縮処理手順を示すフローチャートである。まず、追加ファイル数β分のマップ領域を設定する(ステップS5301)。具体的には、圧縮符号マップ群Msのアドレスとファイル番号1〜αの圧縮符号列との間に追加ファイルのビット列(初期値は“0”)を確保する。
つぎに、ファイル番号pをp=α+1とし(ステップS5302)、対象ファイルFpを読み込む(ステップS5303)。そして、圧縮処理を実行する(ステップS5304)。圧縮処理(ステップS5304)は、図35および図36に示した圧縮処理(ステップS3503)と同じ処理である。圧縮処理(ステップS5304)のあと、ファイル番号pをインクリメントし(ステップS5305)、p>βであるか否かを判断する(ステップS5306)。p>βでない場合(ステップS5306:No)、ステップS5303に戻る。一方、p>βである場合(ステップS5306:Yes)、追加ファイル圧縮処理を終了する。
(削除マップ更新処理手順)
つぎに、削除マップ更新処理について説明する。削除マップ更新処理は、図51に示した削除マップMd内の選択されたビットを更新する処理である。
図54は、削除マップ更新処理手順を示すフローチャートである。まず、ファイル削除があるまで待ちうけ(ステップS5401:No)、ファイル削除があった場合(ステップS5401:Yes)、削除された対象ファイルのファイル番号dを検出する(ステップS5402)。そして、削除マップMdにおけるファイル番号dのビットを、“1”から“0”に更新する(ステップS5403)。これにより、削除マップ更新処理を終了する。削除マップMdは対象ファイルの絞込み時に利用される。このため、圧縮符号マップ群Msにおいて、ある文字コードについてある対象ファイルのビットが“1”であっても、削除マップMdでは“0”の場合、検索対象外となる。
<圧縮ファイルfの検索と対象ファイルFへの伸長までの処理の流れ>
図55は、圧縮ファイルfの検索と対象ファイルFへの伸長までの処理の流れを示す説明図である。図55では、まず、(7)情報検索装置が、検索キーワードの入力を受け付けて読み込む。つぎに、(8)無節点ハフマン木H2により、検索キーワードを構成する各文字の文字コードを圧縮することで、圧縮符号群が得られる。そして、(9)各圧縮符号に対応する葉L♯の構造体から圧縮符号マップへのポインタを取得して圧縮符号マップ群Msにアクセスする。
なお、圧縮符号マップ群Msの場合、(7)検索キーワードの読み込みを契機として、圧縮符号マップ用ハフマン木により圧縮符号マップ群Msを伸長し、圧縮符号マップ群Msを生成しておく。
(10)そして、各文字コードの圧縮符号マップMのビット列をファイル番号pごとにAND演算することで、検索キーワードを構成する文字をすべて含む圧縮ファイルf(特定圧縮ファイルft)を特定する。これにより、圧縮ファイル群fsのまま検索キーワードについてファイル絞込みをおこなうことができる。
(11)最後に、(9)で特定圧縮ファイルftを無節点ハフマン木H2を用いて伸長し、伸長された対象ファイルF(伸長ファイルFt)内の文字列と検索キーワードとを照合し、ヒットした文字列を強調表示などの文字列置換をする。これにより、圧縮ファイルfの伸長と検索キーワードの一致判定(照合)を一連の処理で実行することができる。
(機能的構成4)
図56は、実施の形態にかかる情報検索装置の機能的構成を示すブロック図である。図56では、図55に示した処理(7)〜(11)を実行する機能的構成を示している。図56において、情報検索装置5100は、入力部5101と、検索キーワード圧縮部5102と、圧縮符号マップ伸長部5103と、圧縮符号マップ特定部5104と、圧縮ファイル特定部5105と、照合フラグ設定部5106と、抽出部5107と、葉特定部5108と、伸長コード格納部5109と、照合部5110と、文字列置換部5111と、出力部5112と、生成部5134とを備える。
入力部5101〜出力部5112,生成部5134は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。また、伸長バッファ5120は、図4に示したRAM403、磁気ディスク405、光ディスク407などの記憶媒体によりその機能を実現する。なお、情報検索装置5100は、上述した情報処理装置500と同一装置であってもよく、異なる装置であってもよい。
まず、入力部5101は、検索キーワードの入力を受け付ける機能を有する。入力部5101は、図55に示した(7)に相当する機能である。入力部5101では、検索キーワードのほか、前方一致検索や後方一致検索といった検索条件も受け付ける。
図57は、対象ファイルFp内の記述例を示す説明図である。(A)は、対象ファイルFp内の見出しデータである。ここでは、例として「国際通貨基金」という見出し語を示している。見出しデータでは、カンマで文字列を区切るようにルール化されている。
(B)は、対象ファイルFp内の本文データである。カッコや読点により、単語が区切られている。このように、カンマやカッコ、読点、スペースなど文字列の連続性を遮断するような文字を特殊文字と称す。この特殊文字を連続グラム分割マップ群に利用することで、前方一致検索や後方一致検索を効率的に実行することができる。
すなわち、入力部5101では、検索キーワードのほかに、前方一致検索が指定された場合、検索キーワードの先頭に特殊文字の文字コードを自動付与する。たとえば、(A)の例では、検索キーワードが「国際通貨基金」である場合、先頭にカンマを自動付与して、「,国際通貨基金」とすることで、前方一致検索の効率化を図ることができる。また、(B)の例では、検索キーワードが「国際通貨基金」である場合、先頭に右カッコを自動付与して、「)国際通貨基金」とすることで、前方一致検索の効率化を図ることができる。
同様に、検索キーワードのほかに、後方一致検索が指定された場合、検索キーワードの末尾に特殊文字の文字コードを自動付与する。たとえば、(A)の例では、検索キーワードが「国際通貨基金」である場合、末尾にカンマを自動付与して、「国際通貨基金,」とすることで、後方一致検索の効率化を図ることができる。また、(B)の例では、検索キーワードが「国際通貨基金」である場合、末尾に読点を自動付与して、「国際通貨基金。」とすることで、後方一致検索の効率化を図ることができる。
また、特殊文字が複数種類あるが、どの特殊文字を利用すればよいかは検索の種類に応じて自動設定することとすればよい。たとえば、見出し語検索の場合は、特殊文字をカンマのみとし、全文検索の場合は、カッコや読点、スペース、墨付カッコとすればよい。なお、特殊文字を仮想的な「区切り文字」と見なし、UTF16の外字コードを割当て、連続グラム分割マップの高位文字コードに割付ける。そして、検索キーワードの文字列の先頭や末尾に「区切り文字」を付与することにより、効率的に前方一致検索や後方一致検索を実現することができる。
図58は、検索条件が指定されたときの検索キーワードへの特殊文字の自動付与結果を示す説明図である。ここでは、検索キーワードを「人形芝居」とし、特殊文字をカンマとしている。(A)は前方一致検索の場合の自動付与を示しており、(B)は後方一致の場合の自動付与を示している。
検索キーワード圧縮部5102は、検索キーワードを圧縮する機能を有する。検索キーワード圧縮部5102は、図55に示した(8)に相当する機能である。具体的には、図34に示したように、検索キーワード(圧縮対象文字コード列)を順次圧縮する。すなわち、文字構造体530を参照して、入力部5101によって入力された検索キーワードを構成する文字コードごとに葉L♯へのポインタを特定する。そして、特定された葉L♯へのポインタにより葉L♯の構造体にアクセスして、当該アクセス先の葉L♯の構造体に格納されている圧縮符号を抽出する。圧縮された検索キーワードの圧縮符号群は、圧縮バッファに格納される。
圧縮符号マップ伸長部5103は、圧縮処理された圧縮符号マップ群Msを伸長する機能を有する。具体的には、検索キーワードの入力を契機として、圧縮に用いた圧縮符号マップ用ハフマン木により、圧縮符号マップ群Msにおけるファイル番号1〜αの圧縮符号マップの圧縮符号列(図49、図50を参照)をハフマン伸長する。これにより、圧縮符号マップ群Msを復元することができる。また、連続グラム分割マップやxグラム頭尾分割マップも圧縮されていれば同じようにハフマン伸長することができる。
生成部5134は、xグラムの検索キーワード内の連続する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する機能を有する。
具体的には、たとえば、先行文字コードの圧縮符号マップへのポインタと後続文字コードの圧縮符号マップへのポインタとを用いる。たとえば、2分割に設定されている場合、いずれか一方のポインタを上位ビットと下位ビットに分割する。非分割である他方の圧縮符号マップへのポインタに分割されたポインタをそれぞれ連結する。これにより、2種類の組み合わせポインタを生成することができる。
また、4分割に設定されている場合、先行文字コードの圧縮符号マップへのポインタと後続文字コードの圧縮符号マップへのポインタとを、それぞれ上位ビットと下位ビットに分割する。分割された4個のビット列から2つ選択して連結することで、4種類の組み合わせポインタを生成することができる。
たとえば、検索キーワードの圧縮時にアクセスした葉L♯の構造体の連続グラム領域に、圧縮符号マップへのポインタが格納されている場合、その圧縮符号マップへのポインタと葉L♯の構造体の圧縮符号マップへのポインタとを組み合わせて、連続グラム分割マップへのポインタ群を組み合わせポインタとして生成する。具体的な生成処理は、図46−4に示したポインタ分割処理と同一処理である。
組み合わせポインタについては、検索キーワードを構成する先頭文字コードの圧縮符号マップへのポインタと末尾文字コードの圧縮符号マップへのポインタについても同様に生成される。
たとえば、検索キーワードの圧縮時にアクセスした葉L♯の構造体のgグラム頭尾領域(gは検索キーワードのグラム数)に、圧縮符号マップへのポインタが格納されている場合、その圧縮符号マップへのポインタと葉L♯の構造体の圧縮符号マップへのポインタとを組み合わせて、gグラム頭尾分割マップへのポインタ群を生成する。具体的な生成処理は、図46−4に示したポインタ分割処理と同一処理である。
圧縮符号マップ特定部5104は、圧縮符号マップ群Msのうち、検索キーワードを構成する文字の文字コードに対応する圧縮符号マップMを特定する機能を有する。圧縮符号マップ特定部5104は、図55に示した(9)に相当する機能である。圧縮符号マップ特定部5104では、検索キーワードの圧縮時にアクセスした葉L♯の構造体に格納されている圧縮符号マップへのポインタを取得する。そして、取得した圧縮符号マップへのポインタにより、該当する圧縮符号マップMにアクセスする。
また、圧縮符号マップ特定部5104は、2グラムの分割マップ群(連続グラム分割マップ群およびxグラム頭尾分割マップ群)のうち、検索キーワードを構成する文字の文字コードに対応する2グラムの分割マップ群を特定する。具体的には、生成部5134によって生成された組み合わせポインタにより、2グラムの分割マップ群を指定することで、2グラムの分割マップ群を特定する。そして、連続グラム分割マップ群とgグラム頭尾分割マップ群を指定することで、連続グラム分割マップ群とgグラム頭尾分割マップ群とを特定することができる。
圧縮ファイル特定部5105は、圧縮符号マップ特定部5104によって特定された圧縮符号マップMを参照することにより、検索キーワード圧縮部5102によって圧縮された圧縮符号群をすべて含む圧縮ファイルを圧縮ファイル群から特定する機能を有する。圧縮ファイル特定部5105は、図55に示した(10)に相当する機能である。圧縮ファイル特定部5105では、圧縮ファイルごとに、検索キーワードを構成する各文字コードのビットをAND演算する。そして、AND演算結果が“1”であれば、そのファイル番号pの圧縮ファイルfpに検索キーワードを構成する文字がすべて含まれていることとなる。これにより、圧縮ファイル群Fsの絞込みをおこなうことができる。
図59は、圧縮ファイル特定部5105による特定例を示す説明図である。図59では、例として検索キーワードを『人形芝居』とする。そして、圧縮符号マップ特定部5104によって特定された圧縮符号マップMを圧縮符号マップM1〜M4とする。また、図59では、理解の容易のため、ファイル数αをα=4とし、追加ファイル数βをβ=0とする。
圧縮符号マップM1〜M4のビット列および削除マップMdをファイル番号ごとの列でAND演算する。ファイル番号1の列は、『人』,『形』,『芝』,『居』がすべて存在しないため、AND演算結果は“0”である。ファイル番号2の列は、『人』,『形』,『芝』,『居』がすべて存在するが、対象ファイルF2は削除されているため、削除マップMdのビットが“0”である。したがって、AND演算結果は“0”である。
ファイル番号3の列は、『人』,『形』,『芝』,『居』がすべて存在し、かつ、削除マップMdのビットが“1”である。したがって、AND演算結果は“1”である。ファイル番号4の列は、『形』,『芝』,『居』が存在しないため、AND演算結果は“0”である。これにより、図59の例では、圧縮ファイルf1〜f4のうち、ファイル番号3の圧縮ファイルf3に絞り込まれることとなる。なお、圧縮ファイル特定部5105によって特定された圧縮ファイルf内の圧縮符号列は、CPU401により、内部のレジスタや外部のバッファに書き込まれる。
また、圧縮ファイル特定部5105は、圧縮符号マップ特定部5104によって特定された分割マップ群を参照することにより、検索キーワード圧縮部5102によって圧縮された圧縮符号群をすべて含む圧縮ファイルを圧縮ファイル群から特定する。具体的には、たとえば、圧縮符号マップ特定部5104により、gグラムの検索キーワードを構成する連続グラムについて、連続グラム分割マップ群が特定され、gグラムの検索キーワードの頭尾グラムについて、gグラム頭尾分割マップ群が特定される。
したがって、圧縮ファイル特定部5105では、連続グラム分割マップ群およびgグラム頭尾分割マップ群についてAND演算を実行する。AND演算結果が“1”であれば、そのファイル番号pの圧縮ファイルfpに、gグラムの検索キーワードを構成する連続2グラムの文字コード列と、頭尾の文字コードの組み合わせを満足する文字コード列が含まれていることとなる。
図60−1〜図60−3は、5グラムの検索キーワード「人形芝居」について、連続グラム分割マップ群と5グラム頭尾分割マップ群とを用いた圧縮ファイルfの特定例を示す説明図である。図60−1は、検索条件を指定していない部分一致検索の場合の絞込みである。図60−1では、ファイル番号3の圧縮ファイルf3に、「人」と「形」とが連続する2グラムの文字コード、「形」と「芝」の上位分割文字コードとが連続する2グラムの文字コード、「芝」の文字コード、「芝」の下位分割文字コードと「居」の文字コードとが連続する2グラムの文字コード、先頭が「人」で末尾が「居」である5グラムの文字コードが含まれていることがわかる。
したがって、図9に示した1グラムでの絞り込みに比べて、文字列「人形芝居」が記述されている可能性が非常に高いこととなる。なお、図60−1では部分一致検索の場合の絞込みについて説明したが、図60−2は、特殊文字をカンマとした場合の前方一致検索の場合の絞込みの例であり、図60−3は、特殊文字をカンマとした場合の後方一致検索の場合の絞込みの例である。
また、図56に戻って、照合フラグ設定部5106は、圧縮ファイル特定部5105により葉L♯の構造体にアクセスされた際、葉L♯の構造体内の照合フラグをONに設定する機能を有する。照合フラグは、その葉L♯の構造体に対応する文字コードが伸長バッファ5120に格納された場合、対象となる検索キーワード内の文字コードと照合するか否かを判断するフラグである。照合フラグがONの場合は照合し、OFFの場合は照合しない。デフォルトはOFFであり、検索結果が得られると、OFFにリセットされる。これにより、照合フラグがONである葉L♯の構造体の文字コードのみと照合をおこなうことができ、無駄な照合を回避することができる。
抽出部5107は、圧縮ファイル特定部5105によって特定された圧縮ファイルfの中から葉L♯へのポインタと同じ長さとなる圧縮符号列を抽出する機能を有する。抽出された圧縮符号列は、根の構造体セルC(1,1)に格納されている葉L♯へのポインタ群のいずれかのポインタに一致することとなる。
葉特定部5108は、抽出部5107によって抽出された圧縮符号列に基づいて、無節点ハフマン木H2により葉L♯の構造体を特定する機能を有する。具体的には、たとえば、抽出された圧縮符号を含む枝番号に一致する葉L♯へのポインタを、無節点ハフマン木H2の根の構造体セルC(1,1)の中から探索する。そして、探索された場合、ポイント先となる葉L♯の構造体に1パスでアクセスする。
たとえば、葉L1の構造体に含まれている圧縮符号は“0000”、葉L1をポイントする葉L1へのポインタL1P(1)〜L1P(256)は、“000000000000”〜“000011111111”である。したがって、抽出された圧縮符号“0000”を含む葉L♯へのポインタが、“000000000000”〜“000011111111”である場合、そのポイント先である葉L1の構造体にアクセスする。
伸長コード格納部5109は、葉特定部5108によってアクセスされた葉L♯の構造体に格納されている文字コード等を抽出して、伸長コードとして伸長バッファ5120に格納する機能を有する。具体的には、たとえば、上記の例では、葉L1の構造体にアクセスしているため、葉L1の構造体の第3領域2803に格納されている文字コードe1を伸長コードとして抽出する。そして、抽出された伸長コードを伸長バッファ5120に書き込む。ここで、伸長コードの格納の具体例について説明する。
図61−1〜図61−5は、抽出部5107、葉特定部5108および伸長コード格納部5109による2分枝の無節点ハフマン木H2を用いた伸長処理の具体例を示す説明図である。図61−1〜図61−5では、図33−2に示した圧縮符号列を伸長する例を示している。伸長処理では、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。抽出した圧縮符号を、1パス(1枝分のアクセス)で2分枝の無節点ハフマン木H2の根から探索する。そして、アクセスした葉L♯の構造体に格納されている文字コードを読み出して伸長バッファ5120に格納する。
圧縮符号を抽出するため、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を“0xFFF00000”とする。このマスクパターンは先頭12ビットが“1”であり、後続の20ビットが“0”のビット列である。
CPU401はビットアドレス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ビットのビット列を対象ビット列として抽出する。対象ビット列の抽出後はレジスタをクリアする。
なお、図61−1〜図61−5において、メモリには図34に示した圧縮符号列が保持されているものとする。また、図61−1〜図61−5のメモリ内のブロックは1バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。
図61−1は、初期状態((A)の状態)を示している。(A)では、ビットアドレス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”が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
図27に示したように、無節点ハフマン木H2の根の構造体セルC(1,1)には、葉L1〜L1295へのポインタが格納されている。したがって、無節点ハフマン木H2の根の構造体セルC(1,1)の中から、抽出された対象ビット列“110001001100”と一致する葉L♯へのポインタ(枝番号)を探索する。この場合、葉L691へのポインタ群の中の1つと一致するため、該当する葉L691へのポインタを読み出して、葉L691の構造体にアクセスする。
葉L3421の構造体には、文字コード“0xBA4E”(文字:「人」に相当)が格納されているため、当該文字コード“0xBA4E”を抽出して伸長バッファ5120に格納する。また、葉L691の構造体には、文字コード“0xBA4E”の圧縮符号長leg(=12ビット)も格納されているため、文字コード“0xBA4E”の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=0+12=12となる。
図61−2は、図61−1に示した(A)の状態からレジスタをバイトオフセットbios分シフトした場合の伸長処理((B)の状態)を示している。前回である(A)のビットアドレスabiはabi=0、圧縮符号長legは12ビットであるため、(B)のビットアドレスabiはabi=12ビットとなる。
また、このビットアドレスabi=12により、バイトオフセットbyos=1、ビットオフセットbios=4となる。バイトオフセットbyos=1により、メモリに保持されている圧縮符号列のうち先頭1バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタにセットする。
また、ビットオフセットbios=4により、マスクパターンは、“0x0FFF0000”である。したがって、レジスタにセットされた圧縮符号列とマスクパターン“0x0FFF0000”を論理積(AND)演算することにより、AND結果が得られる。
また、ビットオフセットbios=4により、レジスタシフト数rsは、rs=32−m―bios=32−12−4=16となる。したがって、レジスタ内のAND結果を末尾方向に16ビット分シフトする。このシフトによりレジスタには、“0000010001001010”が残されるため、末尾12ビットを対象ビット列として抽出する。この場合は、“010001001010”が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
図27に示したように、無節点ハフマン木H2の根の構造体セルC(1,1)には、葉L1〜L1295へのポインタが格納されている。したがって、無節点ハフマン木H2の根の構造体セルC(1,1)の中から、抽出された対象ビット列“010001001010”と一致する葉L♯へのポインタ(枝番号)を探索する。この場合、対象ビット列“010001001010”が葉L24へのポインタ群の中の1つと一致するため、該当する葉L24へのポインタを読み出して、葉L24の構造体にアクセスする。
葉L24の構造体には、文字コード“0x625F”(文字:「形」に相当)が格納されているため、当該文字コード“0x625F”を抽出して伸長バッファ5120に格納する。また、葉L24の構造体には、文字コード“0x625F”の圧縮符号長leg(=8ビット)も格納されているため、文字コード“0x625F”の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=12+8=20となる。
図61−3は、図61−2に示した(B)の状態からレジスタをバイトオフセットbios分シフトした場合の伸長処理((C)の状態)を示している。前回である(B)のビットアドレスabiはabi=12、圧縮符号長legは8ビットであるため、(C)のビットアドレスabiはabi=20ビットとなる。
また、このビットアドレスabi=20により、バイトオフセットbyos=2、ビットオフセットbios=4となる。バイトオフセットbyos=2により、メモリに保持されている圧縮符号列のうち先頭2バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタにセットする。
また、ビットオフセットbios=4により、マスクパターンは、“0x0FFF0000”である。したがって、レジスタにセットされた圧縮符号列とマスクパターン“0x0FFF0000”を論理積(AND)演算することにより、AND結果が得られる。
また、ビットオフセットbios=4により、レジスタシフト数rsは、rs=32−m―bios=32−12−4=16となる。したがって、レジスタ内のAND結果を末尾方向に16ビット分シフトする。このシフトによりレジスタには、“0000101001000000”が残されるため、末尾12ビットを対象ビット列として抽出する。この場合は、“101001000000”が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
図27に示したように、無節点ハフマン木H2の根の構造体セルC(1,1)には、葉L1〜L1295へのポインタが格納されている。したがって、無節点ハフマン木H2の根の構造体セルC(1,1)の中から、抽出された対象ビット列“101001000000”と一致する葉L♯へのポインタ(枝番号)を探索する。この場合、対象ビット列“101001000000”が葉L167へのポインタ群の中の1つと一致するため、該当する葉L167へのポインタを読み出して、葉L167の構造体にアクセスする。
葉L167の構造体には、分割文字コード“0x9D”が格納されているため、当該文字コード“0x9D”を抽出して伸長バッファ5120に格納する。また、葉L167の構造体には、文字コード“0x9D”の圧縮符号長leg(=12ビット)も格納されているため、文字コード“0x9D”の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=20+12=32となる。
図61−4は、図61−3に示した(C)の状態からレジスタをバイトオフセットbios分シフトした場合の伸長処理((D)の状態)を示している。前回である(C)のビットアドレスabiはabi=20、圧縮符号長legは12ビットであるため、(D)のビットアドレスabiはabi=32ビットとなる。
また、このビットアドレスabi=32により、バイトオフセットbyos=4、ビットオフセットbios=0となる。バイトオフセットbyos=4により、メモリに保持されている圧縮符号列のうち先頭4バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタにセットする。
また、ビットオフセットbios=0により、マスクパターンは、“0xFFF00000”である。したがって、レジスタにセットされた圧縮符号列とマスクパターン“0xFFF00000”を論理積(AND)演算することにより、AND結果が得られる。
また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32−m―bios=32−12−0=20となる。したがって、レジスタ内のAND結果を末尾方向に20ビット分シフトする。このシフトによりレジスタには、“101000110101”が残されるため、末尾12ビットを対象ビット列として抽出する。この場合は、“101000110101”が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
図27に示したように、無節点ハフマン木H2の根の構造体セルC(1,1)には、葉L1〜L1295へのポインタが格納されている。したがって、無節点ハフマン木H2の根の構造体セルC(1,1)の中から、抽出された対象ビット列“101001000000”と一致する葉L♯へのポインタ(枝番号)を探索する。この場合、対象ビット列“101001000000”が葉L156へのポインタ群の中の一つと一致するため、葉L156へのポインタを読み出して、葉L156の構造体にアクセスする。
葉L156の構造体には、分割文字コード“0x82”が格納されているため、当該文字コード“0x82”を抽出して伸長バッファ5120に格納する。また、葉L156の構造体には、文字コード“0x82”の圧縮符号長leg(=12ビット)も格納されているため、文字コード“0x82”の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=32+12=44となる。
図61−5は、図61−4に示した(D)の状態からレジスタをバイトオフセットbios分シフトした場合の伸長処理((E)の状態)を示している。前回である(D)のビットアドレスabiはabi=32、圧縮符号長legは12ビットであるため、(E)のビットアドレスabiはabi=44ビットとなる。
また、このビットアドレスabi=44により、バイトオフセットbyos=5、ビットオフセットbios=4となる。バイトオフセットbyos=5により、メモリに保持されている圧縮符号列のうち先頭5バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタにセットする。
また、ビットオフセットbios=4により、マスクパターンは、“0x0FFF0000”である。したがって、レジスタにセットされた圧縮符号列とマスクパターン“0x0FFF0000”を論理積(AND)演算することにより、AND結果が得られる。
また、ビットオフセットbios=4により、レジスタシフト数rsは、rs=32−m―bios=32−12−4=16となる。したがって、レジスタ内のAND結果を末尾方向に16ビット分シフトする。このシフトによりレジスタには、“0000011110111111”が残されるため、末尾12ビットを対象ビット列として抽出する。この場合は、“011110111111”が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
図27に示したように、無節点ハフマン木H2の根の構造体セルC(1,1)には、葉L1〜L1295へのポインタが格納されている。したがって、無節点ハフマン木H2の根の構造体セルC(1,1)の中から、抽出された対象ビット列“011110111111”と一致する葉L♯へのポインタ(枝番号)を探索する。この場合、対象ビット列“011110111111”が葉L79へのポインタと一致するため、葉L79へのポインタを読み出して、葉L79の構造体にアクセスする。
葉L79の構造体には、文字コード“0x455C”が格納されているため、当該文字コード“0x6F30”を抽出して伸長バッファ5120に格納する。また、葉L79の構造体には、文字コード“0x455C”の圧縮符号長leg(=8ビット)も格納されているため、文字コード“0x455C”の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=44+8=52となる。
また、図56において、照合部5110は、検索キーワードの文字コード列と伸長バッファ5120に格納された伸長コード列とを照合する機能を有する。照合部5110は、伸長コード格納部5109により伸長コードが順次伸長バッファ5120に格納される都度、当該伸長コードに対し照合をおこなう。これにより、伸長処理と同時に検索キーワードとの照合を実行することができ、高速処理を実現することができる。
照合部5110では、具体的には、たとえば、伸長バッファ5120に順次格納される伸長コードのうち、照合フラグがONである伸長コードについて照合をおこなう。照合対象となる文字コードは、検索キーワード内の文字コードである。伸長コードとの照合対象は、伸長コードの伸長コード長により決定する。たとえば、伸長コードの伸長コード長が16ビットである場合、同じように、16ビットの文字コードが照合対象となる。一方、伸長コード長が8ビットである場合、同じように、8ビットの文字コード(分割文字コード)が照合対象となる。なお、照合対象の開始位置は、検索キーワードの先頭である。
照合部5110は、照合一致する都度、照合対象となる文字コードを、後続の文字コードにシフトする。途中で、照合不一致の伸長コードが出現したり、照合フラグOFFの伸長コードが出現したりすると、検索キーワードの先頭から照合をやり直す。
文字列置換部5111は、照合部5110により検索キーワードと一致する文字列が照合された場合、照合された文字列を強調表示するように文字列置換する機能を有する。具体的には、たとえば、照合一致された伸長コード列を、強調表示するためのタグで挟み込む。これにより、検索結果を表示する際に、照合一致された伸長コード列に相当する文字列が強調表示されることとなる。
出力部5112は、伸長バッファ5120に格納されている伸長コード列をファイル化して、伸長後の対象ファイル(伸長ファイル)として出力する。出力された伸長ファイルは、記憶装置に記憶されたり、ディスプレイに表示される。ディスプレイに表示される場合、検索キーワードに一致する伸長コード列は、文字列置換部5111により、強調表示するタグに挟まれているため、ディスプレイ表示時に強調表示される。
図62−1〜図62−3は、照合処理の具体例を示す説明図である。入力バッファ5400には検索キーワード『人形芝居』の文字コード列である“BA4E625F9D82455C”が格納されているものとする。
図62−1の(A)において、伸長バッファ5120に文字『人』の文字コード“0xBA4E”が伸長コードとして格納された場合、伸長コード“0xBA4E”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はONであるため、伸長コード“0xBA4E”について照合をおこなう。
また、伸長コード“0xBA4E”は16ビット文字コードであるため、照合対象となる文字コードは、先頭から16ビット分の文字コードとなる。本例の場合、文字『人』の文字コード“0xBA4E”である。この場合、伸長コードと照合対象の文字コードは一致するため、次に伸長バッファ5120に格納される伸長コードについて同様の照合処理をおこなう。
(B)において、伸長バッファ5120に文字『形』の文字コード“0x625F”が伸長コードとして格納された場合、伸長コード“0x625F”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はONであるため、伸長コード“0x625F”について照合をおこなう。
また、伸長コード“0x625F”は16ビット文字コードであるため、照合対象となる文字コードは、文字コード“0xBA4E”から16ビット分シフトした文字コードとなる。本例の場合、文字『形』の文字コード“0x625F”である。この場合、伸長コードと照合対象の文字コードは一致するため、次に伸長バッファ5120に格納される伸長コードについて同様の照合処理をおこなう。
(C)において、伸長バッファ5120に文字『芝』の分割文字コード“0x9D”が伸長コードとして格納された場合、伸長コード“0x9D”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はONであるため、伸長コード“0x9D”について照合をおこなう。
また、伸長コード“0x9D”は8ビット文字コードであるため、照合対象となる文字コードは、文字コード“0x625F”から8ビット分シフトした文字コードとなる。本例の場合、分割文字コード“0x9D”である。この場合、伸長コードと照合対象の文字コードは一致するため、次に伸長バッファ5120に格納される伸長コードについて同様の照合処理をおこなう。
(D)において、伸長バッファ5120に文字『芝』の分割文字コード“0x82”が伸長コードとして格納された場合、伸長コード“0x82”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はONであるため、伸長コード“0x82”について照合をおこなう。
また、伸長コード“0x82”は8ビット文字コードであるため、照合対象となる文字コードは、文字コード“0x9D”から8ビット分シフトした文字コードとなる。本例の場合、分割文字コード“0x82”である。この場合、伸長コードと照合対象の文字コードは一致するため、次に伸長バッファ5120に格納される伸長コードについて同様の照合処理をおこなう。
(E)において、伸長バッファ5120に文字『居』の文字コード“0x455C”が伸長コードとして格納された場合、伸長コード“0x455C”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はONであるため、伸長コード“0x455C”について照合をおこなう。
また、伸長コード“0x455C”は16ビット文字コードであるため、照合対象となる文字コードは、文字コード“0x82”から16ビット分シフトした文字コードとなる。本例の場合、文字『居』の文字コード“0x455C”である。この場合、伸長コードと照合対象の文字コードは一致する。
そして、検索キーワード内の文字コード列をすべて照合し、一致したため、伸長バッファ5120内の伸長コード列“BA4E625F9D82455C”を強調表示用のタグで挟み込む。これにより、検索結果を表示する際に、検索キーワードに一致する文字列として強調表示することができる。
図62−2では、照合一致の途中で不一致となる文字コードの出現例1を示している。(F)では、図62−1の(A),(B)のように、伸長コード“BA4E”、“625F”が照合一致しているものとする。
(F)において、伸長バッファ5120に文字『町』の文字コード“0x3A75”が伸長コードとして格納された場合、伸長コード“0x3A75”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はOFFであるため、伸長コード“0x3A75”について照合をおこなわない。また、照合フラグがOFFのため、照合対象となる文字コードは先頭に戻される。
(G)において、伸長バッファ5120に文字『は』の文字コード“0x6F30”が伸長コードとして格納された場合、伸長コード“0x6F30”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はOFFであるため、伸長コード“0x6F30”について照合をおこなわない。また、照合フラグがOFFのため、照合対象となる文字コードは先頭に戻される。このように、照合フラグがOFFである伸長コードについては照合がおこなわれないため、無駄な照合処理を防止することができ、照合処理の高速化を実現することができる。
図62−3では、照合一致の途中で不一致となる文字コードの出現例2を示している。(H)では、図62−1の(A),(B)のように、伸長コード“BA4E”、“625F”が照合一致しているものとする。
(H)において、伸長バッファ5120に2回目の文字『人』の文字コード“0xBA4E”が伸長コードとして格納された場合、伸長コード“0xBA4E”を格納する葉L♯の構造体の照合フラグのON/OFFを判断する。この場合はONであるため、伸長コード“0xBA4E”について照合をおこなう。
また、伸長コード“0xBA4E”(2回目)は16ビット文字コードであるため、照合対象となる文字コードは、文字コード“0x625F”から16ビット分シフトした文字コードとなる。本例の場合、文字『形』の文字コード“0x625F”である。この場合、伸長コードと照合対象の文字コードは不一致であるが、伸長コード“0xBA4E”(2回目)についての照合フラグはONであり、また、16ビット文字コードである。
したがって、(I)において、照合対象を検索キーワードの先頭から16ビットの文字コード“0xBA4E”と照合する。この場合、一致するため、次に伸長バッファ5120に格納される伸長コードについて照合処理をおこなうことになる。
(検索キーワード圧縮処理手順)
図63は、検索キーワード圧縮処理手順を示すフローチャートである。まず、入力部5101が、検索キーワードが入力されるのを待ち受ける(ステップS6301:No)。そして、検索キーワードが入力された場合(ステップS6301:Yes)、入力部5101が、検索キーワードを単字分解する(ステップS6302)。そして、入力部5101により検索条件が指定されたか否かを判断する(ステップS6303)。
検索条件が指定されていない場合(ステップS6303:No)、部分一致検索となるため、ステップS6307に移行する。一方、検索条件が指定されている場合(ステップS6303:Yes)、指定された検索条件が前方一致検索であるか後方一致検索であるかを判断する(ステップS6304)。前方一致検索である場合(ステップS6304:前方一致)、特殊文字を検索キーワードの先頭に追加して(ステップS6305)、ステップS6307に移行する。一方、後方一致検索である場合(ステップS6304:後方一致)、特殊文字を検索キーワードの末尾に追加して(ステップS6306)、ステップS6307に移行する。
そして、ステップS6307において、、検索キーワード圧縮部5102が、無節点ハフマン木H2により検索キーワードを構成する各文字をハフマン圧縮する圧縮処理を実行する(ステップS6307)。圧縮処理(ステップS6307)は、図34および図36〜図38に示した処理と同一であるため、説明を省略する。これにより、検索キーワード圧縮処理を終了する。
(ファイル絞込み処理手順)
図64−1は、圧縮ファイル特定部5105によるファイル絞込み処理手順を示すフローチャートである。まず、検索キーワードが所定グラム数以上であるか否かを判断する(ステップS6411)。所定グラム数は、あらかじめ設定しておく。検索キーワードが所定グラム数以上でない場合(ステップS6411:No)、1グラムでのファイル絞込み処理を実行する(ステップS6412)。一方、所定グラム数以上である場合(ステップS6411:Yes)、複数グラムでのファイル絞込み処理を実行する(ステップS6413)。
図64−2は、図64−1に示した1グラムでのファイル絞込み処理(ステップS6412)の詳細な処理手順を示すフローチャートである。まず、図63に示した圧縮処理(ステップS6307)において、葉L♯の構造体へのアクセスがあったか否かを判断する(ステップS6421)。葉L♯への構造体へのアクセスがあった場合(ステップS6421:Yes)、葉L♯の構造体の照合フラグをONにする(ステップS6422)。そして、葉L♯の構造体から圧縮符号マップへのポインタと出現率領域を取得する(ステップS6423)。
つぎに、取得した圧縮符号マップへのポインタにより圧縮符号マップにアクセスし(ステップS6424)、アクセス先の圧縮符号マップ伸長処理を実行して(ステップS6425)、ステップS6421に戻る。アクセス先の圧縮符号マップ伸長処理(ステップS6425)については後述する。ステップS6421において、葉L♯の構造体へのアクセスがない場合(ステップS6421:No)、図63に示した検索キーワード圧縮処理が終了したか否かを判断する(ステップS6426)。
終了していない場合(ステップS6426:No)、ステップS6421に戻る。一方、終了した場合(ステップS6426:Yes)、図59に示したように、AND演算による圧縮ファイルの特定を実行する(ステップS6427)。このように特定された圧縮ファイルを「特定圧縮ファイルft」と称す。これにより、1グラムでのファイル絞込み処理を終了する。
(アクセス先の圧縮符号マップ伸長処理手順)
図64−3は、図64−2に示したアクセス先の圧縮符号マップ伸長処理(ステップS6425)の詳細な処理手順を示すフローチャートである。まず、図52−2に示した圧縮パターンテーブルを参照して、ステップS6423で取得した出現率領域が非圧縮領域であるか否かを判断する(ステップS6431)。非圧縮領域である場合(ステップS6431:Yes)、伸長処理を実行せずに、ステップS6421に戻る。
一方、非圧縮領域でない場合(ステップS6431:No)、出現率領域に該当する圧縮符号マップ用ハフマン木を選択する(ステップS6432)。そして、ステップS6423で取得した圧縮符号マップへのポインタによるアクセス先の圧縮符号マップMを、選択された圧縮符号マップ用ハフマン木によりハフマン伸長する(ステップS6433)。そして、出現率が50%以上であるかを判断する(ステップS6434)。
具体的には、出現率領域は、出現率に応じて決められているため(図52−1を参照)、出現率領域がA〜Eである場合、取得文字コードの出現率が50%以上でないと判断する。一方、出現率領域がA’〜E’である場合、取得文字コードの出現率が50%以上であると判断する。
そして、出現率が50%以上である場合(ステップS6434:Yes)、ステップS5209にて反転させられているため、ステップS6433で伸長されたビット列を反転する(ステップS6435)。これにより、元のビット列に戻ることとなる。
一方、ステップS6434において、出現率が50%以上でない場合(ステップS6434:No)、ビット列反転(ステップS6435)をおこなうことなく、ステップS6421に戻る。
このようなアクセス先の圧縮符号マップ伸長処理(ステップS6425)により、検索キーワードを構成する文字についての圧縮符号マップ内の圧縮符号列のみ伸長することができるため、検索に必要な圧縮符号列の伸長のみでよく、伸長効率の向上を図ることができる。
図64−4〜図64−6は、図64−1に示した複数グラムでのファイル絞込み処理(ステップS6413)の詳細な処理手順を示すフローチャートである。まず、図64−1において、グラム数カウンタgをg=0にし(ステップS6441)、図63に示した圧縮処理(ステップS6307)において、検索キーワードの先頭グラムとなる葉L♯の構造体へのアクセスを待ち受ける(ステップS6442:No)。
葉L♯への構造体へのアクセスがあった場合(ステップS6442:Yes)、グラム数カウンタgをインクリメントし(ステップS6443)、先頭グラムの葉L♯の構造体の照合フラグをONにする(ステップS6444)。そして、先頭グラムの葉L♯の構造体から圧縮符号マップへのポインタを抽出し、マップ生成用レジスタに格納する(ステップS6445)。
図64−5において、後続グラムの葉L♯の構造体へのアクセスを待ち受け(ステップS6451:No)、後続グラムの葉L♯の構造体へのアクセスがあった場合(ステップS6451:Yes)、グラム数カウンタgをインクリメントし(ステップS6452)、後続グラムの葉L♯の構造体から後続グラムの圧縮符号マップへのポインタを抽出して、マップ生成用レジスタに格納する(ステップS6453)。
そして、後続グラムの葉L♯の構造体の連続グラム領域において、先行グラムの圧縮符号マップへのポインタ、すなわち、先にマップ生成用レジスタに格納した圧縮符号マップへのポインタと一致するポインタを検索する(ステップS6454)。一致するポインタが後続グラムの葉L♯の構造体の連続グラム領域になかった場合(ステップS6455:No)、ステップS6451に戻る。一方、一致するポインタがあった場合(ステップS6455:Yes)、後続グラムの葉L♯の構造体の照合フラグをONにする(ステップS6456)。そして、後続グラムの葉L♯の構造体の出現率領域を取得し(ステップS6457)、ポインタ分割処理を実行する(ステップS6458)。
ポインタ分割処理(ステップS6458)は、図46−4に示したポインタ分割処理と同一処理となるため、説明を省略する。ポインタ分割処理(ステップS6458)により、先行グラムの圧縮符号マップへのポインタと後続グラムの圧縮符号マップへのポインタから連続グラム分割マップへのポインタ群が生成される。したがって、生成された連続グラム分割マップへのポインタ群により、該当する連続グラム分割マップ群を指定する(ステップS6459)。
そして、ステップS6457で取得した後続グラムの葉L♯の構造体の出現率領域を用いて、アクセス先の連続グラム分割マップ伸長処理を実行する(ステップS6460)。アクセス先の連続グラム分割マップ伸長処理(ステップS6460)の詳細については、図64−3に示した処理手順と同一であるため省略する。
このようなアクセス先の連続グラム分割マップ伸長処理(ステップS6460)により、検索キーワードを構成する文字についての連続グラム分割マップ内の圧縮符号列のみ伸長することができるため、検索に必要な圧縮符号列の伸長のみでよく、伸長効率の向上を図ることができる。
図64−6において、後続グラムは検索キーワードの末尾グラムであるか否かを判断する(ステップS6461)。末尾グラムでない場合(ステップS6461:No)、図64−5のステップS6451に戻る。これにより、末尾グラムが出現するまで、検索キーワード内の2連続グラムについて、連続グラム分割マップへのポインタ群を生成することができる。
ステップS6461において、末尾グラムであると判断された場合(ステップS6461:Yes)、末尾となる後続グラムの葉L♯の構造体のgグラム頭尾領域を検索する(ステップS6462)。末尾となる後続グラムの葉L♯の構造体のgグラム頭尾領域に、圧縮符号マップへのポインタがあるか否かを判断する(ステップS6463)。末尾となる後続グラムの葉L♯の構造体のgグラム頭尾領域に、圧縮符号マップへのポインタがない場合(ステップS6463:No)、ステップS6469に移行する。この場合、gグラム頭尾分割マップへのポインタ群が生成されないため、gグラム頭尾分割マップを用いた絞込みができなくなり、連続グラム分割マップを用いた絞込みとなる。
また、末尾となる後続グラムの葉L♯の構造体のgグラム頭尾領域に、圧縮符号マップへのポインタがある場合(ステップS6463:Yes)、当該圧縮符号マップへのポインタと、検索キーワードの先頭グラムの圧縮符号マップへのポインタとが一致するか否かを判断する(ステップS6464)。不一致である場合(ステップS6464:No)、ステップS6469に移行する。この場合、gグラム頭尾分割マップへのポインタ群が生成されないため、gグラム頭尾分割マップを用いた絞込みができなくなり、連続グラム分割マップを用いた絞込みとなる。
一方、一致する場合(ステップS6464:Yes)、末尾となる後続グラムの葉L♯の構造体から出現率領域を取得して(ステップS6465)、ポインタ分割処理を実行する(ステップS6466)。
ポインタ分割処理(ステップS6466)は、図46−4に示したポインタ分割処理と同一処理となるため、説明を省略する。ポインタ分割処理(ステップS6466)により、先頭グラムの圧縮符号マップへのポインタと末尾グラムの圧縮符号マップへのポインタからgグラム頭尾分割マップへのポインタ群が生成される。したがって、生成されたgグラム頭尾分割マップへのポインタ群により、該当するgグラム頭尾分割マップ群を指定する(ステップS6467)。
そして、ステップS6465で取得した後続グラムの葉L♯の構造体の出現率領域を用いて、アクセス先のgグラム頭尾分割マップ伸長処理を実行する(ステップS6468)。アクセス先のgグラム頭尾分割マップ伸長処理(ステップS6468)の詳細については、図64−3に示した処理手順と同一であるため省略する。
そして、最後に、図61−1〜図61−3に示したように、ステップS6460で得られた連続グラム分割マップ群とステップS6468で得られたgグラム頭尾分割マップ群とのAND演算処理を実行して圧縮ファイルを特定する(ステップS6469)。このように特定された圧縮ファイルも「特定圧縮ファイルft」となる。これにより、複数グラムでのファイル絞込み処理を終了する。
(伸長処理手順)
図65は、特定圧縮ファイル伸長処理手順を示すフローチャートである。まず、未処理の特定圧縮ファイルがあるか否かを判断する(ステップS6501)。未処理の特定圧縮ファイルがある場合(ステップS6501:Yes)、未処理の特定圧縮ファイルftを1つ選択し(ステップS6502)、選択された特定圧縮ファイルftをオープンする(ステップS6503)。そして、伸長処理を実行する(ステップS6504)。伸長処理(ステップS6504)の詳細については後述する。そして、選択された特定圧縮ファイルftをクローズする(ステップS6505)。
つぎに、選択された特定圧縮ファイルftにおいて、ヒットしたか否かを判断する(ステップS6506)。具体的には、検索キーワードと一致する文字コード列があったか否かを判断する。ヒットした場合(ステップS6506:Yes)、特定圧縮ファイルftを伸長した対象ファイルF内に検索キーワードと一致する文字コード列が存在することとなり、伸長バッファ5120内のデータをファイル出力する(ステップS6507)。ヒットしなかった場合(ステップS6506:No)、ステップS6508に移行する。
これにより、特定圧縮ファイルftから伸長された対象ファイルFを得ることができる。このあと、伸長バッファ5120をクリアして(ステップS6508)、ステップS6501に戻る。一方、ステップS6501において、未処理の特定圧縮ファイルftがない場合(ステップS6501:No)、特定圧縮ファイル伸長処理を終了する。
(伸長処理手順)
図66−1および図66−2は、無節点ハフマン木H2を用いた伸長処理手順を示すフローチャートである。図66−1において、まず、ビットアドレスabiをabi=0とし(ステップS6611)、バイトオフセットbyosを算出し(ステップS6612)、ビットオフセットbiosを算出する(ステップS6613)。そして、バイトオフセットbyosの位置からの圧縮符号列をレジスタにセットする(ステップS6614)。
つぎに、マスクパターン“0xFFF00000”をビットオフセットbios分、末尾方向にシフトして(ステップS6615)、レジスタにセットされた圧縮符号列とのAND演算をおこなう(ステップS6616)。このあと、レジスタシフト数rsを算出して(ステップS6617)、AND演算後のレジスタをレジスタシフト数rs分、末尾にシフトする(ステップS6618)。
ステップS6618のあと、図66−2において、シフト後のレジスタから末尾m(m=12)ビットを対象ビット列として抽出する(ステップS6621)。つぎに、無節点ハフマン木H2の根の構造体セルC(1,1)から枝番号となる葉L♯へのポインタを特定し(ステップS6622)、ポイント先となる葉L♯の構造体に1パスでアクセスする(ステップS6623)。そして、アクセス先の葉L♯の構造体から文字コードを抽出し(ステップS6624)、抽出された文字コードを伸長バッファ5120に書き込む(ステップS6625)。
また、葉L♯の構造体から圧縮符号長legを抽出し(ステップS6626)、ビットアドレスabiを更新する(ステップS6627)。このあと、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断する(ステップS6628)。たとえば、バイトオフセットbyosに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合(ステップS6628:Yes)、図66−1のステップS6612に戻る。一方、圧縮符号列がない場合(ステップS6628:No)、一連の伸長処理を終了する。
このような伸長処理により、圧縮符号列からmビット単位で圧縮符号を抽出することができ、さらに、無節点ハフマン木H2の根の構造体セルC(1,1)にアクセスすることで、該当する枝番号となる葉L♯へのポインタを特定することができる。そして、アクセス先となる葉L♯の構造体から文字コードを抽出することで、圧縮符号を伸長する。このように、無節点ハフマン木H2は、内部節点を有していないため、葉L♯へのポインタが特定されれば、1パスで葉L♯の構造体にアクセスすることができ、伸長速度の高速化を図ることができる。
(照合処理手順)
図67−1および図67−2は、照合処理手順を示すフローチャートである。まず、図67−1において、図65のステップS6503における特定圧縮ファイルftのオープンが検出されるまで待ち受け(ステップS6711:No)、特定圧縮ファイルftのオープンが検出された場合(ステップS6711:Yes)、C=0、S=0に設定する(ステップS6712)。Cは、伸長バッファ5120内の現在位置であり、Sは、検索キーワードを保持している入力バッファ5400内の現在位置である。
そして、図66−2のステップS6623におけるポイント先となる葉L♯の構造体へのアクセスがあったか否かを判断する(ステップS6713)。アクセスがない場合(ステップS6713:No)、図65のステップS6505において特定圧縮ファイルがクローズしたか否かを判断する(ステップS6714)。クローズしていない場合(ステップS6714:No)、ステップS6713に戻る。クローズした場合(ステップS6714:Yes)、照合処理を終了する。
一方、葉L♯の構造体にアクセスがあった場合(ステップS6713:Yes)、アクセス先の葉L♯の構造体内の照合フラグがONであるか否かを判断する(ステップS6715)。ONでない場合(ステップS6715:No)、今回伸長バッファ5120に格納された伸長コード(アクセス先の葉L♯の構造体内の文字コードに一致)とは照合をおこなわないため、伸長バッファ5120内の現在位置Cに、今回伸長バッファ5120に格納された伸長コードの伸長コード長Lcを加算することで、現在位置Cを更新する(ステップS6716)。これにより、再度、現在位置Cから照合をおこなうことができる。
このあと、入力バッファ5400内の現在位置SをS=0、開始フラグFsをFs=0、開始フラグFs=1になったときの伸長バッファ5120の現在位置CsをCs=0にして(ステップS6717)、ステップS6713に戻る。なお、開始フラグFsとは、検索キーワードの先頭文字の文字コードが一致したときに立てる(Fs=1にする)フラグである。Csはそのときの現在位置Cである。これにより、図62−2に示したような照合処理をおこなうことができる。一方、ステップS6715において、照合フラグがONである場合(ステップS6715:Yes)、図67−2のステップS6721に移行する。
図67−2において、照合対象を設定する(ステップS6721)。具体的には、検索キーワードの文字コード列のうち、現在位置Cから今回格納された伸長コードの文字コード長分の文字コードを、伸長コードとの照合対象に設定する。
そして、位置Sからの伸長コードと位置Cからの照合対象の文字コードとを照合(一致判定)する(ステップS6722)。一致する場合(ステップS6722:Yes)、開始フラグFsがFs=1であるか否かを判断する(ステップS6723)。Fs=1である場合(ステップS6723:Yes)、ステップS6726に移行する。一方、Fs=1でない場合(ステップS6723:No)、開始フラグFsをFs=1にし(ステップS6724)、Cs=Cに設定する(ステップS6725)。これにより、検索キーワードの先頭の文字コードと一致した伸長コードの位置を記憶することができる。
ステップS6726において、入力バッファ5400内の現在位置Sに今回伸長バッファ5120に格納された伸長コードの伸長コード長Lcを加算することで、現在位置Sを更新する(ステップS6726)。そして、S=Lsであるか否かを判断する(ステップS6727)。Lsは検索キーワードの文字コード長である。すなわち、現在位置Sが検索キーワードの末尾であるか否かを判断する。S=Lsである場合(ステップS6727:Yes)、検索キーワードと一致する文字列が伸長バッファ5120から得られたため、当該伸長コード列を文字列置換する(ステップS6728)。
このあと、入力バッファ5400内の現在位置SをS=0、開始フラグFsをFs=0、開始フラグFs=1になったときの伸長バッファ5120の現在位置CsをCs=0にする(ステップS6729)。そして、伸長バッファ5120内の現在位置Cを文字列置換後の最後尾に設定する(ステップS6730)。これにより、図62−1に示したような照合処理をおこなうことができる。このあと、ステップS6713に戻る。
また、ステップS6727において、S=Lsでない場合(ステップS6727:No)、伸長コード列の長さが検索キーワードの文字コード長に到達していないため、ステップS6728〜S6730を実行せずに、ステップS6713に戻る。
また、ステップS6722において、位置Sからの伸長コードと位置Cからの照合対象の文字コードとが不一致である場合(ステップS6722:No)、伸長バッファ5120での現在位置CをC=Csとし、入力バッファ5400での現在位置SをS=0にする(ステップS6731)。そして、ステップS6722と同様、照合対象を設定する(ステップS6732)。具体的には、検索キーワードの文字コード列のうち、現在位置C(C=Cs)から今回格納された伸長コードの文字コード長分の文字コードを、伸長コードとの照合対象に設定する。これにより、図62−3に示したような照合処理をおこなうことができる。
このあと、ステップS6722と同様、位置Sからの伸長コードと位置Cからの照合対象の文字コードとを照合(一致判定)する(ステップS6733)。一致する場合(ステップS6733:Yes)、ステップS6723に移行する。
一方、一致しない場合(ステップS6733:No)、入力バッファ5400内の現在位置S(S=0)に今回伸長バッファ5120に格納された伸長コードの伸長コード長Lcを加算することで、現在位置Sを更新する(ステップS6734)。このあと、開始フラグFsをFs=0、CsをCs=0にして(ステップS6735)、ステップS6713に移行する。
このような照合処理により、伸長処理が終了してから照合するのではなく、伸長処理をしながら検索キーワードとの照合をおこなうことができ、照合処理の高速化を実現することができる。
なお、上述した実施の形態では、グラム数ごとにxグラム頭尾分割マップ群を生成することとしたが、2〜Xグラムまでのグラム数を包含する頭尾分割マップ群としてもよい。この場合、頭尾分割マップ群の数を削減することができるため、省メモリ化を図ることができる。
なお、この場合、検索キーワードのグラム数ごとに頭尾分割マップ群を用いた絞込みができないこととなる。たとえば、検索キーワード「東京都」について、ある対象ファイルFpに、「東京」、「京都」、「東都」といった連字が存在する場合、それぞれの連字の連続グラム分割マップ群および「東都」の頭尾分割マップ群により、対象ファイルFpに「東京都」が存在しない場合でも特定圧縮ファイルftになる。このような検索ノイズを回避するため、間引き処理をおこなう。
図68は、間引き処理を示す説明図である。間引き処理では、ポインタ分割処理において、各文字コードの圧縮符号マップへのポインタのアドレス値を間引いて、結合する。すなわち、2グラムの高位文字コードどうしの圧縮符号マップへのポインタを結合すると、結合したアドレス値が20ビットとなる。間引き処理では、3グラム以上の場合でも、各文字の圧縮符号マップへのポインタのアドレス値を間引いて、合計で20ビットとなるように設定する。
図68の(A)は、3グラムの文字コード列「東京都」の間引き前の状態を示しており、(B)は、間引き後の状態を示している。図68では、先頭の「東」は上位3ビット、真ん中の「京」は上位4ビット、末尾の「都」は上位3ビット間引いて、20ビットとする。このあと、上述したように、間引き後のポインタ列について、上位5ビットどうし、上位5ビットと下位5ビット、下位5ビットと上位5ビット、下位5ビットどうしで分割をおこない、「東」、「京」、「都」を網羅する間引き分割マップ群を生成する。
図69は、間引き分割マップ群を用いた圧縮ファイル特定例を示す説明図である。このように、間引き分割マップ群を生成することで、検索ノイズの低減化を図ることができる。
以上説明したように、本実施の形態によれば、文字種を約1300に削減することでマップのサイズ縮小を図ることができる。また、文字種の削減により、無節点ハフマン木H2を生成することができる。この無節点ハフマン木H2を用いて圧縮伸長をおこなうことにより、12ビット(つまり、1文字)をまとめて1回で判定することができ、圧縮処理や伸長処理の高速化を実現することができる。
また、圧縮処理と圧縮符号マップ生成処理とをハフマン木探索で共通化することで、圧縮処理と連動して、圧縮符号マップ群Msの生成を並列実行することができる。したがって、プログラムステップと走行ステップの短縮化を図ることができ、対象ファイルFsの圧縮処理と圧縮符号マップ群Msの生成処理との高速化を図ることができる。また、出現頻度が低い低位文字コードは8ビットの分割文字コードに分割して圧縮処理が実行されるため、分割文字コードについても圧縮処理と連動して圧縮符号マップ群Msを生成することができる。
圧縮符号マップ群Msのほか、さらに、対象ファイル群Fsの圧縮処理と連動して、連続グラム分割マップ群やxグラム頭尾分割マップ群の生成を並列実行するため、プログラムステップと走行ステップの短縮化を図ることができる。したがって、対象ファイルFsの圧縮処理と連続グラム分割マップ群やxグラム頭尾分割マップ群の生成処理との高速化を図ることができる。
また、連続グラムごとに連続グラム分割マップ群を生成することにより、マップサイズの大幅な縮小を図ることができ、かつ、ハッシュ関数の利用に比べ、検索ノイズを減少することができる。同様に、先頭グラムおよび末尾グラムの組み合わせごとにxグラム頭尾分割マップ群を生成することにより、マップサイズの大幅な縮小を図ることができ、かつ、検索ノイズを減少することができる。
また、圧縮符号マップ群Msの圧縮領域となるビット列を、該当する文字の出現率に応じた圧縮率で圧縮することで、圧縮効率の向上を図るとともに、サイズ縮小を図ることができる。また、圧縮符号マップ用ハフマン木4200において、出現率領域に応じて、文字コードが存在しないことを意味する“0”の連続数を多くしている。したがって、文字コードの出現率に応じて圧縮符号マップMsの圧縮効率の向上を図ることができる。
また、圧縮領域となるビット列の配列を先頭からファイル番号pの降順にすることで、対象ファイルが追加されても、ファイル番号の連続性を保持したまま、圧縮領域となるビット列を圧縮することができる。これにより、対象ファイルFの追加機能と圧縮符号マップ群Msの圧縮機能のいずれかを選ぶことなく、両機能を実装することができる。したがって、対象ファイルの追加という自由度の向上と圧縮符号マップ群Msの圧縮というサイズ縮小を実現することができる。
また、対象ファイルFの削除の有無をあらわす削除マップMdを用いることで、圧縮符号マップ群を用いた圧縮ファイルの絞込み時において、削除された対象ファイルを絞り込みから除外することができる。これにより、圧縮ファイルの絞込み精度の向上を図るとともに、伸長処理の高速化を実現することができる。
また、連続グラム分割マップ群およびxグラム頭尾分割マップ群を用いて圧縮ファイル特定(絞込み)を実行することにより、検索ノイズの低減化を図ることができる。たとえば、検索キーワード「東京都」について、ある対象ファイルFpに、「東京」、「京都」といった連字が存在する場合、圧縮符号マップMでは、圧縮ファイルfpが特定圧縮ファイルftになるが、「東○都」といった3グラムの文字列(○は「京」以外の文字)が存在しないかぎり、圧縮ファイルfpが特定圧縮ファイルftにならない。したがって、圧縮ファイル特定(絞込み)の低減化を図ることができる。
また、伸長処理に連動して、検索キーワードとの照合を並列実行することにより、検索キーワードとの一致判定の高速化を実現することができる。すなわち、圧縮ファイルfの伸長中に検索キーワードの一致判定をおこなっているため、圧縮ファイルが伸長された時点で、検索キーワードに一致する伸長コード列があるか否かがわかることとなる。
また、照合に先立って、検索キーワードを構成する文字コードを格納する葉L♯の構造体の照合フラグをONに設定することで、照合処理の際、照合フラグがONである葉L♯の構造体から得られた伸長コードとの照合を回避することができる。したがって、一致しないと分かっている伸長コードとの照合を実行する必要がないため、照合処理の高速化を実現することができる。
なお、上述した実施の形態では、対象ファイル群Fsを圧縮した圧縮ファイルfsの絞込みについて説明したが、非圧縮の対象ファイル群Fsの絞込みにも適用することができる。
なお、本実施の形態で説明した情報処理方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な媒体であってもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータを、
文字コード列が記述されている対象ファイル群を記憶する記憶手段、
前記対象ファイル群の中から選ばれた一の対象ファイル内の連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段、
前記生成手段によって生成された複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の連続グラム分割マップとし、前記記憶手段に記憶するマップ特定手段、
前記マップ特定手段によって特定された複数種類の連続グラム分割マップにおいて、前記連続する2グラムの文字コード列の前記一の対象ファイルでの存否をあらわすビットを更新する更新手段、
として機能させることを特徴とする情報処理プログラム。
(付記2)前記生成手段は、
前記一方の識別情報を2分割して前記他方の識別情報と結合して、2種類の組み合わせ識別情報を生成することを特徴とする付記1に記載の情報処理プログラム。
(付記3)前記生成手段は、
前記先行文字コードの識別情報と前記後続文字コードの識別情報とをそれぞれ2分割して得られた4個の分割識別情報から2つ選んで結合した4種類の組み合わせ識別情報を生成することを特徴とする付記1に記載の情報処理プログラム。
(付記4)コンピュータを、
文字コード列が記述されている対象ファイル群を記憶する記憶手段、
前記対象ファイル群から選ばれた一の対象ファイル内の連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段、
前記生成手段によって生成された複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の頭尾分割マップとして、前記記憶手段に記憶するマップ特定手段、
前記マップ特定手段によって特定された複数種類の頭尾分割マップにおいて、前記複数グラムの文字コード列における前記先頭文字コードおよび前記末尾文字コードの組み合わせの前記一の対象ファイル群での存否をあらわすビットを更新する更新手段、
として機能させることを特徴とする情報処理プログラム。
(付記5)前記生成手段は、
前記一方の識別情報を2分割して前記他方の識別情報と結合して、2種類の組み合わせ識別情報を生成することを特徴とする付記4に記載の情報処理プログラム。
(付記6)前記生成手段は、
前記先頭文字コードの識別情報と前記末尾文字コードの識別情報とをそれぞれ2分割して得られた4個の分割識別情報から2つ選んで結合した4種類の組み合わせ識別情報を生成することを特徴とする付記4に記載の情報処理プログラム。
(付記7)前記生成手段は、
さらに、前記一の対象ファイル内の連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して組み合わせ、複数種類の組み合わせ識別情報を生成し、
前記マップ特定手段は、
前記生成手段によって生成された前記先頭文字コードおよび末尾文字コードの識別情報に基づく複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の頭尾分割マップとして、前記記憶手段に記憶し、
前記更新手段は、
さらに、前記マップ特定手段によって特定された複数種類の頭尾分割マップにおいて、前記複数グラムの文字コード列における前記先頭文字コードおよび前記末尾文字コードの組み合わせの前記一の対象ファイル群での存否をあらわすビットを更新することを特徴とする付記1に記載の情報処理プログラム。
(付記8)前記生成手段は、
さらに、前記一の対象ファイル内の連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの各識別情報のうち、前記一方の識別情報を2分割して前記他方の識別情報と結合して、2種類の組み合わせ識別情報を生成し、
前記マップ特定手段は、
さらに、前記生成手段によって生成された前記先頭文字コードおよび末尾文字コードの識別情報に基づく2種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、2種類の頭尾分割マップとして、前記記憶手段に記憶し、
前記更新手段は、
さらに、前記マップ特定手段によって特定された2種類の頭尾分割マップにおいて、前記複数グラムの文字コード列における前記先頭文字コードおよび前記末尾文字コードの組み合わせの前記一の対象ファイル群での存否をあらわすビットを更新することを特徴とする付記2に記載の情報処理プログラム。
(付記9)前記生成手段は、
さらに、前記一の対象ファイル内の連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの各識別情報のうち、前記先頭文字コードの識別情報と前記末尾文字コードの識別情報とをそれぞれ2分割して得られた4個の分割識別情報から2つ選んで結合した4種類の組み合わせ識別情報を生成し、
前記マップ特定手段は、
さらに、前記生成手段によって生成された前記先頭文字コードおよび末尾文字コードの識別情報に基づく4種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、4種類の頭尾分割マップとして、前記記憶手段に記憶し、
前記更新手段は、
さらに、前記マップ特定手段によって特定された4種類の頭尾分割マップにおいて、前記複数グラムの文字コード列における前記先頭文字コードおよび前記末尾文字コードの組み合わせの前記一の対象ファイル群での存否をあらわすビットを更新することを特徴とする付記3に記載の情報処理プログラム。
(付記10)コンピュータを、
文字コード列が記述されている対象ファイル群と、連続する2グラムの文字コード列ごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の連続グラム分割マップ群と、を記憶する記憶手段、
検索キーワードの入力を受け付ける入力手段、
前記入力手段によって入力された検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段、
前記複数種類の連続グラム分割マップ群の中から、前記生成手段によって生成された複数種類の組み合わせ識別情報が割り当てられている複数種類の連続グラム分割マップを、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定するマップ特定手段、
前記マップ特定手段によって前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定された複数種類の連続グラム分割マップ群に基づいて、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在する対象ファイルを前記対象ファイル群の中から特定するファイル特定手段、
として機能させることを特徴とする情報検索プログラム。
(付記11)前記対象ファイル群は、
用語に関する文字コード列の先頭に特殊な文字コードが記述されており、
前記入力手段は、
前方一致に関する検索条件の指定を受け付け、
前記生成手段は、
前記前方一致に関する検索条件の指定が受け付けられた場合、前記検索キーワードの先頭に前記特殊な文字コード列が追加された追加後の検索キーワードについて、当該追加後の検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成し、
前記ファイル特定手段は、
前記マップ特定手段によって前記追加後の検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定された複数種類の連続グラム分割マップ群に基づいて、前記追加後の検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする付記10に記載の情報検索プログラム。
(付記12)前記対象ファイル群は、
用語に関する文字コード列の末尾に特殊な文字コードが記述されており、
前記入力手段は、
後方一致に関する検索条件の指定を受け付け、
前記生成手段は、
前記後方一致に関する検索条件の指定が受け付けられた場合、前記検索キーワードの末尾に前記特殊な文字コード列が追加された追加後の検索キーワードについて、当該追加後の検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成し、
前記ファイル特定手段は、
前記マップ特定手段によって前記追加後の検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定された複数種類の連続グラム分割マップ群に基づいて、前記追加後の検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする付記10に記載の情報検索プログラム。
(付記13)コンピュータを、
文字コード列が記述されている対象ファイル群と、連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの組み合わせごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の頭尾分割マップ群と、を記憶する記憶手段、
検索キーワードの入力を受け付ける入力手段、
前記入力手段によって入力された検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段、
前記複数種類の頭尾分割マップ群の中から、前記生成手段によって生成された複数種類の組み合わせ識別情報が割り当てられている複数種類の頭尾分割マップを特定するマップ特定手段、
前記マップ特定手段によって特定された複数種類の頭尾分割マップ群に基づいて、前記検索キーワードと同一グラム数であり、かつ、前記先頭文字コードおよび前記末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定するファイル特定手段、
として機能させることを特徴とする情報検索プログラム。
(付記14)前記生成手段は、
前記前方一致に関する検索条件の指定が受け付けられた場合、前記検索キーワードの先頭に前記特殊な文字コード列が追加された追加後の検索キーワードについて、当該追加後の検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成し、
前記ファイル特定手段は、
前記マップ特定手段によって特定された複数種類の頭尾分割マップ群に基づいて、前記追加後の検索キーワードと同一グラム数であり、かつ、前記追加後の検索キーワードでの先頭文字コードおよび末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする付記13に記載の情報検索プログラム。
(付記15)前記対象ファイル群は、
用語に関する文字コード列の末尾に特殊な文字コードが記述されており、
前記入力手段は、
後方一致に関する検索条件の指定を受け付け、
前記生成手段は、
前記後方一致に関する検索条件の指定が受け付けられた場合、前記検索キーワードの末尾に前記特殊な文字コード列が追加された追加後の検索キーワードについて、当該追加後の検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成し、
前記ファイル特定手段は、
前記マップ特定手段によって特定された複数種類の頭尾分割マップ群に基づいて、前記追加後の検索キーワードと同一グラム数であり、かつ、前記追加後の検索キーワードでの先頭文字コードおよび末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする付記13に記載の情報検索プログラム。
(付記16)前記記憶手段は、
さらに、連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの組み合わせごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の頭尾分割マップ群を記憶しており、
前記生成手段は、
さらに、前記検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、前記先頭文字コードおよび前記末尾文字コードに基づく複数種類の組み合わせ識別情報を生成し、
前記マップ特定手段は、
さらに、前記複数種類の頭尾分割マップ群の中から、前記生成手段によって生成された前記先頭文字コードおよび前記末尾文字コードに基づく複数種類の組み合わせ識別情報が割り当てられている複数種類の頭尾分割マップを特定し、
前記ファイル特定手段は、
前記マップ特定手段によって特定された複数種類の連続グラム分割マップ群および複数種類の頭尾分割マップ群に基づいて、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在するとともに、前記検索キーワードと同一グラム数であり、かつ、先頭文字コードおよび末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする付記10に記載の情報検索プログラム。
(付記17)前記生成手段は、
さらに、前記追加後の検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、前記追加後の検索キーワード内の先頭文字コードおよび末尾文字コードに基づく複数種類の組み合わせ識別情報を生成し、
前記ファイル特定手段は、
前記マップ特定手段によって特定された複数種類の連続グラム分割マップ群および複数種類の頭尾分割マップ群に基づいて、前記追加後の検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在するとともに、前記追加後の検索キーワードと同一グラム数であり、かつ、前記追加後の検索キーワードの先頭文字コードおよび末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする付記11に記載の情報検索プログラム。
(付記18)前記生成手段は、
さらに、前記追加後の検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、前記追加後の検索キーワード内の先頭文字コードおよび末尾文字コードに基づく複数種類の組み合わせ識別情報を生成し、
前記ファイル特定手段は、
前記マップ特定手段によって特定された複数種類の連続グラム分割マップ群および複数種類の頭尾分割マップ群に基づいて、前記追加後の検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在するとともに、前記追加後の検索キーワードと同一グラム数であり、かつ、前記追加後の検索キーワードの先頭文字コードおよび末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする付記12に記載の情報検索プログラム。
(付記19)文字コード列が記述されている対象ファイル群を記憶する記憶手段と、
前記対象ファイル群の中から選ばれた一の対象ファイル内の連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段と、
前記生成手段によって生成された複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の連続グラム分割マップとし、前記記憶手段に記憶するマップ特定手段と、
前記マップ特定手段によって特定された複数種類の連続グラム分割マップにおいて、前記連続する2グラムの文字コード列の前記一の対象ファイルでの存否をあらわすビットを更新する更新手段と、
を備えることを特徴とする情報処理装置。
(付記20)文字コード列が記述されている対象ファイル群を記憶する記憶手段と、
前記対象ファイル群から選ばれた一の対象ファイル内の連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段と、
前記生成手段によって生成された複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の頭尾分割マップとして、前記記憶手段に記憶するマップ特定手段と、
前記マップ特定手段によって特定された複数種類の頭尾分割マップにおいて、前記複数グラムの文字コード列における前記先頭文字コードおよび前記末尾文字コードの組み合わせの前記一の対象ファイル群での存否をあらわすビットを更新する更新手段と、
を備えることを特徴とする情報処理装置。
(付記21)文字コード列が記述されている対象ファイル群と、連続する2グラムの文字コード列ごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の連続グラム分割マップ群と、を記憶する記憶手段と、
検索キーワードの入力を受け付ける入力手段と、
前記入力手段によって入力された検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段と、
前記複数種類の連続グラム分割マップ群の中から、前記生成手段によって生成された複数種類の組み合わせ識別情報が割り当てられている複数種類の連続グラム分割マップを、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定するマップ特定手段と、
前記マップ特定手段によって前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定された複数種類の連続グラム分割マップ群に基づいて、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在する対象ファイルを前記対象ファイル群の中から特定するファイル特定手段と、
を備えることを特徴とする情報検索装置。
(付記22)文字コード列が記述されている対象ファイル群と、連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの組み合わせごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の頭尾分割マップ群と、を記憶する記憶手段と、
検索キーワードの入力を受け付ける入力手段と、
前記入力手段によって入力された検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段と、
前記複数種類の頭尾分割マップ群の中から、前記生成手段によって生成された複数種類の組み合わせ識別情報が割り当てられている複数種類の頭尾分割マップを特定するマップ特定手段と、
前記マップ特定手段によって特定された複数種類の頭尾分割マップ群に基づいて、前記検索キーワードと同一グラム数であり、かつ、前記先頭文字コードおよび前記末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定するファイル特定手段と、
を備えることを特徴とする情報検索装置。
500 情報処理装置
501 入力部
502 取得部
503 集計部
504 ソート部
505 分割部
506 分類部
507 算出部
508 ポインタ生成部
509 ポインタ格納部
510 葉生成部
511 文字コード格納部
512 検出部
513 特定部
514 最適化部
515 文字構造体生成部
520 算出結果テーブル
530 文字構造体
600 文字出現頻度集計テーブル
3201 設定部
3202 圧縮対象文字コード探索部
3203 ハフマン木探索部
3204 圧縮符号格納部
3205 検出部
3206 圧縮符号マップ特定部
3207 圧縮符号マップ更新部
3208 圧縮符号マップ圧縮部
3256 生成部
3281 ビット列圧縮部
3282 非圧縮領域設定部
5100 情報検索装置
5101 入力部
5102 検索キーワード圧縮部
5103 圧縮符号マップ伸長部
5104 圧縮符号マップ特定部
5105 圧縮ファイル特定部
5106 照合フラグ設定部
5107 抽出部
5108 葉特定部
5109 伸長コード格納部
5110 照合部
5111 文字列置換部
5112 出力部
5145 生成部

Claims (8)

  1. コンピュータを、
    文字コード列が記述されている対象ファイル群を記憶する記憶手段、
    前記対象ファイル群の中から選ばれた一の対象ファイル内の連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段、
    前記生成手段によって生成された複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の連続グラム分割マップとし、前記記憶手段に記憶するマップ特定手段、
    前記マップ特定手段によって特定された複数種類の連続グラム分割マップにおいて、前記連続する2グラムの文字コード列の前記一の対象ファイルでの存否をあらわすビットを更新する更新手段、
    として機能させることを特徴とする情報処理プログラム。
  2. 前記生成手段は、
    前記一方の識別情報を2分割して前記他方の識別情報と結合して、2種類の組み合わせ識別情報を生成することを特徴とする請求項1に記載の情報処理プログラム。
  3. 前記生成手段は、
    前記先行文字コードの識別情報と前記後続文字コードの識別情報とをそれぞれ2分割して得られた4個の分割識別情報から2つ選んで結合した4種類の組み合わせ識別情報を生成することを特徴とする請求項1に記載の情報処理プログラム。
  4. 前記生成手段は、
    さらに、前記一の対象ファイル内の連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して組み合わせ、複数種類の組み合わせ識別情報を生成し、
    前記マップ特定手段は、
    前記生成手段によって生成された前記先頭文字コードおよび末尾文字コードの識別情報に基づく複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の頭尾分割マップとして、前記記憶手段に記憶し、
    前記更新手段は、
    さらに、前記マップ特定手段によって特定された複数種類の頭尾分割マップにおいて、前記複数グラムの文字コード列における前記先頭文字コードおよび前記末尾文字コードの組み合わせの前記一の対象ファイル群での存否をあらわすビットを更新することを特徴とする請求項1に記載の情報処理プログラム。
  5. コンピュータを、
    文字コード列が記述されている対象ファイル群と、連続する2グラムの文字コード列ごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の連続グラム分割マップ群と、を記憶する記憶手段、
    検索キーワードの入力を受け付ける入力手段、
    前記入力手段によって入力された検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段、
    前記複数種類の連続グラム分割マップ群の中から、前記生成手段によって生成された複数種類の組み合わせ識別情報が割り当てられている複数種類の連続グラム分割マップを、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定するマップ特定手段、
    前記マップ特定手段によって前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定された複数種類の連続グラム分割マップ群に基づいて、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在する対象ファイルを前記対象ファイル群の中から特定するファイル特定手段、
    として機能させることを特徴とする情報検索プログラム。
  6. 前記記憶手段は、
    さらに、連続する複数グラムの文字コード列を構成する先頭文字コードおよび末尾文字コードの組み合わせごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の頭尾分割マップ群を記憶しており、
    前記生成手段は、
    さらに、前記検索キーワード内の先頭文字コードおよび末尾文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、前記先頭文字コードおよび前記末尾文字コードに基づく複数種類の組み合わせ識別情報を生成し、
    前記マップ特定手段は、
    さらに、前記複数種類の頭尾分割マップ群の中から、前記生成手段によって生成された前記先頭文字コードおよび前記末尾文字コードに基づく複数種類の組み合わせ識別情報が割り当てられている複数種類の頭尾分割マップを特定し、
    前記ファイル特定手段は、
    前記マップ特定手段によって特定された複数種類の連続グラム分割マップ群および複数種類の頭尾分割マップ群に基づいて、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在するとともに、前記検索キーワードと同一グラム数であり、かつ、先頭文字コードおよび末尾文字コードが一致する文字コード列が存在する対象ファイルを前記対象ファイル群の中から特定することを特徴とする請求項5に記載の情報検索プログラム。
  7. 文字コード列が記述されている対象ファイル群を記憶する記憶手段と、
    前記対象ファイル群の中から選ばれた一の対象ファイル内の連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段と、
    前記生成手段によって生成された複数種類の組み合わせ識別情報に対して、前記対象ファイル群のファイル数分のビット列をそれぞれ割り当てて、複数種類の連続グラム分割マップとし、前記記憶手段に記憶するマップ特定手段と、
    前記マップ特定手段によって特定された複数種類の連続グラム分割マップにおいて、前記連続する2グラムの文字コード列の前記一の対象ファイルでの存否をあらわすビットを更新する更新手段と、
    を備えることを特徴とする情報処理装置。
  8. 文字コード列が記述されている対象ファイル群と、連続する2グラムの文字コード列ごとに設定された複数種類の組み合わせ識別情報に対して前記対象ファイル群のファイル数分のビット列がそれぞれ割り当てられた複数種類の連続グラム分割マップ群と、を記憶する記憶手段と、
    検索キーワードの入力を受け付ける入力手段と、
    前記入力手段によって入力された検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードの各識別情報のうち、少なくともいずれか一方の識別情報を2分割して前記他方の識別情報と組み合わせ、複数種類の組み合わせ識別情報を生成する生成手段と、
    前記複数種類の連続グラム分割マップ群の中から、前記生成手段によって生成された複数種類の組み合わせ識別情報が割り当てられている複数種類の連続グラム分割マップを、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定するマップ特定手段と、
    前記マップ特定手段によって前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードごとに特定された複数種類の連続グラム分割マップ群に基づいて、前記検索キーワードにおいて連続する2グラムの文字コード列を構成する先行文字コードおよび後続文字コードがすべて存在する対象ファイルを前記対象ファイル群の中から特定するファイル特定手段と、
    を備えることを特徴とする情報検索装置。
JP2009296410A 2009-12-25 2009-12-25 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置 Active JP5418218B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009296410A JP5418218B2 (ja) 2009-12-25 2009-12-25 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置
US12/973,017 US10389378B2 (en) 2009-12-25 2010-12-20 Computer product, information processing apparatus, and information search apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009296410A JP5418218B2 (ja) 2009-12-25 2009-12-25 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置

Publications (2)

Publication Number Publication Date
JP2011138230A JP2011138230A (ja) 2011-07-14
JP5418218B2 true JP5418218B2 (ja) 2014-02-19

Family

ID=44188729

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009296410A Active JP5418218B2 (ja) 2009-12-25 2009-12-25 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置

Country Status (2)

Country Link
US (1) US10389378B2 (ja)
JP (1) JP5418218B2 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5605288B2 (ja) 2011-03-31 2014-10-15 富士通株式会社 出現マップ生成方法、ファイル抽出方法、出現マップ生成プログラム、ファイル抽出プログラム、出現マップ生成装置、およびファイル抽出装置
JPWO2012150637A1 (ja) * 2011-05-02 2014-07-28 富士通株式会社 抽出方法、情報処理方法、抽出プログラム、情報処理プログラム、抽出装置、および情報処理装置
CN103797480B (zh) * 2011-09-14 2017-11-28 富士通株式会社 提取方法、提取程序、提取装置、以及提取***
CN104025080B (zh) * 2011-11-04 2017-05-03 富士通株式会社 对照控制程序、对照控制装置以及对照控制方法
SG11201402213XA (en) * 2011-11-09 2014-09-26 Agency Science Tech & Res Compression devices, decompression devices, compression methods, and decompression methods
US9171158B2 (en) * 2011-12-12 2015-10-27 International Business Machines Corporation Dynamic anomaly, association and clustering detection
JP5895545B2 (ja) * 2012-01-17 2016-03-30 富士通株式会社 プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体
JP6028392B2 (ja) * 2012-05-24 2016-11-16 富士通株式会社 生成プログラム、生成方法、生成装置、検索プログラム、検索方法および検索装置
US9075735B2 (en) * 2012-06-21 2015-07-07 Breakingpoint Systems, Inc. Systems and methods for efficient memory access
US9111095B2 (en) 2012-08-29 2015-08-18 The Johns Hopkins University Apparatus and method for identifying similarity via dynamic decimation of token sequence n-grams
JP6065914B2 (ja) 2012-09-21 2017-01-25 富士通株式会社 制御プログラム、制御方法および制御装置
WO2014045318A1 (ja) * 2012-09-21 2014-03-27 富士通株式会社 圧縮プログラム、圧縮方法及び圧縮装置
JP6319740B2 (ja) 2014-03-25 2018-05-09 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation データ圧縮を高速化する方法、並びに、データ圧縮を高速化するためのコンピュータ、及びそのコンピュータ・プログラム
WO2015173870A1 (ja) * 2014-05-12 2015-11-19 楽天株式会社 情報処理システム、情報処理方法およびプログラム
US9805099B2 (en) * 2014-10-30 2017-10-31 The Johns Hopkins University Apparatus and method for efficient identification of code similarity
JP2016170750A (ja) * 2015-03-16 2016-09-23 富士通株式会社 データ管理プログラム、情報処理装置およびデータ管理方法
US11030714B2 (en) * 2018-01-27 2021-06-08 Microsoft Technology Licensing, Llc. Wide key hash table for a graphics processing unit
WO2019160133A1 (ja) * 2018-02-19 2019-08-22 日本電信電話株式会社 情報管理装置、情報管理方法及び情報管理プログラム
CN111488601B (zh) * 2020-04-15 2023-04-14 北京明朝万达科技股份有限公司 一种防泄密处理的方法和装置
US11636100B2 (en) * 2020-11-27 2023-04-25 Verizon Patent And Licensing Inc. Systems and methods for compression-based search engine

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3263963B2 (ja) 1991-12-25 2002-03-11 株式会社日立製作所 文書検索方法及び装置
US5469354A (en) * 1989-06-14 1995-11-21 Hitachi, Ltd. Document data processing method and apparatus for document retrieval
JP3497243B2 (ja) 1994-05-24 2004-02-16 株式会社日立製作所 文書検索方法及び装置
JP2986865B2 (ja) 1989-07-24 1999-12-06 株式会社日立製作所 データ検索方法および装置
JP2758826B2 (ja) * 1994-03-02 1998-05-28 株式会社リコー 文書検索装置
US5706365A (en) * 1995-04-10 1998-01-06 Rebus Technology, Inc. System and method for portable document indexing using n-gram word decomposition
JP3518933B2 (ja) 1995-06-05 2004-04-12 株式会社日立製作所 構造化文書検索方法
JP3622503B2 (ja) * 1998-05-29 2005-02-23 株式会社日立製作所 特徴文字列抽出方法および装置とこれを用いた類似文書検索方法および装置並びに特徴文字列抽出プログラムを格納した記憶媒体および類似文書検索プログラムを格納した記憶媒体
JP2000201080A (ja) * 1999-01-07 2000-07-18 Fujitsu Ltd 付加コ―ドを用いたデ―タ圧縮/復元装置および方法
JP2001249922A (ja) * 1999-12-28 2001-09-14 Matsushita Electric Ind Co Ltd 単語分割方式及び装置
US6704728B1 (en) * 2000-05-02 2004-03-09 Iphase.Com, Inc. Accessing information from a collection of data
JP2003323457A (ja) * 2002-02-28 2003-11-14 Ricoh Co Ltd 文書検索装置、文書検索方法、プログラム及び記録媒体
WO2006123429A1 (ja) * 2005-05-20 2006-11-23 Fujitsu Limited 情報検索方法、装置、プログラム、該プログラムを記録した記録媒体
JP4707198B2 (ja) * 2006-10-19 2011-06-22 富士通株式会社 情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置
JP2008160180A (ja) * 2006-12-20 2008-07-10 Toshiba Corp 端末装置、電子機器、および多バイト文字コード伝送システム
WO2008142800A1 (ja) * 2007-05-24 2008-11-27 Fujitsu Limited 情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法
JP5782214B2 (ja) * 2008-05-30 2015-09-24 富士通株式会社 情報検索プログラム、情報検索装置および情報検索方法

Also Published As

Publication number Publication date
JP2011138230A (ja) 2011-07-14
US10389378B2 (en) 2019-08-20
US20110161357A1 (en) 2011-06-30

Similar Documents

Publication Publication Date Title
JP5418218B2 (ja) 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置
JP4893805B2 (ja) 情報処理プログラム、情報検索プログラム、および情報処理装置
JP5062131B2 (ja) 情報処理プログラム、情報処理装置、および情報処理方法
JP5376163B2 (ja) 文書管理・検索システムおよび文書の管理・検索方法
US5323316A (en) Morphological analyzer
US5369577A (en) Text searching system
US5708829A (en) Text indexing system
Nevill-Manning et al. Identifying hierarchical structure in sequences: A linear-time algorithm
US5655129A (en) Character-string retrieval system and method
KR100756921B1 (ko) 문서 분류방법 및 그 문서 분류방법을 컴퓨터에서 실행시키기 위한 프로그램을 포함하는 컴퓨터로 읽을 수있는 기록매체.
US5649023A (en) Method and apparatus for indexing a plurality of handwritten objects
US8037035B2 (en) Apparatus for searching and managing compressed files
JPH0675992A (ja) テキストをインデックス及び検索するための関連ワード形態の限定状態トランスジューサ
Schuegraf et al. A comparison of algorithms for data base compression by use of fragments as language elements
US9720976B2 (en) Extracting method, computer product, extracting system, information generating method, and information contents
Nevill-Manning et al. On-line and off-line heuristics for inferring hierarchies of repetitions in sequences
KR101379128B1 (ko) 사전 생성 장치, 사전 생성 방법 및 사전 생성 프로그램을 기억하는 컴퓨터 판독 가능 기록 매체
CN111737482B (zh) 一种适用于数据挖掘的全景可视化图谱生成方法及装置
JP2009271819A (ja) 文書検索システム、文書検索方法および文書検索プログラム
JP5207721B2 (ja) 転置インデックス作成装置及びフォワードインデックス作成装置
CN109885682B (zh) 基于fcbf的自定义特征维数文本特征选择算法
JPH0594478A (ja) 画像データベースシステム
JP2002108894A (ja) 文書分類装置、文書分類方法及び該方法を実行するための記録媒体
JP5472929B2 (ja) 文書検索装置、文書検索方法及び文書検索プログラム
JP4944266B1 (ja) 2分割文字検索ソフトウェア

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120910

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131022

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131104

R150 Certificate of patent or registration of utility model

Ref document number: 5418218

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150