JP5621906B2 - 検索プログラム、検索装置、および検索方法 - Google Patents
検索プログラム、検索装置、および検索方法 Download PDFInfo
- Publication number
- JP5621906B2 JP5621906B2 JP2013502109A JP2013502109A JP5621906B2 JP 5621906 B2 JP5621906 B2 JP 5621906B2 JP 2013502109 A JP2013502109 A JP 2013502109A JP 2013502109 A JP2013502109 A JP 2013502109A JP 5621906 B2 JP5621906 B2 JP 5621906B2
- Authority
- JP
- Japan
- Prior art keywords
- character
- compression code
- search
- word
- leaf
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
- G06F16/322—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/3332—Query translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/3332—Query translation
- G06F16/3334—Selection or weighting of terms from queries, including natural language queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、ハフマン木を用いて検索する検索プログラム、検索装置、および検索方法に関する。
従来、利用者が、本来検索したいキーワードを想定できず、本来のキーワードのある部分文字列を入力して検索をおこなう方法が開示されている(たとえば、下記特許文献1,2を参照。)。
しかしながら、たとえば、基礎単語である「結婚」と「活動」で構成される「結婚活動」に関し、その略語「婚活」といった未登録単語を検索文字列として入力して検索をおこなう場合、「婚活」では検索結果は得られず、「婚」、「活」というように、文字ごとに検索をかけることとなる。また、「婚」、「活」と別々に検索した結果、「結婚生活」なども検索結果として得られることとなり、検索精度が低いという問題があった。
本発明は、上述した従来技術による問題点を解消するため、基礎単語として登録されていない未登録単語であっても高精度な検索をおこなうことができる検索プログラム、検索装置、および検索方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明の一観点として、対象ファイルのテキストデータを構成する単一文字、基礎単語、および予約語(以下、文字情報と呼ぶ)に出現する各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能であり、2個の文字からなる検索文字列の入力を受け付け、入力された検索文字列を前記データベースから検索する場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索し、前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出し、前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなり、かつ、前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成し、前記圧縮ファイル内の圧縮符号列がテーブル内の連結圧縮符号と一致するか否かを判定し、一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す検索プログラム、検索装置、および検索方法が提案される。
本発明にかかる検索プログラム、検索装置、および検索方法によれば、未登録単語であっても高精度な検索をおこなうことができるという効果を奏する。
以下に添付図面を参照して、本発明にかかる検索プログラム、検索装置、および検索方法の実施の形態を詳細に説明する。なお、本明細書において、「文字情報」とは、テキストデータを構成する、単一文字、基礎単語、予約語などである。単一文字とは1つの文字コードで表現される文字である。単一文字の文字コード長は、文字コード種により異なる。
たとえば、UTF(Unicode Transformation Format)16の場合は16ビットコード、ASCII(American Standard Code for Information Interchange)コードの場合は8ビットコード、シフトJIS(Japanese Industrial Standard)コードの場合は8ビットコードである。シフトJISコードで日本語の文字を表現する場合は、2個の8ビットコードを組み合わせることとなる。
また、単一文字以外に、たとえば、特定の文字列で表現される単語や予約語が挙げられる。単語としては、児童や生徒が学校教育で学習すべき数百〜数千の基礎単語が挙げられる。基礎単語は出現頻度が高い文字列である。予約語とは、予め決められた文字列であり、たとえば、HTMLのタグ(たとえば、<br>)が挙げられる。基礎単語および予約語を「特殊単語」と称す。なお、本実施の形態では、文字コードとしてUTF16を例に挙げて説明する。
<情報検索例>
まず、本実施の形態にかかる情報検索例について説明する。本実施の形態では、対象ファイルを圧縮した圧縮ファイルを圧縮状態のまま、検索文字列の圧縮文字列に一致する圧縮符号列と照合する。そして、照合の結果、不一致となった圧縮符号列については、そのまま伸長する。一方、一致した圧縮符号列については、あらかじめ作成しておいた照合/置換テーブル内の置換文字列に置換する。
まず、本実施の形態にかかる情報検索例について説明する。本実施の形態では、対象ファイルを圧縮した圧縮ファイルを圧縮状態のまま、検索文字列の圧縮文字列に一致する圧縮符号列と照合する。そして、照合の結果、不一致となった圧縮符号列については、そのまま伸長する。一方、一致した圧縮符号列については、あらかじめ作成しておいた照合/置換テーブル内の置換文字列に置換する。
すなわち、本実施の形態では、情報検索に先立って、照合/置換テーブルを作成する作成処理を実行する。そして、作成された照合/置換テーブルを用いて、対象ファイルを圧縮した圧縮ファイルを圧縮状態のまま、照合、置換(不一致の場合は置換せず)しながら伸長する伸長処理を実行する。
特に、本実施の形態では、検索文字列の圧縮文字列が基礎単語の圧縮符号に一致しなかった場合であっても、検索文字列がヒットしたとして伸長後の対象ファイルで強調表示する。たとえば、4文字熟語「結婚活動」のうち「結婚」と「活動」が基礎単語として登録されており、「結婚活動」の略語「婚活」は基礎単語として登録されていないとする。
ここで、基礎単語ではない検索文字列「婚活」が与えられた場合、「結婚」や「活動」ではヒットしないため、単一文字「婚」、「活」のAND検索でヒットさせることとなる。この場合、文字通り「婚活」という文字列のほか、「婚」および「活」が単独でそれぞれヒットすることとなる。すなわち、たまたま対象ファイル内で「婚活」と記述されていれば、「婚活」がヒットするが、それ以外では、「婚」および「活」は、単独でヒットすることとなる。
したがって、本実施の形態では、検索文字列のいわゆる『泣き別れ』を防止することで、伸長処理ひいては検索処理の効率化を図る。
図1は、本実施の形態にかかる情報検索例を示す説明図である。図1では、上述した「婚活」が検索文字列として与えられた例を示している。
(A)例として、検索文字列「婚活」が与えられると、まず、コンピュータは、特殊単語の構造体100を2分探索する。特殊単語の構造体100とは、特殊単語と当該特殊単語に対応する2N分枝無節点ハフマン木の葉へのポインタとを、特殊単語ごとに格納したデータ構造体である。特殊単語の構造体100の詳細については、図51および図52で後述する。検索文字列「婚活」は基礎単語ではないため、特殊単語の構造体100ではヒットしない。
また、2N分枝無節点ハフマン木とは、根から分岐する枝が2N本あり、1または複数本の枝で葉を直接ポイントするハフマン木である。節点(内部節点)はない。節点がなく直接葉にヒットするため、節点を有する通常のハフマン木に比べて、伸長速度の高速化を図ることができる。葉は、該当する文字情報とその圧縮符号を含む構造体である。葉の構造体とも呼ぶ。葉に割り当てられる枝数は、割当先の葉に存在する圧縮符号の圧縮符号長に依存する。これらの詳細については、後述する。
(B)検索文字列「婚活」が特殊単語の構造体100でヒットしなかった場合、コンピュータは、検索文字列「婚活」の先頭文字「婚」を末尾文字とする基礎単語と、検索文字列「婚活」の末尾文字「活」を先頭文字とする基礎単語とを探索する。この場合、先頭文字「婚」を末尾文字とする基礎単語「結婚」と末尾文字「活」を先頭文字とする基礎単語「活動」がヒットしたとする。
(C)基礎単語「結婚」および基礎単語「活動」がヒットした場合、特殊単語の構造体100内の基礎単語「結婚」の葉へのポインタにより、2N分枝無節点ハフマン木の葉(結婚)がポイントされる。同様に、特殊単語の構造体100内の基礎単語「活動」の葉へのポインタにより、2N分枝無節点ハフマン木の葉(活動)がポイントされる。そして、コンピュータは、ポイントされた葉のうち、先頭文字「婚」を末尾文字とする基礎単語「結婚」の葉の構造体内にある照合フラグをONにする。照合フラグとは、その葉がポイントされた場合に、照合/置換テーブルを用いて照合をおこなうか否かを識別するフラグである。
そして、コンピュータは、連続単語「結婚」「活動」の圧縮符号列と、連続単語「結婚」「活動」の置換文字列と、を含む照合/置換テーブルTを作成する。連続単語とは、先行の基礎単語の末尾に後続の基礎単語の先頭を連結させた文字列である。本例では、基礎単語「結婚」に基礎単語「活動」を連結した文字列「結婚活動」となる。
また、連続単語の圧縮符号列とは、先行の基礎単語の圧縮符号の末尾に後続の基礎単語の圧縮符号の先頭を連結させた圧縮符号列である。本例では、基礎単語「結婚」の圧縮符号に基礎単語「活動」の圧縮符号を連結した圧縮符号列となる。すなわち、連続単語「結婚活動」の圧縮符号となる。
連続単語の置換文字列とは、連続単語であり、かつ、連続単語のうち検索文字列に一致する文字列に特定の置換指示情報を埋め込んだ文字列である。本例の場合、連続単語「結婚活動」のうち検索文字列「婚活」に特定の置換指示情報を埋め込んだこととなる。特定の置換指示情報とは、検索文字列以外の表示形式とは異なる表示形式に置換する情報である。
たとえば、検索文字列に一致する文字列を他の文字列とは異なる色にしたり、検索文字列に一致する文字列の背景色を他の文字列の背景色とは異なる色にしたりするために埋め込まれるタグである。たとえば、連続単語「結婚」「活動」については、置換文字列「結<color>婚活</color>動」とする。照合/置換テーブルTの作成の詳細については図2〜図12で後述する。
(D)また、コンピュータは、対象ファイル群を2N分枝無節点ハフマン木で圧縮した圧縮ファイル群fsから、検索文字列「婚活」を構成する「婚」および「活」を含む圧縮ファイルfiを絞り込む。圧縮ファイルの絞込みの詳細については後述する。
(E)このあと、コンピュータは、(D)で絞り込まれた圧縮ファイルを2N分枝無節点ハフマン木を用いて伸長後の文字列を伸長バッファに書き込む。この伸長中に、コンピュータは、圧縮ファイルから取り出された圧縮符号についての葉の構造体で照合フラグがONである場合、照合/置換テーブルTを参照する。本例の場合、基礎単語「結婚」の圧縮符号が取り出された場合、葉の構造体で照合フラグがONであるため、照合/置換テーブルTを参照する。
そして、後続の圧縮符号までの圧縮符号列と照合/置換テーブルT内の圧縮符号列とが一致した場合、置換文字列を伸長バッファに書き込む。本例の場合、基礎単語「活動」の圧縮符号が、基礎単語「結婚」の圧縮符号の後続圧縮符号であるとすると、圧縮ファイルから連続して取り出された基礎単語「結婚」の圧縮符号とその後続の基礎単語「活動」の圧縮符号からなる圧縮符号列が、照合/置換テーブルTにあるか否かを判断する。
本例では、連続単語「結婚」「活動」の圧縮符号列が照合/置換テーブルTに存在するため、連続単語「結婚」「活動」の置換文字列「結<color>婚活</color>動」を伸長バッファに書き込むこととなる。そして、伸長が完了すると、検索結果として伸長バッファの内容を表示することで、検索文字列「婚活」が他の文字列に対し強調表示されることとなる。
<照合/置換テーブルTの作成例>
つぎに、図1(A)〜(C)での照合/置換テーブルTの作成例について説明する。図2〜図8では、基礎単語ではない検索文字列の例として「婚活」が与えられた場合の照合/置換テーブルTの作成例を示す。また、比較するために、図9〜図12では、基礎単語の例として「結婚」が検索文字列として与えられた場合の照合/置換テーブルTの作成例を示す。なお、照合/置換テーブルTの符号の末尾には、照合/置換テーブルTの作成の時系列を示す番号を0から昇順に付すこととする。たとえば、初期状態はT0とし、T0から更新されたらT1、T1から更新されたらT2、…とする。
つぎに、図1(A)〜(C)での照合/置換テーブルTの作成例について説明する。図2〜図8では、基礎単語ではない検索文字列の例として「婚活」が与えられた場合の照合/置換テーブルTの作成例を示す。また、比較するために、図9〜図12では、基礎単語の例として「結婚」が検索文字列として与えられた場合の照合/置換テーブルTの作成例を示す。なお、照合/置換テーブルTの符号の末尾には、照合/置換テーブルTの作成の時系列を示す番号を0から昇順に付すこととする。たとえば、初期状態はT0とし、T0から更新されたらT1、T1から更新されたらT2、…とする。
図2は、基礎単語ではない検索文字列「婚活」が与えられた場合の照合/置換テーブルTの作成例(その1)を示す説明図である。図2のT0は、初期化された照合/置換テーブルTである。照合/置換テーブルT0では、ポインタのアドレスp1、p2、…ごとに、圧縮符号長項目、圧縮符号項目、置換文字列項目からなるレコードが設定されているが、初期状態なので各項目内にはまだ値が設定されていない。
(1)まず、検索文字列「婚活」が与えられると、コンピュータは、特殊単語の構造体100を2分探索する。
(2)検索文字列「婚活」は特殊単語の構造体100には登録されていないため、コンピュータは、つぎに、特殊単語の構造体100において、検索文字列「婚活」の先頭文字「婚」を末尾文字とする基礎単語を2分探索する。
(3)そして、コンピュータは、特殊単語の構造体100から、検索文字列「婚活」の先頭文字「婚」を末尾文字とする基礎単語「結婚」を特定する。
(4)つぎに、(3)の2分探索でヒットした基礎単語「結婚」の葉L#へのポインタにより、2N分枝無節点ハフマン木の葉L#(結婚)の構造体が指定される。葉L#の構造体には、圧縮符号、圧縮符号長、対応する文字構造体へのポインタ、照合フラグ(デフォルトはOFF)が格納されている。図2の葉L#(結婚)の構造体には、あらかじめ、基礎単語「結婚」の圧縮符号“0101001000000”、その圧縮符号長13ビット、特殊単語の構造体100の「結婚」へのポインタが格納されている。ここで、(3)で2分探索されたことで、照合フラグがOFFからONになる。
(5)また、コンピュータは、照合/置換テーブルTの空きポインタp1を、葉L#(結婚)における照合/置換テーブルTへのポインタとして設定する。
(6)そして、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号長項目に、葉L#(結婚)の構造体の圧縮符号長13ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号項目に、葉L#(結婚)の構造体の圧縮符号“0101001000000”を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの置換文字列項目に、「結婚」の置換文字列「結<color>婚</color>」を書き込む。
ここでの置換文字列「結<color>婚</color>」は、検索文字列「婚活」の先頭文字、すなわち、(3)でヒットした基礎単語「結婚」の末尾文字「婚」に特定の置換指示情報が埋め込まれた文字列となる。これにより、照合/置換テーブルT0は照合/置換テーブルT1に更新される。
図3は、基礎単語ではない検索文字列「婚活」が与えられた場合の照合/置換テーブルTの作成例(その2)を示す説明図である。
(7)図2の(6)のあと、コンピュータは、特殊単語の構造体100において、検索文字列「婚活」の末尾文字「活」を先頭文字とする基礎単語を2分探索する。
(8)そして、コンピュータは、特殊単語の構造体100から、検索文字列「婚活」の末尾文字「活」を先頭文字とする基礎単語「活用」を特定する。コンピュータは、基礎単語「活用」が特定されると、基礎単語「活用」についての葉L#(活用)へのポインタにより、葉L#(活用)の構造体をポイントする。
(9)つぎに、コンピュータは、照合/置換テーブルTへのポインタp1で指定されるレコードの値(圧縮符号長13ビット、圧縮符号“0101001000000”置換文字列「結<color>婚</color>」)を、空きポインタp2のレコードにコピーする。これにより、照合/置換テーブルT1は照合/置換テーブルT2に更新される。
(10)そして、コンピュータは、照合/置換テーブルTへのポインタp1で特定される圧縮符号長13ビットに、葉L#(活用)の構造体に格納されている圧縮符号長13ビットを加算して26ビットとする。
また、コンピュータは、照合/置換テーブルTへのポインタp1で特定される圧縮符号“0101001000000”の末尾に、葉L#(活用)の構造体に格納されている圧縮符号“0101001000001”を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp1で特定される置換文字列「結<color>婚</color>」の末尾に、基礎単語「活用」の置換文字列「<color>活</color>用」を連結する。
ここで、置換文字列「<color>活</color>用」は、検索文字列「婚活」の末尾文字、すなわち、(8)でヒットした基礎単語「活用」の先頭文字「活」に特定の置換指示情報が埋め込まれた文字列となる。連結後の置換文字列は、以下のようになる。
「結<color>婚</color><color>活</color>用」
この場合、冗長さを回避するため、「婚」と「活」との間の「</color><color>」を削除して、「結<color>婚活</color>用」を連結後の置換文字列とする。すなわち、終了タグと開始タグが連続した場合には削除する。これにより、照合/置換テーブルT2は照合/置換テーブルT3に更新される。
図4は、基礎単語ではない検索文字列「婚活」が与えられた場合の照合/置換テーブルTの作成例(その3)を示す説明図である。
(11)図3の(8)のあと、さらに、コンピュータは、検索文字列「婚活」の末尾文字「活」を先頭文字とする基礎単語について、特殊単語の構造体100の2分探索を続け、検索文字列「婚活」の末尾文字「活」を先頭文字とする基礎単語「活動」を特定する。コンピュータは、基礎単語「活動」が特定されると、基礎単語「活動」についての葉L#(活動)へのポインタにより、葉L#(活動)の構造体をポイントする。
(12)つぎに、コンピュータは、図3の(9)でコピー対象となった照合/置換テーブルTへのポインタp2を、葉L#(結婚)の構造体(葉L#(活動)の構造体ではなく)に格納する。
(13)これにより、葉L#(結婚)の構造体は、照合/置換テーブルTにおけるポインタp1のレコードおよびp2のレコードに指定することができる。
(14)このあと、コンピュータは、照合/置換テーブルTへのポインタp2で特定される圧縮符号長13ビットに、葉L#(活動)の構造体に格納されている圧縮符号長13ビットを加算して26ビットとする。
また、コンピュータは、照合/置換テーブルTへのポインタp2で特定される圧縮符号“0101001000000”の末尾に、葉L#(活動)の構造体に格納されている圧縮符号“0101001000010”を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp2で特定される置換文字列「結<color>婚</color>」の末尾に、基礎単語「活動」の置換文字列「<color>活</color>動」を連結する。
ここで、置換文字列「<color>活</color>動」は、検索文字列「婚活」の末尾文字、すなわち、(11)でヒットした基礎単語「活動」の先頭文字「活」に特定の置換指示情報が埋め込まれた文字列となる。連結後の置換文字列は、以下のようになる。
「結<color>婚</color><color>活</color>動」
この場合、冗長さを回避するため、「婚」と「活」との間の「</color><color>」を削除して、「結<color>婚活</color>動」を連結後の置換文字列とする。これにより、照合/置換テーブルT3は照合/置換テーブルT4に更新される。これにより、検索文字列「婚活」についての更新は完了し、図5〜図8では、単一文字「婚」、「活」についての更新を説明する。
図5は、基礎単語ではない検索文字列「婚活」が与えられた場合の照合/置換テーブルTの作成例(その4)を示す説明図である。
(15)まず、コンピュータは、高位文字コードの構造体500において、検索文字列「婚活」のうち先頭文字「婚」を2分探索する。高位文字コードの構造体500は、高位文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。高位文字コードとは、対象ファイル群に記述されている文字の出現回数を集計した結果、上位所定番目(たとえば、1024位)までの文字群をいう。すなわち、高位文字コードの構造体500でヒットした文字は、上位所定番目に入る高出現頻度の文字である。本例の文字「婚」は、高位文字コードの構造体500でヒットしなかったものとする。
(16)コンピュータは、高位文字コードの構造体500でヒットしなかった低出現頻度の文字「婚」の文字コード「5A5A」を上位8ビット「0x5A」と下位8ビット「0x5A」とに分割する。UTF16ビットコードの文字は、8ビットコードの組み合わせで表現されるため、低出現頻度の文字については分割することで、低出現頻度の文字の総数を、たかだか256個に抑えることができる。
図6は、基礎単語ではない検索文字列「婚活」が与えられた場合の照合/置換テーブルTの作成例(その5)を示す説明図である。
(17)コンピュータは、分割文字コードの構造体において、図5の(16)で分割された上位分割文字コード「0x5A」を2分探索する。分割文字コードの構造体は、分割文字コードとその葉L♯へのポインタを格納するデータ構造体である。分割文字コードの構造体600についての2分探索では、かならずヒットすることとなる。
(18)そして、分割文字コード「0x5A」がヒットするため、対応する葉L#(0x5A)へのポインタにより、2N分枝無節点ハフマン木の葉L#(0x5A)の構造体が指定される。図6の葉L#(0x5A)の構造体には、あらかじめ、分割文字コード「0x5A」の圧縮符号“010100110110”、その圧縮符号長12ビット、分割文字コードの構造体600の「0x5A」へのポインタが格納されている。
(19)そして、コンピュータは、指定された葉L#(0x5A)の構造体の照合フラグをONにする。
(20)また、コンピュータは、照合/置換テーブルTの空きポインタp3を、葉L#(0x5A)の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp3で指定されるレコードにアクセスすることができる。
(21)そして、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号長項目に、葉L#(0x5A)の構造体の圧縮符号長12ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号項目に、葉L#(0x5A)の構造体の圧縮符号“010100110110”を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの置換文字列項目に、「0x5A」の置換文字列「<color>0x5A</color>」を書き込む。これにより、照合/置換テーブルT4は照合/置換テーブルT5に更新される。
図7は、基礎単語ではない検索文字列「婚活」が与えられた場合の照合/置換テーブルTの作成例(その6)を示す説明図である。
(22)コンピュータは、分割文字コードの構造体600において、図5の(16)で分割された下位分割文字コード「0x5A」を2分探索する。
(23)そして、分割文字コード「0x5A」がヒットするため、対応する葉L#(0x5A)へのポインタにより、2N分枝無節点ハフマン木の葉L#(0x5A)の構造体が指定される。
(24)そして、コンピュータは、上位分割文字コード「0x5A」の構造体で設定された照合/置換テーブルTのポインタp3で特定される圧縮符号長12ビットに、葉L#(0x5A)の構造体に格納されている圧縮符号長12ビットを加算して24ビットとする。
また、コンピュータは、照合/置換テーブルTへのポインタp3で特定される圧縮符号“010100110110”の末尾に、葉L#(0x5A)の構造体に格納されている圧縮符号“010100110110”を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp3で特定される置換文字列「<color>0x5A</color>」の末尾に、下位分割文字コード「0x5A」の置換文字列「<color>0x5A</color>」を連結する。連結後の置換文字列は、以下のようになる。
「<color>0x5A</color><color>0x5A</color>」
この場合、冗長さを回避するため、上位分割文字コード「0x5A」と下位分割文字コード「0x5A」との間の「</color><color>」を削除して、「<color>婚</color>」を連結後の置換文字列とする。これにより、照合/置換テーブルT5は照合/置換テーブルT6に更新される。これにより、単一文字「婚」についての更新は完了する。
図8は、基礎単語ではない検索文字列「婚活」が与えられた場合の照合/置換テーブルTの作成例(その7)を示す説明図である。
(25)まず、コンピュータは、高位文字コードの構造体500において、検索文字列「婚活」のうち末尾文字「活」を2分探索する。
(26)そして、末尾文字「活」は高出現頻度の文字であるため、高位文字コードの構造体500でヒットすることとなる。
(27)そして、対応する葉L#(活)へのポインタにより、2N分枝無節点ハフマン木の葉L#(活)の構造体が指定される。図8の葉L#(活)の構造体には、あらかじめ、高位文字「活」の圧縮符号“001110010”、その圧縮符号長9ビット、高位文字コードの構造体500の「活」へのポインタが格納されている。そして、コンピュータは、指定された葉L#(活)の構造体の照合フラグをONにする。
(28)また、コンピュータは、照合/置換テーブルTの空きポインタp4を、葉L#(活)の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp4で指定されるレコードにアクセスすることができる。
(29)そして、コンピュータは、照合/置換テーブルTのポインタp4で指定されるレコードの圧縮符号長項目に、葉L#(活)の構造体の圧縮符号長9ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp4で指定されるレコードの圧縮符号項目に、葉L#(活)の構造体の圧縮符号“001110010”を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp4で指定されるレコードの置換文字列項目に、「活」の置換文字列「<color>活</color>」を書き込む。これにより、照合/置換テーブルT6は照合/置換テーブルT7に更新される。
図9は、基礎単語「結婚」が検索文字列として与えられた場合の照合/置換テーブルTの作成例(その1)を示す説明図である。
(1)まず、コンピュータは、特殊単語の構造体100において、検索文字列「結婚」を2分探索する。
(2)検索文字列「結婚」は特殊単語の構造体100に登録されているため、ヒットする。そして、対応する葉L#(結婚)へのポインタにより、2N分枝無節点ハフマン木の葉L#(結婚)の構造体が指定される。図9の葉L#(結婚)の構造体には、あらかじめ、基礎単語「結婚」の圧縮符号“0101001000000”、その圧縮符号長13ビット、特殊単語の構造体100の「結婚」へのポインタが格納されている。
(3)そして、コンピュータは、指定された葉L#(結婚)の構造体の照合フラグをONにする。
(4)また、コンピュータは、照合/置換テーブルTの空きポインタp1を、葉L#(結婚)の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp1で指定されるレコードにアクセスすることができる。
(5)そして、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号長項目に、葉L#(結婚)の構造体の圧縮符号長13ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの圧縮符号項目に、葉L#(結婚)の構造体の圧縮符号“0101001000000”を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp1で指定されるレコードの置換文字列項目に、「結婚」の置換文字列「<color>結婚</color>」を書き込む。これにより、照合/置換テーブルT0は照合/置換テーブルT1に更新される。
図10は、基礎単語「結婚」が検索文字列として与えられた場合の照合/置換テーブルTの作成例(その2)を示す説明図である。
(6)つぎに、検索文字列「結婚」を単一文字「結」,「婚」に分割する。
(7)そして、コンピュータは、高位文字コードの構造体500において、先頭の単一文字「結」を2分探索する。単一文字「結」は高出現頻度の文字であるため、高位文字コードの構造体500でヒットすることとなる。このあと、対応する葉L#(結)へのポインタにより、2N分枝無節点ハフマン木の葉L#(結)の構造体が指定される。図10の葉L#(結)の構造体には、あらかじめ、高位文字「結」の圧縮符号“0000100”、その圧縮符号長7ビット、高位文字コードの構造体500の「結」へのポインタが格納されている。
(8)そして、コンピュータは、指定された葉L#(結)の構造体の照合フラグをONにする。
(9)また、コンピュータは、照合/置換テーブルTの空きポインタp2を、葉L#(結婚)の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp2で指定されるレコードにアクセスすることができる。
(10)そして、コンピュータは、照合/置換テーブルTのポインタp2で指定されるレコードの圧縮符号長項目に、葉L#(結)の構造体の圧縮符号長7ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp2で指定されるレコードの圧縮符号項目に、葉L#(結)の構造体の圧縮符号“0000100”を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp2で指定されるレコードの置換文字列項目に、「結」の置換文字列「<color>結</color>」を書き込む。これにより、照合/置換テーブルT1は照合/置換テーブルT2に更新される。
図11は、基礎単語「結婚」が検索文字列として与えられた場合の照合/置換テーブルTの作成例(その3)を示す説明図である。図10の(10)のあと、コンピュータは、高位文字コードの構造体500において、検索文字列「結婚」のうち末尾文字「婚」を2分探索するが、図5に示したように、単一文字「婚」は低出現頻度の文字であるため、高位文字コードの構造体500でヒットしない。
(11)したがって、コンピュータは、高位文字コードの構造体500でヒットしなかった低出現頻度の文字「婚」の文字コード「5A5A」を上位8ビット「0x5A」と下位8ビット「0x5A」とに分割する。UTF16ビットコードの文字は、8ビットコードの組み合わせで表現されるため、低出現頻度の文字については分割することで、低出現頻度の文字の総数を、たかだか256個に抑えることができる。
(12)コンピュータは、分割文字コードの構造体600において、(11)で分割された上位分割文字コード「0x5A」を2分探索する。この場合、分割文字コード「0x5A」がヒットするため、対応する葉L#(0x5A)へのポインタにより、2N分枝無節点ハフマン木の葉L#(0x5A)の構造体が指定される。図11の葉L#(0x5A)の構造体には、あらかじめ、分割文字コード「0x5A」の圧縮符号“010100110110”、その圧縮符号長12ビット、分割文字コードの構造体600の「0x5A」へのポインタが格納されている。
(13)そして、コンピュータは、指定された葉L#(0x5A)の構造体の照合フラグをONにする。
(14)また、コンピュータは、照合/置換テーブルTの空きポインタp3を、葉L#(0x5A)の構造体内の照合/置換テーブルTへのポインタとして設定する。コンピュータは、これにより照合/置換テーブルTのポインタp3で指定されるレコードにアクセスすることができる。
(15)そして、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号長項目に、葉L#(0x5A)の構造体の圧縮符号長12ビットを書き込む。また、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの圧縮符号項目に、葉L#(0x5A)の構造体の圧縮符号“010100110110”を書き込む。さらに、コンピュータは、照合/置換テーブルTのポインタp3で指定されるレコードの置換文字列項目に、「0x5A」の置換文字列「<color>0x5A</color>」を書き込む。これにより、照合/置換テーブルT2は照合/置換テーブルT3に更新される。
下位分割文字コード「0x5A」についても、図6および図7のように、(12)、(14)、(15)の処理をおこなう。具体的には、(15)において、コンピュータは、上位分割文字コード「0x5A」の構造体で設定された照合/置換テーブルTのポインタp3で特定される圧縮符号長12ビットに、葉L#(0x5A)の構造体に格納されている圧縮符号長12ビットを加算して24ビットとする。
また、コンピュータは、照合/置換テーブルTへのポインタp3で特定される圧縮符号“010100110110”の末尾に、葉L#(0x5A)の構造体に格納されている圧縮符号“010100110110”を連結する。さらに、コンピュータは、照合/置換テーブルTへのポインタp3で特定される置換文字列「<color>0x5A</color>」の末尾に、下位分割文字コード「0x5A」の置換文字列「<color>0x5A</color>」を連結する。連結後の置換文字列は、以下のようになる。
「<color>0x5A</color><color>0x5A</color>」
この場合、冗長さを回避するため、上位分割文字コード「0x5A」と下位分割文字コード「0x5A」との間の「</color><color>」を削除して、「<color>婚</color>」を連結後の置換文字列とする。すなわち、終了タグと開始タグが連続した場合には削除する。これにより、照合/置換テーブルT2は照合/置換テーブルT3に更新される。これにより、単一文字「婚」についての更新は完了する。
<2N分枝無節点ハフマン木のサイズ決定方法>
図12は、2N分枝無節点ハフマン木のサイズ決定方法の一例を示す説明図である。文字情報群の総種類数Xが、どの範囲にあるかで、適用される2N分枝無節点ハフマン木のサイズが決定される。2N分枝無節点ハフマン木のサイズとは、最大枝数2Nである。べき数Nは、圧縮符号長の上限となる。したがって、2N分枝無節点ハフマン木のサイズを決定する場合は、べき数Nを文字情報群の総種類数Xに応じて決定すればよい。
図12は、2N分枝無節点ハフマン木のサイズ決定方法の一例を示す説明図である。文字情報群の総種類数Xが、どの範囲にあるかで、適用される2N分枝無節点ハフマン木のサイズが決定される。2N分枝無節点ハフマン木のサイズとは、最大枝数2Nである。べき数Nは、圧縮符号長の上限となる。したがって、2N分枝無節点ハフマン木のサイズを決定する場合は、べき数Nを文字情報群の総種類数Xに応じて決定すればよい。
具体的には、文字情報群の総種類数Xが2x-2<X≦2x-1である場合、少なくとも最大枝数2Nが2x-1本あればハフマン木が構築できる。サイズを最小限にするには、N=x−1とすればよい。また、文字情報群の総種類数Xが2x-1<X≦2xである場合、少なくとも最大枝数2Nが2x本あればハフマン木が構築できる。サイズを最小限にするには、N=xとすればよい。また、文字情報群の総種類数Xが2x<X≦2x+1である場合、少なくとも最大枝数2Nが2x+1本あればハフマン木が構築できる。サイズを最小限にするには、N=x+1とすればよい。
たとえば、文字情報群の総種類数X=1305個である場合、210<X≦211となるため、最大枝数2Nのべき数Nは、N=11となる。したがって、211分枝無節点ハフマン木が生成され、最大でも11ビットの圧縮符号長の圧縮符号で文字情報を圧縮することができる。
また、文字情報群の総種類数X=3048個である場合、211<X≦212となるため、最大枝数2Nのべき数Nは、N=12となる。したがって、212分枝無節点ハフマン木が生成され、最大でも12ビットの圧縮符号長の圧縮符号で文字情報を圧縮することができる。
さらに、文字情報群の総種類数X=5401個である場合、212<X≦213となるため、最大枝数2Nのべき数Nは、N=13となる。したがって、213分枝無節点ハフマン木が生成され、最大でも13ビットの圧縮符号長の圧縮符号で文字情報を圧縮することができる。
<2N分枝無節点ハフマン木の生成までの流れ>
図13は、2N分枝無節点ハフマン木の生成までの流れを示す説明図である。
図13は、2N分枝無節点ハフマン木の生成までの流れを示す説明図である。
(1)出現回数の集計
まず、コンピュータは、対象ファイル群に存在する文字情報の出現回数を計数する。計数対象となる対象ファイル群は、たとえば、文書ファイル、Webページなどの電子データであり、たとえば、テキスト形式、HTML(HyperText Markup Language)形式、XML(Extensible Markup Language)形式の電子データである。また、単一の対象ファイルを計数対象としてもよい。集計結果は、出現回数の降順にソートされ、出現回数の大きい方から昇順の順位がつけられる。なお、ここでは、文字情報の総種類数は、例として1305個(<2048(=211))とする。
まず、コンピュータは、対象ファイル群に存在する文字情報の出現回数を計数する。計数対象となる対象ファイル群は、たとえば、文書ファイル、Webページなどの電子データであり、たとえば、テキスト形式、HTML(HyperText Markup Language)形式、XML(Extensible Markup Language)形式の電子データである。また、単一の対象ファイルを計数対象としてもよい。集計結果は、出現回数の降順にソートされ、出現回数の大きい方から昇順の順位がつけられる。なお、ここでは、文字情報の総種類数は、例として1305個(<2048(=211))とする。
(2)圧縮符号長算出
つぎに、(1)で得られた集計結果を基にして、コンピュータは、文字情報ごとの圧縮符号長を算出する。具体的には、コンピュータは、文字情報ごとに、出現率を算出する。出現率は、文字情報の出現回数を全文字情報の総出現回数で割ることで得られる。そして、コンピュータは、出現率に対応する生起確率を求め、生起確率から圧縮符号長を導き出す。
つぎに、(1)で得られた集計結果を基にして、コンピュータは、文字情報ごとの圧縮符号長を算出する。具体的には、コンピュータは、文字情報ごとに、出現率を算出する。出現率は、文字情報の出現回数を全文字情報の総出現回数で割ることで得られる。そして、コンピュータは、出現率に対応する生起確率を求め、生起確率から圧縮符号長を導き出す。
生起確率は、1/2xで表現される。xはべき数である。圧縮符号長は、生起確率のべき数xとなる。具体的には、出現率が生起確率の以下のどの範囲であるかで圧縮符号長が決定される。ARは出現率である。
1/20>AR≧1/21・・・圧縮符号長は1ビット。
1/21>AR≧1/22・・・圧縮符号長は2ビット。
1/22>AR≧1/23・・・圧縮符号長は3ビット。
1/23>AR≧1/24・・・圧縮符号長は4ビット。
・
・
・
1/2N-1>AR≧1/2N・・・圧縮符号長はNビット。
1/20>AR≧1/21・・・圧縮符号長は1ビット。
1/21>AR≧1/22・・・圧縮符号長は2ビット。
1/22>AR≧1/23・・・圧縮符号長は3ビット。
1/23>AR≧1/24・・・圧縮符号長は4ビット。
・
・
・
1/2N-1>AR≧1/2N・・・圧縮符号長はNビット。
(3)葉数特定
つぎに、コンピュータは、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。図13では、最大圧縮符号長は17ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長5ビットの葉数が2である場合、5ビットの圧縮符号が割り当てられる文字情報が2つ存在することを示している。
つぎに、コンピュータは、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。図13では、最大圧縮符号長は17ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長5ビットの葉数が2である場合、5ビットの圧縮符号が割り当てられる文字情報が2つ存在することを示している。
(4)葉数補正
つぎに、コンピュータは、葉数を補正する。具体的には、コンピュータは、枝数の上限2Nのべき数Nが最大圧縮符号長となるように補正する。たとえば、べき数N=11の場合、圧縮符号長11ビット〜17ビットまでの葉数の総和を、補正後の圧縮符号長11ビットの葉数にする。そして、コンピュータは、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、20、21、22、23、24、25、26、27として葉当たりの枝数を決定する。
つぎに、コンピュータは、葉数を補正する。具体的には、コンピュータは、枝数の上限2Nのべき数Nが最大圧縮符号長となるように補正する。たとえば、べき数N=11の場合、圧縮符号長11ビット〜17ビットまでの葉数の総和を、補正後の圧縮符号長11ビットの葉数にする。そして、コンピュータは、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、20、21、22、23、24、25、26、27として葉当たりの枝数を決定する。
たとえば、図13では、圧縮符号長11ビットの圧縮符号が割り当てられる文字情報の総数(葉数)は1215個であるが、その葉当たりの枝数は1である。圧縮符号長11ビットの圧縮符号が割り当てられる文字情報については、それぞれ1本の枝しか割り当てられないこととなる。一方、圧縮符号長6ビットの圧縮符号が割り当てられる文字情報の総数(葉数)は6個であるが、その葉当たりの枝数は32である。圧縮符号長6ビットの圧縮符号が割り当てられる文字情報については、それぞれ32本の枝が割り当てられることとなる。
(5)葉の構造体生成
つぎに、コンピュータは、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が1位である文字「0」の圧縮符号長は6ビットであり、圧縮符号は「000000」となる。図13の例では、文字情報の種類数(葉数)は1305個であるため、葉L1の構造体〜葉L1305の構造体が生成されることとなる。
つぎに、コンピュータは、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が1位である文字「0」の圧縮符号長は6ビットであり、圧縮符号は「000000」となる。図13の例では、文字情報の種類数(葉数)は1305個であるため、葉L1の構造体〜葉L1305の構造体が生成されることとなる。
(6)葉へのポインタ生成
つぎに、コンピュータは、葉の構造体ごとに葉へのポインタを生成する。葉へのポインタは、そのポイント先となる葉の構造体内の圧縮符号に、その葉当たりの枝数分の番号に相当するビット列を連結したビット列である。たとえば、葉L1である文字「0」に割り当てられた圧縮符号「000000」の圧縮符号長は6ビットであるため、葉L1当たりの枝数は32本である。
つぎに、コンピュータは、葉の構造体ごとに葉へのポインタを生成する。葉へのポインタは、そのポイント先となる葉の構造体内の圧縮符号に、その葉当たりの枝数分の番号に相当するビット列を連結したビット列である。たとえば、葉L1である文字「0」に割り当てられた圧縮符号「000000」の圧縮符号長は6ビットであるため、葉L1当たりの枝数は32本である。
したがって、葉L1へのポインタの先頭6ビットは、圧縮符号「000000」となる。後続ビット列は、葉L1当たりの枝数で表現される32(=25)種のビット列となる。すなわち、32種の5ビットのビット列が圧縮符号「000000」の後続ビット列となる。したがって、葉L1へのポインタは、先頭6ビットが「000000」で固定された32種の11ビットのビット列となる。なお、葉当たりの枝数が1本の場合は、葉へのポインタは1個であり、圧縮符号とその葉へのポインタは同一ビット列となる。
(7)2N分枝無節点ハフマン木の構築
最後に、コンピュータは、2N分枝無節点ハフマン木を構築する。具体的には、葉のポインタを根とすることで、葉の構造体を直接指定する2N分枝無節点ハフマン木が構築される。圧縮符号列が、先頭6ビットが「000000」の11ビットのビット列である場合、後続の5ビットが32種のいずれのビット列であっても、2N分枝無節点ハフマン木により文字「0」の葉L1の構造体をポイントすることができる。
最後に、コンピュータは、2N分枝無節点ハフマン木を構築する。具体的には、葉のポインタを根とすることで、葉の構造体を直接指定する2N分枝無節点ハフマン木が構築される。圧縮符号列が、先頭6ビットが「000000」の11ビットのビット列である場合、後続の5ビットが32種のいずれのビット列であっても、2N分枝無節点ハフマン木により文字「0」の葉L1の構造体をポイントすることができる。
<(1)出現回数の集計の詳細>
図14は、図2の(1)出現回数の集計の詳細を示す説明図である。コンピュータは、対象ファイル群Fs内の文字コードについて出現回数を集計して降順にソートする。そして、高位(たとえば、1〜1024位まで)の文字コードと低位(1025位以下)の文字コードに分ける。
図14は、図2の(1)出現回数の集計の詳細を示す説明図である。コンピュータは、対象ファイル群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/>といったタグなどを予約語とする。予約語は数十種(例として25種)決めておく。また、必要に応じて基礎単語も決めておく。基礎単語は例として4096種としておく。そして、高位文字コード群、分割文字コード群および予約語群、基礎単語群を混在させて出現頻度を再集計し、出現頻度の降順に再ソートする。再ソート結果が図13の集計結果となる。
基礎単語群を集計しない場合、出現頻度の降順にソートされた1305種の文字情報が得られる。文字情報の種類数をこの程度の数に抑えることで、16ビットの文字コードを12ビット以下の圧縮符号に圧縮し、圧縮符号を16ビットの文字コードに伸長することが可能となる。
また、基礎単語群を集計する場合、出現頻度の降順にソートされた5401種の文字情報が得られる。4096種の基礎単語を集計すると、16ビットの文字コードを13ビット以下の圧縮符号に圧縮することができ、圧縮符号を16ビットの文字コードに伸長することが可能となる。また、基礎単語は16ビットコードが複数連結された文字列であるため、文字数がn個である場合、n×16ビットコードをたかだか13ビット以下の圧縮符号に圧縮でき、その圧縮符号をn×16ビットコードの基礎単語に伸長することができる。
つぎに、出現マップ群1501〜1503について説明する。出現マップ群とは、出現マップの集合である。出現マップ群は、高位文字、分割文字コード、特殊単語ごとに用意される。各出現マップ群を構成する出現マップは、文字情報ごとに存在する対象ファイルの番号に対応するビットをON(たとえば、1)にし、存在しない対象ファイルの番号に対応するビットをOFF(たとえば、0)にしたビット列である。出現マップは、対象ファイル群Fsを対象ファイルごとに集計する際に生成される。
図15は、文字情報が高位文字である場合の出現マップ群1501を示す説明図である。図15の出現マップ群1501では、高位文字ごとに、対象ファイル数n個分のビット列が設定されている。ビット列のうち「1」になっているファイル番号の対象ファイルに、その高位文字が少なくとも1回出現したことを示している。たとえば、高位文字「結」は、対象ファイルF1、F3に少なくとも1回出現し、対象ファイルF2,Fnには1回も出現しない。
図16は、文字情報が分割文字コードである場合の出現マップ群1502を示す説明図である。図16の出現マップ群1502では、分割文字コードごとに、対象ファイル数n個分のビット列が設定されている。ビット列のうち「1」になっているファイル番号の対象ファイルに、その分割文字コードが少なくとも1回出現したことを示している。たとえば、分割文字コード「0x5A」は、対象ファイルF1〜F3に少なくとも1回出現し、対象ファイルFnには1回も出現しない。すなわち、分割文字コード「0x5A」を上位ビットまたは下位ビットとする文字が対象ファイルF1〜F3に存在する。
図17は、文字情報が特殊単語である場合の出現マップ群1503を示す説明図である。図17の出現マップ群1503では、特殊単語ごとに、対象ファイル数n個分のビット列が設定されている。ビット列のうち「1」になっているファイル番号の対象ファイルに、その特殊単語が少なくとも1回出現したことを示している。たとえば、特殊単語「結婚」は、対象ファイルF3に少なくとも1回出現し、対象ファイルF1,F2,Fnには1回も出現しない。
<(2)圧縮符号長算出の詳細(N=11)>
図18は、図13の(2)圧縮符号長算出の詳細(N=11)を示す説明図である。図18の文字情報テーブルは、図14の集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目〜総回数項目までが図3の再ソート結果で得られた情報である。
図18は、図13の(2)圧縮符号長算出の詳細(N=11)を示す説明図である。図18の文字情報テーブルは、図14の集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目〜総回数項目までが図3の再ソート結果で得られた情報である。
ここで、順位項目には、文字情報の出現回数の降順に順位(昇順)が書き込まれている。文字情報項目のうち伸長種別項目には、文字情報の種別が書き込まれる。「16」は16ビットコード(の単一文字)を示している。「8」は8ビットの分割文字コードを示している。「特」は特殊単語(基礎単語または予約語)を示している。
文字情報項目のうちコード項目には、高位文字コードまたは分割文字コードが書き込まれている。特殊単語の場合は空欄とする。文字情報項目のうち文字項目には、文字や特殊単語が書き込まれている。分割文字コードの場合は空欄とする。出現回数項目には、対象ファイル群Fsでの文字情報の出現回数が書き込まれている。総回数項目には、全文字情報の総出現回数が書き込まれている。
出現率項目には、出現回数を総回数で割り算した値が出現率として書き込まれている。補正前項目の生起確率項目には、出現率に対応する生起確率が書き込まれている。圧縮符号長項目には、生起確率に応じた圧縮符号長、すなわち、生起確率1/2yのべき数yが圧縮符号長として書き込まれている。
<(3)葉数特定〜(5)葉の構造体生成の詳細(N=11)>
図19は、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=11)を示す説明図である。図18の文字情報テーブルを圧縮符号長単位で葉数(文字情報の総種類数)を集計した結果が、図19における補正前の葉数となる。ここで、補正Aとは、圧縮符号長の上限長N(すなわち、2N分枝無節点ハフマン木の最大枝数2Nのべき数N)以上の圧縮符号長に割り当てられた葉数を、圧縮符号長の上限長Nに集約する補正である。この場合、補正前での最大圧縮符号長は17ビットであるが、文字情報の総種類数が1305種であるため、圧縮符号長の上限長Nは、N=11となる。したがって、補正Aでは、圧縮符号長11ビットの葉数が、圧縮符号長が11ビット〜17ビットの葉数の総和(1190個)となる。
図19は、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=11)を示す説明図である。図18の文字情報テーブルを圧縮符号長単位で葉数(文字情報の総種類数)を集計した結果が、図19における補正前の葉数となる。ここで、補正Aとは、圧縮符号長の上限長N(すなわち、2N分枝無節点ハフマン木の最大枝数2Nのべき数N)以上の圧縮符号長に割り当てられた葉数を、圧縮符号長の上限長Nに集約する補正である。この場合、補正前での最大圧縮符号長は17ビットであるが、文字情報の総種類数が1305種であるため、圧縮符号長の上限長Nは、N=11となる。したがって、補正Aでは、圧縮符号長11ビットの葉数が、圧縮符号長が11ビット〜17ビットの葉数の総和(1190個)となる。
そして、コンピュータは、生起確率総和を求める。圧縮符号長ごとの生起確率は決められているため(5ビットなら1/25)、圧縮符号長ごとに生起確率を葉数で乗じることで、圧縮符号長ごとの乗算結果が得られる。たとえば、補正Aにおける圧縮符号長5ビットの葉数は2である。圧縮符号長5ビットの生起確率は、1/25である。したがって、補正Aにおける圧縮符号長5ビットの生起確率は、2×(1/25)=1/24となる。圧縮符号長6ビット以降も同様に補正Aにおける圧縮符号長生起確率を求める。そして、補正A後における各圧縮符号長の生起確率を合計することで、補正Aでの生起確率総和が得られる。
そして、コンピュータは、生起確率総和が1以下であるか否かを判断する。しきい値tは0<t≦1である。しきい値tを設けたくない場合は、t=1とすればよい。しきい値t未満であれば、補正Bに移行する。しきい値t以上1以下である場合は、補正Bに移行せず、この時点での圧縮符号長ごとの葉数で確定する。
補正Bは、補正Aでの圧縮符号長群(5ビット〜12ビット)は変えずに、葉数を更新する補正である。具体的には、補正Aでの生起確率総和が、しきい値t以上1以下でない場合におこなわれる補正である。より具体的には、補正Bは2種類ある。
1つ目は、生起確率総和がしきい値t未満である場合、生起確率総和が1以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を増加させる補正(以下、補正B+)である。もう1つは、生起確率総和が1より大きい場合、生起確率総和が1以下に割り込んでから1以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を減少させる補正(以下、補正B-)である。
図19に示した例では、補正Aでの生起確率総和が「1.146」であるため、補正B-をおこなうこととなる。なお、補正B+および補正B-のいずれの補正Bであっても、葉数を生起確率総和で割るという同じ補正をおこなう。
まず、補正B-の1回目(補正B-1)では、圧縮符号長ごとの補正Aでの葉数を、前回の補正(この場合は補正A)の生起確率の総和(1.146)で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Aでの圧縮符号長の上限長N(N=11ビット)については、前回の補正(この場合は補正A)の生起確率総和(1.146)で割ることはせず、葉の総数(1305個)から、補正B-1での圧縮符号長ごとの葉の総数(圧縮符号長の上限長Nの葉数除く)を引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1208個である。
このあと、コンピュータは、補正Aの場合と同様の計算処理により、補正B-1での生起確率総和を求める。そして、コンピュータは、補正B-1での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B-1での生起確率総和が1以下の最大漸近値に収束していなければ、補正B-の2回目(補正B-2)に移行する。最大漸近値に収束した場合は、補正B-2に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B-1で更新された生起確率総和「1.042」は1より大きいため、最大漸近値に収束しておらず、補正B-2に移行する。
補正B-2では、圧縮符号長ごとの補正B-1での葉数を、前回の補正(この場合は補正B-1)の生起確率総和(1.042)で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B-1での圧縮符号長の上限長N(N=11ビット)については、前回の補正(この場合は補正B-1)の生起確率総和(1.042)で割ることはせず、葉の総数(1305個)から、補正B-2での圧縮符号長ごとの葉の総数(圧縮符号長の上限長Nの葉数除く)を引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1215個である。
このあと、コンピュータは、補正B-1の場合と同様の計算処理により、補正B-2での生起確率総和を求める。そして、コンピュータは、補正B-2での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B-2での生起確率総和が1以下の最大漸近値に収束していなければ、補正B-の3回目(補正B-3)に移行する。最大漸近値に収束した場合は、補正B-3に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B-2で更新された生起確率総和「0.982」は1以下であるが、最大漸近値に収束しているかが不明であるため、補正B-3に移行する。
補正B-3では、圧縮符号長ごとの補正B-2での葉数を、前回の補正(この場合は補正B-2)の生起確率総和(0.982)で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B-2での圧縮符号長の上限長N(N=11ビット)については、前回の補正(この場合は補正B-2)の生起確率総和(0.982)で割ることはせず、葉の総数(1305個)から、補正B-3での圧縮符号長ごとの葉の総数(圧縮符号長の上限長Nの葉数除く)を引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1215個である。
このあと、コンピュータは、補正B-2の場合と同様の計算処理により、補正B-3での生起確率総和を求める。そして、コンピュータは、補正B-3での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B-3での生起確率総和が1以下の最大漸近値に収束していなければ、補正B-の4回目(補正B-4)に移行する。最大漸近値に収束した場合は、補正B-4に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B-3で更新された生起確率総和「0.982」は、補正B-2で更新された生起確率総和「0.982」と同じ値である。すなわち、補正B-3での各圧縮符号長の葉数と補正B-2での各圧縮符号長の葉数とは同じである。この場合、コンピュータは、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。
このようにして、葉数が確定するまで補正B-を継続することとなる。図19の例では、補正B-3で圧縮符号長ごとの葉数が確定したこととなる。このあと、コンピュータは、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長N(この場合はN=11ビット)から降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。
図20は、文字情報ごとの補正結果を示す説明図である。図20において、文字情報テーブルには、補正A、補正B-1〜補正B-2までの補正結果が追加されている。図19に示したように、補正により圧縮符号長別の葉数が更新されるため、順位項目の1位の文字情報から短い圧縮符号長が割り当てられることとなる。
たとえば、補正B-2で確定した場合、圧縮符号長6ビットでは葉数が6、圧縮符号長7ビットでは葉数が18、…、圧縮符号長11ビットでは葉数が1215となっている。したがって、順位が1位から6位までの文字情報(葉数6個分)については6ビットの圧縮符号長、順位が7位から24位までの文字情報(葉数18個分)については7ビットの圧縮符号長、…、順位が91位から1305位までの文字情報(葉数1215個分)については11ビットの圧縮符号長が割り当てられる。
そして、コンピュータは、文字情報と文字情報に割り当てられた圧縮符号長と圧縮符号長ごとの葉数とに基づいて、文字情報ごとに圧縮符号を割り当て、葉の構造体を生成することとなる。たとえば、出現率1位の高位文字「0」は5ビットの圧縮符号長が割り当てられているため、圧縮符号が「000000」となる。したがって、圧縮符号「000000」、圧縮符号長「6」、文字情報「0」を含む葉L1の構造体が生成されることとなる。
<(6)葉へのポインタ生成の詳細(N=11)>
図21は、葉へのポインタ生成の詳細(N=11)を示す説明図である。図21は、圧縮符号長の上限Nが11ビットの場合の葉へのポインタを示している。図21において、圧縮符号長が6ビットの葉数は6個であるため、圧縮符号は「000000」〜「000101」が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、32本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、32(=25)個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続5ビットが32種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。
図21は、葉へのポインタ生成の詳細(N=11)を示す説明図である。図21は、圧縮符号長の上限Nが11ビットの場合の葉へのポインタを示している。図21において、圧縮符号長が6ビットの葉数は6個であるため、圧縮符号は「000000」〜「000101」が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、32本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、32(=25)個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続5ビットが32種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。
なお、図示はしないが、圧縮符号長が7ビットの葉数は18個であるため、圧縮符号「0001100」〜「0011111」が割り当てられる。また、圧縮符号長が7ビットの葉当たりの枝数は、16本である。したがって、圧縮符号長が7ビットの圧縮符号についての葉へのポインタは、16(=24)個生成される。具体的には、葉へのポインタの先頭7ビットが圧縮符号で後続4ビットが16種のビット列となる。したがって、圧縮符号長が7ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。
同様に、圧縮符号長が8ビットの葉数は23個であるため、圧縮符号「01000000」〜「01010110」が割り当てられる。また、圧縮符号長が8ビットの葉当たりの枝数は、8本である。したがって、圧縮符号長が8ビットの圧縮符号についての葉へのポインタは、8(=23)個生成される。具体的には、葉へのポインタの先頭8ビットが圧縮符号で後続3ビットが8種のビット列となる。したがって、圧縮符号長が8ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。
同様に、圧縮符号長が9ビットの葉数は23個であるため、圧縮符号「010101110」〜「011000100」が割り当てられる。また、圧縮符号長が9ビットの葉当たりの枝数は、4本である。したがって、圧縮符号長が9ビットの圧縮符号についての葉へのポインタは、4(=22)個生成される。具体的には、葉へのポインタの先頭9ビットが圧縮符号で後続2ビットが4種のビット列となる。したがって、圧縮符号長が9ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。
同様に、圧縮符号長が10ビットの葉数は20個であるため、圧縮符号「0110000110」〜「0110011101」が割り当てられる。また、圧縮符号長が10ビットの葉当たりの枝数は、2本である。したがって、圧縮符号長が10ビットの圧縮符号についての葉へのポインタは、2(=21)個生成される。具体的には、葉へのポインタの先頭10ビットが圧縮符号で後続1ビットが2種のビット列となる。したがって、圧縮符号長が10ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。
同様に、圧縮符号長が11ビットの葉数は1215個であるため、圧縮符号「01100111100」〜「11111111010」が割り当てられる。また、圧縮符号長が11ビットの葉当たりの枝数は、1本である。したがって、圧縮符号長が11ビットの圧縮符号についての葉へのポインタは、1(=20)個生成される。具体的には、圧縮符号がそのまま葉へのポインタとなる。したがって、圧縮符号長が11ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。
<(7)2N分枝無節点ハフマン木の構築の詳細(N=11)>
図22は、図13の(7)2N分枝無節点ハフマン木の構築の詳細(N=11)を示す説明図である。図22では、N=11とした場合の2048(=211)分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
図22は、図13の(7)2N分枝無節点ハフマン木の構築の詳細(N=11)を示す説明図である。図22では、N=11とした場合の2048(=211)分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図21に示したように32個生成される。したがって、葉L1の構造体については、根の構造体に32個の葉L1へのポインタL1P(1)〜L1P(32)が格納される。葉L2の構造体〜葉L6の構造体についても同様である。葉L7以降の構造体については、図22のとおりである。
<(3)葉数特定〜(5)葉の構造体生成の詳細(N=12)>
図23は、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=12)を示す説明図である。なお、N=12の場合は、図18の文字情報テーブルには、たとえば1024種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に1024種を追加した2329種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図18の総回数がかわるため、2329種の文字情報の生起確率も図18に示した値とは異なることとなる。
図23は、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=12)を示す説明図である。なお、N=12の場合は、図18の文字情報テーブルには、たとえば1024種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に1024種を追加した2329種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図18の総回数がかわるため、2329種の文字情報の生起確率も図18に示した値とは異なることとなる。
そして、コンピュータは、図19の場合と同様に、生起確率総和を求める。そして、コンピュータは、生起確率総和がしきい値t以上1以下であるか否かを判断する。しきい値t未満であれば、補正Bに移行する。しきい値t以上1以下である場合は、補正Bに移行せず、この時点での圧縮符号長ごとの葉数で確定する。
図23の例では、補正Aでの生起確率総和「0.823」はしきい値t未満であるとして、補正B+をおこなうこととする。
まず、補正B+の1回目(補正B+1)では、圧縮符号長ごとの補正Aの葉数を、前回の補正(この場合は補正A)の生起確率総和(0.823)で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Aでの圧縮符号長の上限長N(N=12ビット)については、前回の補正(この場合は補正A)の生起確率総和(0.823)で割ることはせず、葉の総数(2329個)から、補正B+1での圧縮符号長ごとの葉の総数(圧縮符号長の上限長Nの葉数除く)を引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、2192個である。
このあと、コンピュータは、補正Aの場合と同様の計算処理により、補正B+1での生起確率総和を求める。そして、コンピュータは、補正B+1での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B+1での生起確率総和が1以下の最大漸近値に収束していなければ、補正B+の2回目(補正B+2)に移行する。1以下の最大漸近値に収束した場合は、補正B+2に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B+1で更新された生起確率総和「0.861」は1以下であるが、最大漸近値に収束しているかが不明であるため、補正B+2に移行する。
補正B+2では、圧縮符号長ごとの補正B+1での葉数を、前回の補正(この場合は補正B+1)の生起確率総和(0.861)で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B+2での圧縮符号長の上限長N(N=12ビット)については、前回の補正(この場合は補正B+1)の生起確率総和(0.861)で割ることはせず、葉の総数(2329個)から、補正B+2での圧縮符号長ごとの葉の総数(圧縮符号長の上限長Nの葉数除く)を引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、2173個である。
このあと、コンピュータは、補正B+1の場合と同様の計算処理により、補正B+2での生起確率総和を求める。そして、コンピュータは、補正B+2での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B+2での生起確率総和が1以下の最大漸近値に収束していなければ、補正B+の3回目(補正B+3)に移行する。1以下の最大漸近値に収束した場合は、補正B+3に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B+2で更新された生起確率総和「0.897」は1以下であるが、補正B+1で更新された生起確率総和「0.861」よりも大きい。すなわち、補正B+1での生起確率総和は最大漸近値ではなく、補正B+2での生起確率総和は最大漸近値に収束しているかが不明であるため、補正B+3に移行する。
このようにして、葉数が確定するまで補正B+を継続することとなる。図23の例では、補正B+10で更新された生起確率総和「0.984」は、補正B+11で更新された生起確率総和「0.984」と同じ値である。すなわち、補正B+10での各圧縮符号長の葉数と補正B+11での各圧縮符号長の葉数とは同じである。この場合、コンピュータは、補正B+10において、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。
このあと、コンピュータは、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長N(この場合はN=12ビット)から降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。
<(6)葉へのポインタ生成の詳細(N=12)>
図24は、葉へのポインタ生成の詳細(N=12)を示す説明図である。図24は、圧縮符号長の上限Nが12ビットの場合の葉へのポインタを示している。図24において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号「000000」,「000001」が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、64本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、64(=26)個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続6ビットが64種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、64種の葉へのポインタが生成されることとなる。
図24は、葉へのポインタ生成の詳細(N=12)を示す説明図である。図24は、圧縮符号長の上限Nが12ビットの場合の葉へのポインタを示している。図24において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号「000000」,「000001」が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、64本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、64(=26)個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続6ビットが64種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、64種の葉へのポインタが生成されることとなる。
また、図示はしないが、圧縮符号長が7ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が8ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が9ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が10ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が11ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が12ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。
<(7)2N分枝無節点ハフマン木の構築の詳細(N=12)>
図25は、(7)2N分枝無節点ハフマン木の構築の詳細(N=12)を示す説明図である。図25では、N=12とした場合の4096(=212)分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
図25は、(7)2N分枝無節点ハフマン木の構築の詳細(N=12)を示す説明図である。図25では、N=12とした場合の4096(=212)分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、64個生成される。したがって、葉L1の構造体については、根の構造体に64個の葉L1へのポインタL1P(1)〜L1P(64)が格納される。葉L2の構造体についても同様である。葉L3以降の構造体については、図25のとおりである。
<(3)葉数特定〜(5)葉の構造体生成の詳細(N=13)>
図26は、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=13)を示す説明図である。なお、N=13の場合は、図18の文字情報テーブルには、たとえば4096種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に4096種を追加した5401種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図18の総回数がかわるため、5401種の文字情報の生起確率も図19に示した値とは異なることとなる。図26に示した例では、補正Aでの生起確率総和が「0.877」であるため、補正B+が行われることとなる。
図26は、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=13)を示す説明図である。なお、N=13の場合は、図18の文字情報テーブルには、たとえば4096種の基礎単語のレコードも追加されることとなる。基礎単語は、1305種の文字コード、分割文字コード、予約語よりも、出現回数が低いこととする。したがって、1305種に4096種を追加した5401種の文字情報についての文字情報テーブルが生成されているものとする。また、基礎単語の追加により、図18の総回数がかわるため、5401種の文字情報の生起確率も図19に示した値とは異なることとなる。図26に示した例では、補正Aでの生起確率総和が「0.877」であるため、補正B+が行われることとなる。
<(6)葉へのポインタ生成の詳細(N=13)>
図27は、葉へのポインタ生成の詳細(N=13)を示す説明図である。図27は、圧縮符号長の上限NがN=13ビットの場合の葉へのポインタを示している。図27において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号「000000」,「000001」が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、128本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、128(=27)個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続7ビットが128種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、128種の葉へのポインタが生成されることとなる。
図27は、葉へのポインタ生成の詳細(N=13)を示す説明図である。図27は、圧縮符号長の上限NがN=13ビットの場合の葉へのポインタを示している。図27において、圧縮符号長が6ビットの葉数は2個であるため、圧縮符号「000000」,「000001」が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、128本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、128(=27)個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続7ビットが128種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、128種の葉へのポインタが生成されることとなる。
図示はしないが、圧縮符号長が7ビットの圧縮符号の各々について、64種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が8ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が9ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が10ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が11ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が12ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が13ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。
<(7)2N分枝無節点ハフマン木の構築の詳細(N=13)>
図28は、図13の(7)2N分枝無節点ハフマン木の構築の詳細(N=13)を示す説明図である。図28では、N=13とした場合の8192(=213)分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
図28は、図13の(7)2N分枝無節点ハフマン木の構築の詳細(N=13)を示す説明図である。図28では、N=13とした場合の8192(=213)分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、128個生成される。したがって、葉L1の構造体については、根の構造体に128個の葉L1へのポインタL1P(1)〜L1P(128)が格納される。葉L2の構造体についても同様である。葉L3以降の構造体については、図28のとおりである。
<葉の構造体>
図29は、葉の構造体を示す説明図である。葉の構造体は、第1領域〜第4領域を有するデータ構造体である。葉の構造体は、第1領域には、圧縮符号およびその圧縮符号長が格納される。第2領域には、葉の標識と伸長種別(図18参照)が格納される。第3領域には、伸長種別に応じて高位文字である16ビットの高位文字、低位文字の文字コードが分割された8ビットの分割文字コード、または特殊単語へのポインタが格納される。特殊単語へのポインタにより特殊単語の構造体100内の特殊単語が指定される。また、照合フラグも格納されている。照合フラグはデフォルトでは「0」である。「0」の場合は、照合/置換テーブルTを参照せず、「1」の場合は、照合/置換テーブルTを参照する。
図29は、葉の構造体を示す説明図である。葉の構造体は、第1領域〜第4領域を有するデータ構造体である。葉の構造体は、第1領域には、圧縮符号およびその圧縮符号長が格納される。第2領域には、葉の標識と伸長種別(図18参照)が格納される。第3領域には、伸長種別に応じて高位文字である16ビットの高位文字、低位文字の文字コードが分割された8ビットの分割文字コード、または特殊単語へのポインタが格納される。特殊単語へのポインタにより特殊単語の構造体100内の特殊単語が指定される。また、照合フラグも格納されている。照合フラグはデフォルトでは「0」である。「0」の場合は、照合/置換テーブルTを参照せず、「1」の場合は、照合/置換テーブルTを参照する。
第4領域には、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または特殊単語へのポインタであるかを識別する情報である。符号区分とは、文字コードが16ビットであるか8ビットであるかを識別する情報である。16ビットの文字コードである場合または特殊単語である場合、符号区分として“1”を割り当て、8ビットの分割文字コードの場合、符号区分として“0”を割り当てる。
<文字コードの構造体>
図30は、高位文字コードの構造体500を示す説明図である。高位文字コードの構造体500は、高位文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、高位文字コードの構造体500に高位文字コードe♯を格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、高位文字コードの構造体500における高位文字コードe♯へのポインタを格納する。また、高位文字コードe♯へのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各高位文字コードe♯に対応する葉へのポインタを、高位文字コードの構造体500内の対応する高位文字コードe♯に関連付けて格納する。これにより、高位文字コードの構造体500が生成される。
図30は、高位文字コードの構造体500を示す説明図である。高位文字コードの構造体500は、高位文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、高位文字コードの構造体500に高位文字コードe♯を格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、高位文字コードの構造体500における高位文字コードe♯へのポインタを格納する。また、高位文字コードe♯へのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各高位文字コードe♯に対応する葉へのポインタを、高位文字コードの構造体500内の対応する高位文字コードe♯に関連付けて格納する。これにより、高位文字コードの構造体500が生成される。
図31は、分割文字コードの構造体600を示す説明図である。分割文字コードの構造体600は、分割文字コードとその葉L♯へのポインタを格納する。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、分割文字コードの構造体600に分割文字コードを格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、分割文字コードの構造体600における分割文字コードへのポインタを格納する。また、分割文字コードへのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各分割文字コードに対応する葉へのポインタを、分割文字コードの構造体600内の対応する分割文字コードに関連付けて格納する。これにより、分割文字コードの構造体600が生成される。
図32および図33は、特殊単語の構造体100を示す説明図である。図32では、特殊単語が予約語のみであり、図33では、特殊単語は予約語および基礎単語である。特殊単語の構造体100は、特殊単語とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、特殊単語の構造体100に特殊単語を格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、特殊単語の構造体100における特殊単語へのポインタを格納する。また、特殊単語へのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各特殊単語に対応する葉へのポインタを、特殊単語の構造体100内の対応する特殊単語に関連付けて格納する。これにより、特殊単語の構造体100が生成される。
<コンピュータのハードウェア構成>
図34は、実施の形態にかかるコンピュータのハードウェア構成例を示すブロック図である。図34において、コンピュータは、CPU(Central Processing Unit)3401と、ROM(Read Only Memory)3402と、RAM(Random Access Memory)3403と、磁気ディスクドライブ3404と、磁気ディスク3405と、光ディスクドライブ3406と、光ディスク3407と、ディスプレイ3408と、I/F(Interface)3409と、キーボード3410と、マウス3411と、スキャナ3412と、プリンタ3413と、を備えている。また、各構成部はバス3400によってそれぞれ接続されている。
図34は、実施の形態にかかるコンピュータのハードウェア構成例を示すブロック図である。図34において、コンピュータは、CPU(Central Processing Unit)3401と、ROM(Read Only Memory)3402と、RAM(Random Access Memory)3403と、磁気ディスクドライブ3404と、磁気ディスク3405と、光ディスクドライブ3406と、光ディスク3407と、ディスプレイ3408と、I/F(Interface)3409と、キーボード3410と、マウス3411と、スキャナ3412と、プリンタ3413と、を備えている。また、各構成部はバス3400によってそれぞれ接続されている。
ここで、CPU3401は、コンピュータの全体の制御を司る。ROM3402は、ブートプログラムなどのプログラムを記憶している。RAM3403は、CPU3401のワークエリアとして使用される。磁気ディスクドライブ3404は、CPU3401の制御にしたがって磁気ディスク3405に対するデータのリード/ライトを制御する。磁気ディスク3405は、磁気ディスクドライブ3404の制御で書き込まれたデータを記憶する。
光ディスクドライブ3406は、CPU3401の制御にしたがって光ディスク3407に対するデータのリード/ライトを制御する。光ディスク3407は、光ディスクドライブ3406の制御で書き込まれたデータを記憶したり、光ディスク3407に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ3408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ3408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)3409は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク3414に接続され、このネットワーク3414を介して他の装置に接続される。そして、I/F3409は、ネットワーク3414と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F3409には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード3410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス3411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ3412は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ3412は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ3413は、画像データや文書データを印刷する。プリンタ3413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
なお、本実施の形態にかかる生成プログラムや、上述した2N分枝無節点ハフマン木、高位文字コードの構造体500、分割文字コードの構造体600、特殊単語の構造体100は、上述したRAM3403や磁気ディスク3405などの記憶装置に記憶される。
<コンピュータの機能的構成例>
図35は、コンピュータの機能的構成例を示すブロック図(その1)である。コンピュータは、集計部3501と、決定部3502と、補正部3503と、算出部3504と、判断部3505と、更新部3506と、生成部3507と、特定部3508と、構築部3509と、を備える。集計部3501〜構築部3509は、具体的には、たとえば、図34に示したROM3402、RAM3403、磁気ディスク3405、光ディスク3407などの記憶装置に記憶されたプログラムをCPU3401に実行させることにより、その機能を実現する。
図35は、コンピュータの機能的構成例を示すブロック図(その1)である。コンピュータは、集計部3501と、決定部3502と、補正部3503と、算出部3504と、判断部3505と、更新部3506と、生成部3507と、特定部3508と、構築部3509と、を備える。集計部3501〜構築部3509は、具体的には、たとえば、図34に示したROM3402、RAM3403、磁気ディスク3405、光ディスク3407などの記憶装置に記憶されたプログラムをCPU3401に実行させることにより、その機能を実現する。
集計部3501は、データを集計する機能を有する。具体的には、対象ファイル群Fsを読み込んで、単一文字の出現回数を集計する。たとえば、図13に示したように、集計部3501は、出現回数を降順にソートして、所定順位(たとえば、1024位)までを高位文字コードとする。所定順位よりも下位の単一文字は、上位8ビットと下位8ビットに分割して、それぞれ8ビットの分割文字コードとして再集計される。
また、集計部3501は、最長一致検索処理をおこなうことにより、特殊単語を特定し、特殊単語についても出現回数を集計する。そして、集計部3501は、高位文字コード、分割文字コード、特殊単語を混在させて出現回数を再ソートする。これにより、図18に示した順位項目、伸長種別項目、コード項目、文字項目、出現回数項目が得られる。
また、集計部3501は、文字情報ごとの出現回数が得られた場合、全文字情報の出現回数の総和を総回数として算出する。そして、集計部3501は、文字情報ごとに、出現回数を総回数で割ることで、出現率を算出する。集計部3501は、算出された出現率に応じた生起確率を、図13の「(2)圧縮符号長算出」の項で説明したように特定し、そのべき数を圧縮符号長とする。これにより、文字情報ごとに圧縮符号長が特定されたこととなる(図18を参照)。そして、集計部3501は、図18の文字情報テーブルを参照して、圧縮符号長ごとに文字情報の種類数(図18に示した補正前の葉数)を集計する。
決定部3502は、対象ファイルに出現する文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、文字情報に割り当てられる圧縮符号長の上限長Nを決定する機能を有する。具体的には、たとえば、決定部3502は、文字情報の総種類数が2K-1個より大きく2K個以下である場合は、上限長NをKビットに決定する。たとえば、文字情報の総種類数が210個より大きく211個以下である場合は、決定部3502は、上限長Nを11ビットに決定することとなる。
また、文字情報の総種類数が211個より大きく212個以下である場合は、決定部3502は、上限長Nを12ビットに決定することとなる。また、文字情報の総種類数が212個より大きく213個以下である場合は、決定部3502は、上限長Nを13ビットに決定することとなる。ここで、文字コードの種別ごとの文字情報の分類について説明する。
図36は、UTF16での文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大4096種の基礎単語が含まれている。基礎単語を入れない場合は、予約語のみの25種となる。UTF16において、基礎単語を含めない場合の文字情報の最大総数は、1305個である。したがって、210<1305≦211となるため、上限長NはN=11ビットに決定される。また、基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。また、基礎単語を4096個含める場合の文字情報の最大総数は、5401個である。したがって、212<5401≦213となるため、上限長NはN=13ビットに決定される。
図37は、ASCIIコードでの文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大2048種の基礎単語が含まれている。基礎単語を1024個含める場合の文字情報の最大総数は、1305個である。したがって、210<1305≦211となるため、上限長NはN=11ビットに決定される。基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。
図38は、シフトJISコードでの文字情報の分類例を示す説明図である。特殊単語には、25種の予約語と最大4096種の基礎単語が含まれている。また、シフトJISコードの場合、日本語の文字は2つの8ビットコードの組み合わせで表現されるため、偶数個の単語(文字列)とみなされる。基礎単語を2048個含める場合の文字情報の最大総数は、3353個である。したがって、211<3353≦212となるため、上限長NはN=12ビットに決定される。また、基礎単語を4096個含める場合の文字情報の最大総数は、5401個である。したがって、212<5401≦213となるため、上限長NはN=13ビットに決定される。
また、図35において、補正部3503は、集計部3501によって集計された圧縮符号長ごとの文字情報の種類数のうち、決定部3502によって決定された上限長Nを圧縮符号長とする文字情報の種類数を、上限長N以上の圧縮符号長での文字情報の種類数の総和に補正する機能を有する。具体的には、たとえば、補正部3503は、上述した補正Aによる補正処理を実行する。
算出部3504は、補正部3503による補正後の上限長Nまでの各圧縮符号長を規定する各生起確率の総和を算出する機能を有する。具体的には、たとえば、図19、図23、図26に示した生起確率総和を算出する。
判断部3505は、算出部3504によって算出された生起確率総和がしきい値t以上1以下であるか否かを判断する機能を有する。しきい値tは、0<t≦1の値であり、あらかじめ設定される。しきい値tを1としてもよい。しきい値t以上1以下である場合は、補正部3503による補正後の圧縮符号長ごとの文字情報の種類数を、圧縮符号長ごとの葉数として確定させてもよい。
一方、しきい値t未満である場合、まだ、生起確率総和を増加させることが可能であるため、上述した補正B+を実行することが可能となる。また、生起確率総和が1よりも大きくなった場合は、上述した補正B-を実行することが可能となる。
更新部3506は、判断部3505によってしきい値t以上1以下でないと判断された場合、上限長Nまでの各圧縮符号長の文字情報の種類数を、生起確率総和で割ることにより、上限長Nまでの各圧縮符号長の文字情報の種類数を更新する機能を有する。具体的には、たとえば、更新部3506は、しきい値t未満と判断された場合は補正B+を開始し、1より大きいと判断された場合は補正B-を開始する。
この場合、算出部3504は、更新後における上限長Nまでの各圧縮符号長の文字情報の種類数に基づいて、生起確率総和を再算出する。そして、判断部3505は、算出部3504によって再算出された生起確率総和については、1以下の最大値が得られたか、具体的には、たとえば、1以下の最大漸近値に収束したか否かを判断することとなる。
生成部3507は、文字情報に圧縮符号を割り当てた葉の構造体を生成する機能を有する。具体的には、たとえば、生成部3507による生成の条件は、判断部3505によって補正Aによりしきい値t以上1以下であると判断された場合、または、補正Bにより1以下の最大値が得られたと判断された場合である。そして、当該条件を満たした場合、生成部3507は、具体的には、たとえば、上限長Nまでの圧縮符号長と、上限長Nまでの圧縮符号長ごとの文字情報の種類数と、文字情報の出現率と、に基づいて、文字情報ごとに圧縮符号を割り付ける。そして、生成部3507は、割り付けた圧縮符号、その圧縮符号長、文字情報を含む葉の構造体を生成する。
より具体的には、まず、出現率により順位付けされた文字情報群のうち第1位から昇順に文字情報を選択する。そして、生成部3507は、その選択文字情報の圧縮符号長を特定して、その圧縮符号長となる固有の圧縮符号を割り当てる。
たとえば、出現回数第1位の文字情報は、高位文字の「0」である。N=12の場合、圧縮符号長は6ビットであるため、固有の圧縮符号「000000」が割り当てられることとなる。次に、出現回数第2位の文字情報は、高位文字の「>」である。N=12の場合、圧縮符号長は6ビットであるため、固有の圧縮符号「000001」が割り当てられることとなる。
このようにして、出現回数の順位の昇順で圧縮符号を割り当てる。圧縮符号が決まると、生成部3507は、文字情報ごとに、その文字情報や圧縮符号長、伸長種別などをまとめて葉の構造体を生成することとなる。
特定部3508は、上限長Nまでの圧縮符号長に基づいて、生成部3507によって生成された葉の構造体1つ当たりの枝数を、上限長Nまでの圧縮符号長ごとに特定する機能を有する。具体的には、たとえば、特定部3508は、図19、図23、図26に示したように、葉当たりの枝数を、圧縮符号長ごとに特定する。
構築部3509は、2N分枝無節点ハフマン木を構築する機能を有する。具体的には、たとえば、構築部3509は、葉の構造体内の圧縮符号に特定部3508によって特定された枝数分の枝番号をあらわす各ビット列を連結した葉へのポインタ群を、葉の構造体ごとに生成する。たとえば、N=11の場合は、図21に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、N=12の場合は、図24に示したように、葉へのポインタ群を葉の構造体ごとに生成する。また、N=13の場合は、図27に示したように、葉へのポインタ群を葉の構造体ごとに生成する。
また、構築部3509は、各葉の構造体についての葉へのポインタ群を根とする2N分枝無節点ハフマン木を構築する。具体的には、たとえば、N=11の場合は、図22に示したように、211分枝無節点ハフマン木を構築する。N=12の場合は、図25に示したように、212分枝無節点ハフマン木を構築する。N=13の場合は、図28に示したように、213分枝無節点ハフマン木を構築する。
<2N分枝無節点ハフマン木の生成処理手順>
図39は、2N分枝無節点ハフマン木の生成処理手順(前半)を示すフローチャートである。まず、図39において、コンピュータは、集計部3501により、第1集計処理(ステップS3901)と第2集計処理(ステップS3902)を実行する。第1集計処理(ステップS3901)では、各文字情報の出現回数を集計する。第2集計処理(ステップS3902)では、圧縮符号長ごとの文字情報の種類数を集計する。第1集計処理(ステップS3901)と第2集計処理(ステップS3902)の詳細については後述する。
図39は、2N分枝無節点ハフマン木の生成処理手順(前半)を示すフローチャートである。まず、図39において、コンピュータは、集計部3501により、第1集計処理(ステップS3901)と第2集計処理(ステップS3902)を実行する。第1集計処理(ステップS3901)では、各文字情報の出現回数を集計する。第2集計処理(ステップS3902)では、圧縮符号長ごとの文字情報の種類数を集計する。第1集計処理(ステップS3901)と第2集計処理(ステップS3902)の詳細については後述する。
つぎに、コンピュータは、決定部3502により、圧縮符号長の上限長Nを決定する(ステップS3903)。このNが後述する補正Aでの最大圧縮符号長となる。そして、コンピュータは、全文字情報の圧縮符号長がNビット以内であるか否かを判断する(ステップS3904)。
Nビット以内でない場合(ステップS3904:No)、コンピュータは、補正部3503により、補正A処理を実行する(ステップS3905)。具体的には、コンピュータは、上限長Nが最大圧縮符号長となるように、Nビット以上の各圧縮符号長での文字情報の種類数(葉数)の総和を求め、この総和を、圧縮符号長Nビットでの文字情報の種類数に補正する。したがって、(N+1)ビット以上の圧縮符号長での文字情報の種類数は0となり、最大圧縮符号長がNビットとなる。このあと、ステップS3906に移行する。
一方、Nビット以内である場合(ステップS3904:Yes)、コンピュータは、補正A処理(ステップS3905)を実行せずに、ステップS3906に移行する。ステップS3906では、コンピュータは、算出部3504により、圧縮符号長ごとの生起確率を算出し(ステップS3906)、算出された圧縮符号長ごとの生起確率の総和(生起確率総和TOP)を算出する(ステップS3907)。そして、図40のステップS4001に移行する。
図40は、2N分枝無節点ハフマン木の生成処理手順(後半)を示すフローチャートである。コンピュータは、判断部3505により、算出された生起確率総和TOPが、t≦TOP≦1であるか否かを判断する(ステップS4001)。tは上述したしきい値である。t≦TOP≦1でない場合(ステップS4001:No)、コンピュータは、判断部3505により、t>TOPであるか否かを判断する(ステップS4002)。t>TOPである場合(ステップS4002:Yes)、コンピュータは、更新部3506により、補正B+処理を実行する(ステップS4003)。補正B+処理(ステップS4003)の詳細については後述する。補正B+処理のあとは、ステップS4005に移行する。
一方、ステップS4002において、t>TOPでない場合(ステップS4002:No)、コンピュータは、更新部3506により、補正B-処理を実行する(ステップS4004)。補正B-処理(ステップS4004)の詳細については後述する。補正B-処理のあとは、ステップS4005に移行する。また、ステップS4001において、t≦TOP≦1である場合(ステップS4001:Yes)、ステップS4005に移行する。
また、ステップS4005において、コンピュータは、生成部3507により、文字情報ごとに葉の構造体を生成する(ステップS4005)。そして、コンピュータは、特定部3508により、枝数特定処理を実行する(ステップS4006)。枝数特定処理(ステップS4006)では、圧縮符号長ごとの葉当たりの枝数を特定する。枝数特定処理(ステップS4006)の詳細については後述する。
そして、コンピュータは、構築部3509により、構築処理を実行する(ステップS4007)。枝数特定処理(ステップS4006)により葉の構造体ごとの枝数が特定されるため、まず、構築部3509は、葉の構造体ごとに、枝数分の葉へのポインタ群を生成する。そして、生成された各葉の構造体についての葉へのポインタ群を集約して根の構造体とする。これにより、2N分枝無節点ハフマン木が生成されることとなる。なお、生成された2N分枝無節点ハフマン木は、コンピュータ内の記憶装置(RAM3403や磁気ディスク3405など)に格納される。
<第1集計処理(ステップS3901)>
図41は、図39に示した第1集計処理(ステップS3901)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、ファイル番号iをi=1に設定し(ステップS4101)、対象ファイルFiを読み込む(ステップS4102)。そして、コンピュータは、対象ファイルFiの集計処理を実行する(ステップS4103)。このあと、コンピュータは、ファイル番号iがi>n(nは対象ファイルF1〜Fnの総数)であるか否かを判断する(ステップS4104)。
図41は、図39に示した第1集計処理(ステップS3901)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、ファイル番号iをi=1に設定し(ステップS4101)、対象ファイルFiを読み込む(ステップS4102)。そして、コンピュータは、対象ファイルFiの集計処理を実行する(ステップS4103)。このあと、コンピュータは、ファイル番号iがi>n(nは対象ファイルF1〜Fnの総数)であるか否かを判断する(ステップS4104)。
i>nでない場合(ステップS4104:No)、コンピュータは、iをインクリメントし(ステップS4105)、ステップS4102に戻る。一方、i>nである場合(ステップS4104:Yes)、コンピュータは、第2集計処理(ステップS3902)に移行して、第1集計処理(ステップS3901)を終了する。この第1集計処理(ステップS3901)によれば、対象ファイルFiごとに対象ファイルFiの集計処理(ステップS4103)を実行することができる。
<対象ファイルFiの集計処理(ステップS4103)>
図42は、図41に示した対象ファイルFiの集計処理(ステップS4103)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字を対象ファイルFiの先頭文字とし(ステップS4201)、特殊単語集計処理を実行する(ステップS4202)。特殊単語集計処理(ステップS4202)では、対象文字を先頭文字とする特殊単語の出現回数を集計する。特殊単語集計処理(ステップS4202)の詳細については、図43で説明する。このあと、コンピュータは、対象文字の出現回数を1増加する(ステップS4203)。
図42は、図41に示した対象ファイルFiの集計処理(ステップS4103)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字を対象ファイルFiの先頭文字とし(ステップS4201)、特殊単語集計処理を実行する(ステップS4202)。特殊単語集計処理(ステップS4202)では、対象文字を先頭文字とする特殊単語の出現回数を集計する。特殊単語集計処理(ステップS4202)の詳細については、図43で説明する。このあと、コンピュータは、対象文字の出現回数を1増加する(ステップS4203)。
つぎに、コンピュータは、対象文字の出現マップ生成処理を実行する(ステップS4204)。対象文字の出現マップ生成処理(ステップS4204)では、対象ファイルFiでの対象文字の存否を示す出現マップを生成する。対象文字の出現マップ生成処理(ステップS4204)の詳細については、図46で説明する。そして、コンピュータは、対象文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS4205)。
対象文字が対象ファイルFiの末尾文字でない場合(ステップS4205:No)、コンピュータは、対象文字を末尾方向へ1文字シフトし(ステップS4206)、ステップS4202に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合(ステップS4205:Yes)、コンピュータは、ステップS4104に移行して、対象ファイルFiの集計処理(ステップS4103)を終了する。この対象ファイルFiの集計処理(ステップS4103)によれば、対象ファイル群Fsに存在する特殊単語および単一文字の出現頻度を集計することができる。
<特殊単語集計処理(ステップS4202)>
図43は、図42に示した特殊単語集計処理(ステップS4202)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、最長一致検索処理を実行し(ステップS4301)、最長一致した特殊単語があったか否かを判断する(ステップS4302)。最長一致した特殊単語があった場合(ステップS4302:Yes)、コンピュータは、特殊単語出現頻度テーブルにおいて最長一致した特殊単語の出現回数を1増加し(ステップS4303)、コンピュータは、特殊単語の出現マップ生成処理を実行する(ステップS4304)。特殊単語の出現マップ生成処理(ステップS4304)では、対象ファイルFiでの対象文字を先頭文字とする特殊単語の存否を示す出現マップを生成する。特殊単語の出現マップ生成処理(ステップS4304)の詳細については、図45で説明する。このあと、ステップS4203に移行する。
図43は、図42に示した特殊単語集計処理(ステップS4202)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、最長一致検索処理を実行し(ステップS4301)、最長一致した特殊単語があったか否かを判断する(ステップS4302)。最長一致した特殊単語があった場合(ステップS4302:Yes)、コンピュータは、特殊単語出現頻度テーブルにおいて最長一致した特殊単語の出現回数を1増加し(ステップS4303)、コンピュータは、特殊単語の出現マップ生成処理を実行する(ステップS4304)。特殊単語の出現マップ生成処理(ステップS4304)では、対象ファイルFiでの対象文字を先頭文字とする特殊単語の存否を示す出現マップを生成する。特殊単語の出現マップ生成処理(ステップS4304)の詳細については、図45で説明する。このあと、ステップS4203に移行する。
一方、最長一致した特殊単語がなかった場合(ステップS4302:No)、ステップS4203に移行する。これにより、特殊単語集計処理(ステップS4202)を終了する。この特殊単語集計処理(ステップS4202)によれば、最長一致検索処理(ステップS4301)により特殊単語を計数することができるため、文字列が長い特殊単語を優先的に計数することができる。
<最長一致検索処理(ステップS4301)>
図44は、図43に示した最長一致検索処理(ステップS4301)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、c=1とする(ステップS4401)。cは対象文字からの文字数(対象文字含む)である。c=1の場合は、対象文字だけである。つぎに、コンピュータは、対象文字からc文字目までの対象文字列と前方一致する特殊単語を2分探索する(ステップS4402)。そして、コンピュータは、検索により特殊単語があるか否かを判断する(ステップS4403)。2分探索により特殊単語がヒットしなかった場合(ステップS4403:No)、ステップS4406に移行する。
図44は、図43に示した最長一致検索処理(ステップS4301)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、c=1とする(ステップS4401)。cは対象文字からの文字数(対象文字含む)である。c=1の場合は、対象文字だけである。つぎに、コンピュータは、対象文字からc文字目までの対象文字列と前方一致する特殊単語を2分探索する(ステップS4402)。そして、コンピュータは、検索により特殊単語があるか否かを判断する(ステップS4403)。2分探索により特殊単語がヒットしなかった場合(ステップS4403:No)、ステップS4406に移行する。
一方、2分探索により特殊単語がヒットした場合(ステップS4403:Yes)、コンピュータは、ヒットした特殊単語と対象文字列とが完全一致するか否かを判断する(ステップS4404)。そして、完全一致しない場合(ステップS4404:No)、ステップS4406に移行する。一方、完全一致する場合(ステップS4404:Yes)、コンピュータは、最長一致候補として記憶装置に保持し(ステップS4405)、ステップS4406に移行する。
ステップS4406では、コンピュータは、対象文字列について2分探索が終了したか否かを判断する(ステップS4406)。具体的には、コンピュータは、末尾の特殊単語まで2分探索したか否かを判断する。2分探索が終了していない場合(ステップS4406:No)、コンピュータは、ステップS4402に移行して、2分探索が終了するまで継続する。
一方、対象文字列について2分探索が終了した場合(ステップS4406:Yes)、コンピュータは、c文字目の文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS4407)。c文字目の文字が対象ファイルFiの末尾文字である場合(ステップS4407:Yes)、ステップS4410に移行する。一方、c文字目の文字が対象ファイルFiの末尾文字でない場合(ステップS4407:No)、コンピュータは、c>cmaxであるか否かを判断する(ステップS4408)。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。
c>cmaxでない場合(ステップS4408:No)、コンピュータは、cをインクリメントして(ステップS4409)、ステップS4402に戻る。一方、c>cmaxである場合(ステップS4408:Yes)、コンピュータは、最長一致候補があるか否かを判断する(ステップS4410)。具体的には、コンピュータは、ステップS4405において1つでも最長一致候補がメモリに保持されているか否かを判断する。
最長一致候補がある場合(ステップS4410:Yes)、コンピュータは、最長一致候補のうち最長文字列を、最長一致した特殊単語に決定する(ステップS4411)。そして、ステップS4302に移行する。一方、ステップS4410において、最長一致候補が1つもない場合(ステップS4410:No)、ステップS4302に移行する。これにより、最長一致検索処理(ステップS4301)を終了する。この最長一致検索処理(ステップS4301)によれば、特殊単語構造体にある特殊単語の中から、完全一致した文字列の中でかつ最長の文字列を特殊単語として検索することができる。
図45は、図43に示した特殊単語の出現マップ生成処理(ステップS4304)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、最長一致した特殊単語について、特殊単語の出現マップがあるか否かを判断する(ステップS4501)。すなわち、コンピュータは、すでに特殊単語の出現マップが生成済みであるか否かを判断する。最長一致した特殊単語について、特殊単語の出現マップがない場合(ステップS4501:No)、コンピュータは、当該特殊単語の出現マップを設定する(ステップS4502)。具体的には、コンピュータは、特殊単語の出現マップ群の割り当て領域内でのオール0の空きビット列を、当該特殊単語の出現マップとして割り当てる。
そして、コンピュータは、ステップS4502で設定された特殊単語の出現マップのうち、対象ファイルFiのビットをONにする(ステップS4503)。そして、ステップS4203に移行する。一方、ステップS4501において、最長一致した特殊単語の出現マップがある場合(ステップS4501:Yes)、コンピュータは、その特殊単語の出現マップのうち、対象ファイルFiのビットがONであるか否かを判断する(ステップS4504)。そして、OFFの場合(ステップS4504:No)、ステップS4503に移行し、ONの場合(ステップS4504:Yes)、ステップS4203に移行することで、特殊単語の出現マップ生成処理(ステップS4304)を終了する。これにより、特殊単語の出現マップが生成されることとなる。
図46は、図42に示した対象文字の出現マップ生成処理(ステップS4204)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、高位文字コードの構造体500において、対象文字を2分探索する(ステップS4601)。そして、ヒットした場合(ステップS4602:Yes)、コンピュータは、対象文字の出現マップがあるか否かを判断する(ステップS4603)。すなわち、コンピュータは、すでに生成済みであるか否かを判断する。対象文字の出現マップがない場合(ステップS4603:No)、コンピュータは、対象文字の出現マップを設定する(ステップS4604)。具体的には、コンピュータは、対象文字の出現マップ群の割り当て領域内でのオール0の空きビット列を、当該対象文字の出現マップとして割り当てる。
そして、コンピュータは、ステップS4604で設定された対象文字の出現マップのうち、対象ファイルFiのビットをONにする(ステップS4605)。そして、ステップS4602に移行する。一方、ステップS4603において、対象文字の出現マップがある場合(ステップS4603:Yes)、コンピュータは、その対象文字の出現マップのうち、対象ファイルFiのビットがONであるか否かを判断する(ステップS4606)。そして、OFFの場合(ステップS4606:No)、ステップS4605に移行し、ONの場合(ステップS4606:Yes)、ステップS4602に移行する。
また、ステップS4602において、ヒットしなかった場合(ステップS4602:No)、コンピュータは、対象文字についての2分探索が終了したか否かを判断する(ステップS4607)。2分探索が終了していない場合(ステップS4607:No)、ステップS4602に戻る。一方、2分探索が終了した場合(ステップS4607:Yes)、ステップS4205に移行することで、対象文字の出現マップ生成処理(ステップS4204)を終了する。これにより、対象文字の出現マップが生成されることとなる。
<第2集計処理(ステップS3902)>
図47は、図39に示した第2集計処理(ステップS3902)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、文字情報ごとに出現率を算出する(ステップS4701)。つぎに、コンピュータは、未選択文字情報があるか否かを判断する(ステップS4702)。未選択文字情報がある場合(ステップS4702:Yes)、コンピュータは、出現率が最上位の未選択文字情報を選択する(ステップS4703)。そして、コンピュータは、選択文字情報の出現率に応じて生起確率および圧縮符号長を特定し(ステップS4704)、ステップS4702に戻る。
図47は、図39に示した第2集計処理(ステップS3902)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、文字情報ごとに出現率を算出する(ステップS4701)。つぎに、コンピュータは、未選択文字情報があるか否かを判断する(ステップS4702)。未選択文字情報がある場合(ステップS4702:Yes)、コンピュータは、出現率が最上位の未選択文字情報を選択する(ステップS4703)。そして、コンピュータは、選択文字情報の出現率に応じて生起確率および圧縮符号長を特定し(ステップS4704)、ステップS4702に戻る。
そして、ステップS4702において、未選択文字情報がない場合(ステップS4702:No)、コンピュータは、圧縮符号長ごとに文字情報の種類数を計数する(ステップS4705)。これにより、圧縮符号長ごとの葉数(文字情報の種類数)が特定されることとなる。
<補正B+処理(ステップS4003)>
図48は、図40に示した補正B+処理(ステップS4003)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、更新処理を実行する(ステップS4801)。更新処理(ステップS4801)の詳細については後述する。つぎに、コンピュータは、更新処理(ステップS4801)後において、更新前後で葉数の変動があるか否かを判断する(ステップS4802)。変動がある場合(ステップS4802:Yes)、まだ、生起確率総和TOPが1以下の最大漸近値に収束していないため、更新処理(ステップS4801)に戻る。
図48は、図40に示した補正B+処理(ステップS4003)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、更新処理を実行する(ステップS4801)。更新処理(ステップS4801)の詳細については後述する。つぎに、コンピュータは、更新処理(ステップS4801)後において、更新前後で葉数の変動があるか否かを判断する(ステップS4802)。変動がある場合(ステップS4802:Yes)、まだ、生起確率総和TOPが1以下の最大漸近値に収束していないため、更新処理(ステップS4801)に戻る。
一方、変動がない場合(ステップS4802:No)、これ以上更新処理(ステップS4801)をしても葉数が変動しない。すなわち、前回の補正B+で最大漸近値に収束したこととなり、コンピュータは、今回の更新処理(ステップS4801)での圧縮符号長ごとの葉数で確定させ(ステップS4803)、ステップS4005に移行する。これにより、生起確率総和TOPを増加させて、1に漸近させることができ、圧縮効率の向上を図ることができる。
<補正B-処理(ステップS4004)>
図49は、図40に示した補正B-処理(ステップS4004)の詳細な処理手順を示すフローチャートである。補正B-処理(ステップS4004)は、図48に示した補正B+処理(ステップS4003)と同一内容であるため、同一処理には同一ステップ番号を付す。補正B-処理(ステップS4004)は、補正B+処理(ステップS4003)と同一内容であるが、扱う生起確率総和TOPは1より大きい値であり、更新処理(ステップS4801)を繰り返すことで、ある時点の補正B-で生起確率総和TOPが1を下回ることとなる。
図49は、図40に示した補正B-処理(ステップS4004)の詳細な処理手順を示すフローチャートである。補正B-処理(ステップS4004)は、図48に示した補正B+処理(ステップS4003)と同一内容であるため、同一処理には同一ステップ番号を付す。補正B-処理(ステップS4004)は、補正B+処理(ステップS4003)と同一内容であるが、扱う生起確率総和TOPは1より大きい値であり、更新処理(ステップS4801)を繰り返すことで、ある時点の補正B-で生起確率総和TOPが1を下回ることとなる。
生起確率総和TOPが1未満となると、補正B+の場合と同様、1以下の最大漸近値に収束するまで、更新処理(ステップS4801)を繰り返すこととなる。これにより、1より大きい生起確率総和TOPを減少させて、1に漸近させることができ、圧縮効率の向上を図ることができる。
<更新処理(ステップS4801)>
図50は、図48および図49に示した更新処理(ステップS4801)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、未選択の圧縮符号長があるか否かを判断する(ステップS5001)。未選択の圧縮符号長がある場合(ステップS5001:Yes)、コンピュータは、未選択の中で最短の圧縮符号長を1つ選択する(ステップS5002)。コンピュータは、選択圧縮符号長が上限長N(補正Aでの最長圧縮符号長)であるか否かを判断する(ステップS5003)。
図50は、図48および図49に示した更新処理(ステップS4801)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、未選択の圧縮符号長があるか否かを判断する(ステップS5001)。未選択の圧縮符号長がある場合(ステップS5001:Yes)、コンピュータは、未選択の中で最短の圧縮符号長を1つ選択する(ステップS5002)。コンピュータは、選択圧縮符号長が上限長N(補正Aでの最長圧縮符号長)であるか否かを判断する(ステップS5003)。
選択圧縮符号長が上限長Nでない場合(ステップS5003:No)、コンピュータは、選択圧縮符号長の葉数(文字情報の種類数)を、生起確率総和TOPで割る(ステップS5004)。生成部3507は、選択圧縮符号長の葉数をこの割り算結果の値に更新する(ステップS5005)。割り算結果の値については、小数点以下は切り捨て、四捨五入、切り上げのいずれでもよい。そして、ステップS5001に戻る。
また、ステップS5003において、選択圧縮符号長が上限長Nである場合(ステップS5003:Yes)、コンピュータは、葉数の総和から、ステップS5005で更新済みの葉数の総和を引くことにより、選択圧縮符号長(この場合は、上限長N)の葉数を引き算結果の値に更新する(ステップS5006)。そして、ステップS5001に戻る。
ステップS5001において、未選択の圧縮符号長(上限長N以下の圧縮符号長)がない場合(ステップS5001:No)、コンピュータは、葉数の更新後における生起確率総和TOPを算出し(ステップS5007)、図48および図49のステップS4802に移行する。
<枝数特定処理(ステップS4006)>
図51は、図40に示した枝数特定処理(ステップS4006)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、特定部3508により、最大圧縮符号長CLmax(=N)と最小圧縮符号長CLmin(=M)との差分D(=N−M)を算出する(ステップS5101)。たとえば、N=11の場合、図19を参照すると、M=6である。したがって、D=5である。
図51は、図40に示した枝数特定処理(ステップS4006)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、特定部3508により、最大圧縮符号長CLmax(=N)と最小圧縮符号長CLmin(=M)との差分D(=N−M)を算出する(ステップS5101)。たとえば、N=11の場合、図19を参照すると、M=6である。したがって、D=5である。
つぎに、コンピュータは、2のべき数の変数jをj=0とし、圧縮符号長の変数CLをCL=Nとする(ステップS5102)。そして、コンピュータは、j>Dであるか否かを判断する(ステップS5103)。j>Dでない場合(ステップS5103:No)、コンピュータは、圧縮符号長CLの葉当たりの枝数b(CL)を算出する(ステップS5104)。圧縮符号長CLの葉当たりの枝数b(CL)は、b(CL)=2jで算出される。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの葉当たりの枝数b(11)は、b(11)=2j=20=1となる。
つぎに、コンピュータは、圧縮符号長CLの総枝数B(L)を算出する(ステップS5105)。圧縮符号長CLの総枝数B(L)は、B(L)=L(CL)×b(CL)で算出される。L(CL)は、圧縮符号長CLでの葉数(文字情報の種類数)である。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの総枝数B(L)は、1216×20=1216となる。
このあと、コンピュータは、jをインクリメントし、圧縮符号長CLをデクリメントして(ステップS5106)、ステップS5103に戻り、インクリメント後のjがj>Dであるか否かが判断される。なお、N=11の場合は、j=Dになるとj=D=5となり、CL=M=6となる。したがって、ステップS5104では、圧縮符号長CL(5ビット)当たりの枝数b(6)は、b(6)=26=64となる。同様に、総枝数B(L)は、B(6)=0×26=0となる。そして、j>Dである場合(ステップS5103:Yes)、構築処理(ステップS4007)に移行する。
<構築処理(ステップS4007)>
図52は、図40に示した構築処理(ステップS4007)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、圧縮符号長CLをCL=CLmin=Mとする(ステップS5201)。つぎに、コンピュータは、圧縮符号長CLでの未選択の葉があるか否かを判断する(ステップS5202)。未選択の葉がある場合(ステップS5202:Yes)、コンピュータは、葉へのポインタ生成処理(ステップS5203)を実行して、ステップS5202に戻る。葉へのポインタ生成処理(ステップS5203)では、葉の構造体ごとに、圧縮符号長CLに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理(ステップS5203)の詳細については後述する。
図52は、図40に示した構築処理(ステップS4007)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、圧縮符号長CLをCL=CLmin=Mとする(ステップS5201)。つぎに、コンピュータは、圧縮符号長CLでの未選択の葉があるか否かを判断する(ステップS5202)。未選択の葉がある場合(ステップS5202:Yes)、コンピュータは、葉へのポインタ生成処理(ステップS5203)を実行して、ステップS5202に戻る。葉へのポインタ生成処理(ステップS5203)では、葉の構造体ごとに、圧縮符号長CLに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理(ステップS5203)の詳細については後述する。
一方、ステップS5202において、未選択の葉がない場合(ステップS5202:No)、コンピュータは、CL>Nであるか否かを判断する(ステップS5204)。CL>Nでない場合(ステップS5204:No)、コンピュータは、CLをインクリメントして(ステップS5205)、ステップS5202に戻る。一方、CL>Nである場合(ステップS5204:Yes)、2N分枝無節点ハフマン木が構築されたこととなり、一連処理が終了することとなる。
<葉へのポインタ生成処理(ステップS5203)>
図53は、図52に示した葉へのポインタ生成処理(ステップS5203)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、未選択の葉Lを選択し(ステップS5301)、選択葉へのポインタ数kをk=1に設定する(ステップS5302)。そして、コンピュータは、選択葉へのポインタPL(k)の先行ビット列を、選択葉の圧縮符号に設定する(ステップS5303)。たとえば、上限長N=11については、選択葉が、文字情報「0」の葉の構造体である場合、圧縮符号は「000000」である。したがって、選択葉へのポインタPL(k)の先行ビット列も、図21に示したように、「000000」となる。
図53は、図52に示した葉へのポインタ生成処理(ステップS5203)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、未選択の葉Lを選択し(ステップS5301)、選択葉へのポインタ数kをk=1に設定する(ステップS5302)。そして、コンピュータは、選択葉へのポインタPL(k)の先行ビット列を、選択葉の圧縮符号に設定する(ステップS5303)。たとえば、上限長N=11については、選択葉が、文字情報「0」の葉の構造体である場合、圧縮符号は「000000」である。したがって、選択葉へのポインタPL(k)の先行ビット列も、図21に示したように、「000000」となる。
つぎに、コンピュータは、選択葉へのポインタPL(k)の後続ビット列のビット長を、最大圧縮符号長Nから選択葉の圧縮符号長CLを引いた差分とし、後続ビット列の初期値をオール0に設定する(ステップS5304)。たとえば、選択葉が、文字情報「0」の葉の構造体である場合、圧縮符号長CLは6ビットであるため、後続ビット列のビット長は5ビット(=11−6)となる。k=1の場合は、後続ビット列はオール0となるため、後続ビット列は、5ビットの「00000」となる。
そして、コンピュータは、選択葉へのポインタPL(k)を根の構造体に格納する(ステップS5305)。このあと、コンピュータは、k>b(CL)であるか否かを判断する(ステップS5306)。b(CL)は、選択葉の圧縮符号長CLの葉当たりの枝数である。k>b(CL)でない場合(ステップS5306:No)、選択葉に割り当てられたすべての枝について葉へのポインタが生成されていないため、コンピュータは、kをインクリメントする(ステップS5307)。
そして、コンピュータは、現在の後続ビット列をインクリメントして、インクリメント後の後続ビット列を先行ビット列の末端に連結することで、あらたに、選択葉へのポインタPL(k)を生成する(ステップS5308)。そして、コンピュータは、選択葉へのポインタPL(k)を根の構造体に格納し(ステップS5309)、ステップS5306に戻る。ステップS5306〜ステップS5309を繰り返すことで、葉当たりの枝数分の葉へのポインタ群が生成されることとなる。そして、ステップS5306において、k>b(CL)である場合(ステップS5306:Yes)、ステップS5202に移行する。
このように、対象ファイル群Fsに出現する文字情報の種類数に応じて、2N分枝無節点ハフマン木の最大枝数2Nを最適な本数に設定することができるため、2N分枝無節点ハフマン木のサイズの適正化を図ることができる。また、本実施の形態によれば、上限長Nが2〜4の整数倍でない場合(たとえば、上限長N=11,13)であっても、圧縮効率のよい2N分枝無節点ハフマン木を生成することができる。
このあと、コンピュータは、2N分枝無節点ハフマン木の各葉の構造体と、特殊単語の構造体100,高位文字コードの構造体500,分割文字コードの構造体600とを、図18の文字情報テーブルを参照して、相互に関連付ける。具体的には、上述したように、葉の構造体には、当該葉に格納されている圧縮符号に対応する高位文字、分割文字コードおよびへのポインタや特殊単語へのポインタを格納する。
また、コンピュータは、特殊単語の構造体100の特殊単語ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータは、高位文字コードの構造体500の高位文字ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータは、分割文字コードの構造体600の分割文字コードごとに、対応する圧縮符号を格納する葉へのポインタを格納する。なお、分割文字コードの構造体600は、必ずしも生成する必要はなく、出現頻度が所定回数に満たない場合であっても、高位文字コードの構造体500として登録してもよい。
<補正B処理の他の例>
つぎに、補正B処理の他の例について説明する。上述した補正B+処理および補正B-処理では、圧縮符号長の葉数ごとに、各圧縮符号長の葉数を生起確率総和で割ることにより、各圧縮符号長の葉数を更新することとした。これに対し、本例では、最小圧縮符号長CLminから最大圧縮符号長CLmax(すなわち、上限長N)に向かって、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも増減するように、葉数を移動させる。
つぎに、補正B処理の他の例について説明する。上述した補正B+処理および補正B-処理では、圧縮符号長の葉数ごとに、各圧縮符号長の葉数を生起確率総和で割ることにより、各圧縮符号長の葉数を更新することとした。これに対し、本例では、最小圧縮符号長CLminから最大圧縮符号長CLmax(すなわち、上限長N)に向かって、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも増減するように、葉数を移動させる。
具体的には、本例の補正B+処理では、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも減少するように、葉数を補正する。一方、本例の補正B-処理では、小さい圧縮符号長の葉数がそれより大きい圧縮符号長の葉数よりも増加するように、葉数を移動させる。その後は、補正後の葉数を生起確率総和で割ることで、各圧縮符号長の葉数を更新する。
なお、以下に説明する例では、ある圧縮符号長CLの葉数L(CL)を、圧縮符号長(CL+1)の葉数L(CL+1)よりも増加/減少するように補正をおこなう例について説明するが、圧縮符号長CLよりも大きい圧縮符号長(CL+2),(CL+3),…であってもよい。また、移動対象葉数の個数は、1個に限らず、2個以上でもよい。たとえば、移動元の圧縮符号長の葉数をすべて移動先に移動させてもよい。
図54は、補正B+処理(ステップS4003)の他の例の詳細な処理手順を示すフローチャートである。補正B+処理(ステップS4003)において、最小圧縮符号長CLminをMとする。また、最大圧縮符号長CLmaxは上限長Nとなる。図54では、葉数を1個ずつ移動させる例を示している。
まず、コンピュータは、圧縮符号長CLをCL=Mに設定する(ステップS5401)。つぎに、コンピュータは、圧縮符号長CLがCL=Nであるか否かを判断する(ステップS5402)。CL=Nでない場合(ステップS5402:No)、圧縮符号長CLが最大圧縮符号長CLmaxに到達していないこととなる。この場合、コンピュータは、葉数L(CL)がL(CL)=0であるか否かを判断する(ステップS5403)。
L(CL)=0の場合(ステップS5403:Yes)、移動させる葉数L(CL)がないため、コンピュータは、圧縮符号長CLをインクリメントし(ステップS5404)、ステップS5402に戻る。そして、圧縮符号長CLがCL=Nとなった場合(ステップS5402:Yes)、ステップS5413に移行し、コンピュータは、今回の補正における圧縮符号長ごとの葉数で確定させることとなる。
また、ステップS5403において、葉数L(CL)がL(CL)=0でない場合(ステップS5403:No)、コンピュータは、現在対象となっている圧縮符号長CLの葉数L(CL)をデクリメントし(ステップS5405)、移動先となる圧縮符号長(CL+1)の葉数L(CL+1)をインクリメントする(ステップS5406)。
そして、圧縮符号長CL,(CL+1)については、ステップS5405,ステップS5406において葉数が増減したため、コンピュータは、圧縮符号長CLについての生起確率と圧縮符号長(CL+1)についての生起確率とを再計算する(ステップS5407)。このあと、コンピュータは、各圧縮符号長CLmin〜CLmaxの最新の葉数での生起確率総和TOPを算出する(ステップS5408)。
そして、コンピュータは、算出されたTOPがt>TOPであるか否かを判断する(ステップS5409)。t>TOPである場合(ステップS5409:Yes)、まだ改善の余地があるため、ステップS5403に戻る。一方、t>TOPでない場合(ステップS5409:No)、コンピュータは、t≦TOP≦1であるか否かを判断する(ステップS5410)。t≦TOP≦1である場合(ステップS5410:Yes)、これ以上補正する必要がないため、ステップS5413に移行する。
一方、t≦TOP≦1でない場合(ステップS5410:No)、コンピュータは、現在対象となっている圧縮符号長Lの葉数L(CL)をインクリメントし(ステップS5411)、移動先の圧縮符号長(CL+1)の葉数L(CL+1)をデクリメントする(ステップS5412)。すなわち、t≦TOP≦1でない場合(ステップS5410:No)は、TOP>1であるため、今回の補正自体が失敗となる。
したがって、ステップS5405およびステップS5406での葉数移動を、ステップS5411およびステップS5412で元に戻すこととなる。このあと、ステップS5404に戻る。ステップS5404では、圧縮符号長CLがインクリメントされるため、葉数移動による生起確率の増加がインクリメント前の圧縮符号長CLに比べて1/2に抑えられる。したがって、葉数CLをインクリメントするほど、微調整が可能となり、より微小な補正幅でt≦TOP≦1に収めることができる。
また、ステップS5413になると、コンピュータは、そのときの圧縮符号長CLmin〜CLmaxごとの葉数L(CLmin)〜葉数L(CLmax)で確定させることとなる(ステップS5413)。その後、ステップS4005に移行することで、補正B+処理(ステップS4003)を終了する。
図55は、補正B-処理(ステップS4004)の他の例の詳細な処理手順を示すフローチャートである。補正B-処理(ステップS4004)は、図54に示した補正B+処理(ステップS4003)とほぼ同一内容であるため、同一処理には同一ステップ番号を付す。異なる点は、ステップS5505,ステップS5506,ステップS5509,ステップS5511,ステップS5512である。
まず、コンピュータは、圧縮符号長CLをCL=Mに設定する(ステップS5401)。つぎに、コンピュータは、圧縮符号長CLがCL=Nであるか否かを判断する(ステップS5402)。CL=Nでない場合(ステップS5402:No)、圧縮符号長CLが最大圧縮符号長CLmaxに到達していないこととなる。この場合、コンピュータは、葉数L(CL)がL(CL)=0であるか否かを判断する(ステップS5403)。
L(CL)=0の場合(ステップS5403:Yes)、移動させる葉数L(CL)がないため、コンピュータは、圧縮符号長CLをインクリメントし(ステップS5404)、ステップS5402に戻る。そして、圧縮符号長CLがCL=Nとなった場合(ステップS5402:Yes)、ステップS5413に移行し、コンピュータは、今回の補正における圧縮符号長ごとの葉数で確定させることとなる。
また、ステップS5403において、葉数L(CL)がL(CL)=0でない場合(ステップS5403:No)、コンピュータは、現在対象となっている圧縮符号長CLの葉数L(CL)をインクリメントし(ステップS5505)、移動先となる圧縮符号長(CL+1)の葉数L(CL+1)をデクリメントする(ステップS5506)。
そして、圧縮符号長CL,(CL+1)については、ステップS5505,ステップS5506において葉数が増減したため、コンピュータは、圧縮符号長CLについての生起確率と圧縮符号長(CL+1)についての生起確率とを再計算する(ステップS5407)。このあと、コンピュータは、各圧縮符号長CLmin〜CLmaxの最新の葉数での生起確率総和TOPを算出する(ステップS5408)。
そして、コンピュータは、算出されたTOPが1<TOPであるか否かを判断する(ステップS5509)。1<TOPである場合(ステップS5509:Yes)、まだ改善の余地があるため、ステップS5403に戻る。一方、1<TOPでない場合(ステップS5509:No)、コンピュータは、t≦TOP≦1であるか否かを判断する(ステップS5410)。t≦TOP≦1である場合(ステップS5410:Yes)、これ以上補正する必要がないため、ステップS5413に移行する。
一方、t≦TOP≦1でない場合(ステップS5410:No)、コンピュータは、現在対象となっている圧縮符号長Lの葉数L(CL)をデクリメントし(ステップS5511)、移動先の圧縮符号長(CL+1)の葉数L(CL+1)をインクリメントする(ステップS5512)。すなわち、t≦TOP≦1でない場合(ステップS5410:No)は、t>TOPであるため、今回の補正自体が失敗となる。
したがって、ステップS5505およびステップS5506での葉数移動を、ステップS5511およびステップS5512で元に戻すこととなる。このあと、ステップS5404に戻る。ステップS5404では、圧縮符号長CLがインクリメントされるため、葉数移動による生起確率の減少がインクリメント前の圧縮符号長CLに比べて1/2に抑えられる。したがって、葉数CLをインクリメントするほど、微調整が可能となり、より微小な補正幅でt≦TOP≦1に収めることができる。
また、ステップS5413になると、コンピュータは、そのときの圧縮符号長CLmin〜CLmaxごとの葉数L(CLmin)〜葉数L(CLmax)で確定させることとなる(ステップS5413)。その後、ステップS4005に移行することで、補正B-処理(ステップS4004)を終了する。
図56は、図54に示した補正B+処理の他の例を適用した場合における、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=12)を示す説明図である。図56では、移動元の圧縮符号長の葉数を、1ビット小さい移動先の圧縮符号長の葉数に1個ずつシフトさせた例を示している。図56では、図53におけるしきい値tをt=1とする。図56では、補正Aでの生起確率総和TOPが「0.823」であるため、補正B+処理が適用される。まず、移動先を最小圧縮符号長である6ビットとし、移動元を1ビット大きい7ビットとする。補正B+1では、圧縮符号長7ビットの葉数9を1つずつ、最小圧縮符号長6ビットに移動させる。
コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B+1では生起確率総和TOPが1を超えていない。そして、移動元の圧縮符号長7ビットの葉数が0になった場合、移動先の圧縮符号長6ビットの葉数は11(=9+2)となる。このときの補正B+1での生起確率総和TOPは「0.894」であるため、さらに補正B+が必要である。
補正B+2についても同様な処理をおこなうことで、補正B+2での生起確率総和TOPは「0.979」となり、さらに補正B+が必要である。つぎに、補正B+3についても同様な処理をおこなうことで、補正B+3での生起確率総和TOPは「0.999」となり、さらに補正B+が必要である。
つぎに、補正B+4についても同様な処理をおこなうことで、補正B+4での生起確率総和TOPは「1.000」となり、さらに補正B+が可能である。つぎに、補正B+5についても同様な処理をおこなうことで、補正B+5での生起確率総和TOPは「1.000」となり、さらに補正B+が必要である。つぎに、補正B+6では、移動先および移動元の圧縮符号長を1ビット大きくする。すなわち、移動先の圧縮符号長を10ビットから11ビットとし、移動元の圧縮符号長を11ビットから12ビットとする。
そして、移動元の圧縮符号長12ビットの葉数2214を1つずつ、補正B+5で葉数が24になった移動先の圧縮符号長11ビットに移動させる。コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、移動元の圧縮符号長12ビットの葉数が2214から2213になり、移動先の圧縮符号長11ビットの葉数が24から25になると、生起確率総和TOPが1を超える。したがって、それぞれ葉数を1つ戻すこととなる。戻した葉数は、補正B+5終了時点での葉数となる。補正B+5終了時点での生起確率総和TOPは「1.000」である。本例では、これ以上、移動元の圧縮符号長を大きくすることができないため、補正B+5終了時点での葉数が確定することとなる。
図57は、上述した補正B-処理の他の例を適用した場合における、図13の(3)葉数特定〜(5)葉の構造体生成の詳細(N=11)を示す説明図である。図57では、移動元の圧縮符号長の葉数をすべて、1ビット大きい移動先の圧縮符号長の葉数にシフトさせた例を示している。図57では、図55におけるしきい値tをt=1とする。図57では、補正Aでの生起確率総和TOPが「1.146」であるため、補正B-処理が適用される。まず、移動元を最小圧縮符号長である5ビットとし、移動先を1ビット大きい6ビットとする。補正B-1では、移動元の圧縮符号長5ビットの葉数2を1つずつ、圧縮符号長6ビットに移動させる。
コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B-1では生起確率総和TOPが1以下にならない。そして、移動元の圧縮符号長5ビットの葉数が0になった場合、移動先の圧縮符号長6ビットの葉数は11(=9+2)となる。このときの補正B-1での生起確率総和TOPは「1.115」であるため、さらに補正B-が必要である。
つぎに、補正B-2についても同様な処理をおこなうことで、補正B-2での生起確率総和TOPは「1.029」となり、さらに補正B-が必要である。
つぎに、補正B-3では、移動元および移動先の圧縮符号長を1ビット大きくする。すなわち、移動元の圧縮符号長を6ビットから7ビットとし、移動先の圧縮符号長を7ビットから8ビットとする。
そして、移動元の圧縮符号長7ビットの葉数33を1つずつ、移動先の圧縮符号長8ビットの葉数28に移動させる。コンピュータは、この移動ごとに、生起確率総和TOPを求めて、1以下の最大漸近値に収束するか否かを判断することとなる。本例において、補正B-3では、移動元である圧縮符号長7ビットの葉数が25、移動先である圧縮符号長8ビットの葉数が36に到達すると、生起確率総和TOPが1以下の「0.998」となる。これ以上葉数移動をしても、生起確率総和TOPが低下するため、このときの各圧縮符号長の葉数で確定させることとなる。
<圧縮処理>
つぎに、上述した2N分枝無節点ハフマン木を用いた対象ファイル群Fsの圧縮処理について説明する。圧縮処理は、コンピュータが実行してもよく、また、2N分枝無節点ハフマン木が格納された情報処理装置が実行してもよい。すなわち、少なくとも2N分枝無節点ハフマン木が格納されていればよい。以下、コンピュータおよび情報処理装置を総称してコンピュータとする。ここで、まず、圧縮対象文字列とその圧縮符号を例に挙げて説明する。
つぎに、上述した2N分枝無節点ハフマン木を用いた対象ファイル群Fsの圧縮処理について説明する。圧縮処理は、コンピュータが実行してもよく、また、2N分枝無節点ハフマン木が格納された情報処理装置が実行してもよい。すなわち、少なくとも2N分枝無節点ハフマン木が格納されていればよい。以下、コンピュータおよび情報処理装置を総称してコンピュータとする。ここで、まず、圧縮対象文字列とその圧縮符号を例に挙げて説明する。
図58は、圧縮対象文字列の一例を示す説明図である。図58では、「婚活は結婚活動」という文字列の16ビットコード(16進と2進)を示している。
図59は、図58に示した圧縮対象文字列の圧縮符号を示す説明図である。図59に示した圧縮符号は、図28に示した2N分枝無節点ハフマン木(N=13)を用いて圧縮した例を示している。図59では、図58と比較すると、文字「婚」は、低出現頻度文字であるため、上位8ビットの分割文字コード「0x5A」が12ビットの圧縮符号に圧縮されている。また、下位8ビットの分割文字コード「0x5A」も12ビットの圧縮符号に圧縮されている。高位文字「活」は、16ビットから9ビットに圧縮されている。高位文字「は」は、16ビットから9ビットに圧縮されている。
「結婚」は基礎単語に該当するため、32ビットから13ビットに圧縮されている。また、「活動」は、基礎単語に該当するため、32ビットから13ビットに圧縮されている。
なお、分割文字コードについては、圧縮後のほうがビット長が長いが、「婚」のような単一文字はそもそも出現回数が少ないために分割されているため、対象ファイル群Fs全体で見れば問題ない。また、基礎単語は、そのビット列に比べて圧縮符号が非常に短くなるため(最大でも13ビット)、2文字(高位文字)以上であれば十分圧縮効率が向上することとなる。
<圧縮処理の具体例>
図60は、2N分枝無節点ハフマン木を用いた圧縮処理の具体例を示す説明図である。まず、コンピュータは、対象ファイル群Fsから1文字目の圧縮対象文字コードを取得し、対象ファイル上の位置を保持しておく。そして、コンピュータは、特殊単語の構造体100に対して2分木探索をおこなう。特殊単語は2文字以上の文字コード列であるため、1文字目の圧縮対象文字コードがヒットした場合、2文字目の文字コードを圧縮対象文字コードとして取得する。
図60は、2N分枝無節点ハフマン木を用いた圧縮処理の具体例を示す説明図である。まず、コンピュータは、対象ファイル群Fsから1文字目の圧縮対象文字コードを取得し、対象ファイル上の位置を保持しておく。そして、コンピュータは、特殊単語の構造体100に対して2分木探索をおこなう。特殊単語は2文字以上の文字コード列であるため、1文字目の圧縮対象文字コードがヒットした場合、2文字目の文字コードを圧縮対象文字コードとして取得する。
そして、2文字目の文字コードは、1文字目の圧縮対象文字コードがヒットした位置から探索する。3文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し2分木探索をおこなう。一致する特殊単語ra(aは葉の番号)が探索された場合、特殊単語の構造体100において対応付けされている葉Laへのポインタにより葉Laの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Laの構造体に格納されている特殊単語raの圧縮符号を探索して、圧縮バッファ6000に格納する。
一方、不一致の圧縮文字コードが出現した場合、特殊単語の構造体100に対する2分木探索を終了する(EOT(End Of Transmission)まで進む)。そして、コンピュータは、1文字目の圧縮対象文字コードを再度レジスタにセットして、高位文字コードの構造体500に対する2分木探索をおこなう。
一致する文字コードeb(bは葉の番号)が探索された場合、コンピュータは、その葉Lbへのポインタにより葉Lbの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lbの構造体に格納されている文字コードebの圧縮符号を探索して、圧縮バッファ6000に格納する。
一方、一致する文字コードが出現せず2分木探索を終了した場合、圧縮対象文字コードは高位文字コードではないため、コンピュータは、上位8ビットと下位8ビットに分割する。そして、コンピュータは、上位8ビットの分割文字コードについて、分割文字コードの構造体600に対する2分木探索をおこなう。一致する分割文字コードDc1(c1は葉の番号)が探索された場合、コンピュータは、その葉Lc1へのポインタにより葉Lc1の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc1の構造体に格納されている分割文字コードDc1の圧縮符号を探索して、圧縮バッファ6000に格納する。
引き続き、コンピュータは、下位8ビットの分割文字コードについて、分割文字コードの構造体600に対する2分木探索をおこなう。一致する分割文字コードDc2(c2は葉の番号)が探索された場合、コンピュータは、その葉Lc2へのポインタにより葉Lc2の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc2の構造体に格納されている分割文字コードDc2の圧縮符号を探索して、圧縮バッファ6000に格納する。
<ファイル圧縮処理>
図61は、コンピュータが自動実行する2N分枝無節点ハフマン木を用いたファイル圧縮処理手順を示すフローチャートである。まず、コンピュータは、ファイル番号:pをp=1とし(ステップS6101)、対象ファイルFpを読み込む(ステップS6102)。つぎに、コンピュータは、圧縮処理を実行して(ステップS6103)、ファイル番号:pをインクリメントする(ステップS6104)。そして、コンピュータは、p>nであるか否かを判断する(ステップS6105)。nは対象ファイル群Fsの総数である。p>nでない場合(ステップS6105:No)、ステップS6102に戻る。一方、p>nである場合(ステップS6105:Yes)、一連のファイル圧縮処理を終了する。
図61は、コンピュータが自動実行する2N分枝無節点ハフマン木を用いたファイル圧縮処理手順を示すフローチャートである。まず、コンピュータは、ファイル番号:pをp=1とし(ステップS6101)、対象ファイルFpを読み込む(ステップS6102)。つぎに、コンピュータは、圧縮処理を実行して(ステップS6103)、ファイル番号:pをインクリメントする(ステップS6104)。そして、コンピュータは、p>nであるか否かを判断する(ステップS6105)。nは対象ファイル群Fsの総数である。p>nでない場合(ステップS6105:No)、ステップS6102に戻る。一方、p>nである場合(ステップS6105:Yes)、一連のファイル圧縮処理を終了する。
図62は、図61に示した圧縮処理(ステップS6103)の詳細な処理手順を示すフローチャート(その1)である。図62において、まず、コンピュータは、対象ファイル群Fsに圧縮対象文字コードがあるか否かを判断する(ステップS6201)。ある場合(ステップS6201:Yes)、コンピュータは、圧縮対象文字コードを取得してレジスタにセットする(ステップS6202)。そして、コンピュータは、先頭の圧縮対象文字コードか否かを判断する(ステップS6203)。
ここで、先頭の圧縮対象文字コードとは、未圧縮の1文字目の文字コードをいう。先頭である場合(ステップS6203:Yes)、コンピュータは、その圧縮対象文字コードの対象ファイル群Fs上の位置(先頭位置)となるポインタを取得し(ステップS6204)、ステップS6205に移行する。一方、先頭でない場合(ステップS6203:No)、先頭位置を取得せずにステップS6205に移行する。
そして、コンピュータは、特殊単語の構造体100に対して2分木探索をおこなう(ステップS6205)。圧縮対象文字コードが一致した場合(ステップS6206:Yes)、コンピュータは、連続して一致した文字コード列が特殊単語(の文字コード列)に該当するか否かを判断する(ステップS6207)。該当しない場合(ステップS6207:No)、コンピュータは、ステップS6202に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。
一方、ステップS6207において、特殊単語に該当する場合(ステップS6207:Yes)、コンピュータは、該当する特殊単語の葉L♯へのポインタにより葉L♯の構造体にアクセスする(ステップS6208)。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている特殊単語の圧縮符号を抽出する(ステップS6209)。
この後、コンピュータは、抽出された圧縮符号を圧縮バッファ6000に格納して(ステップS6210)、ステップS6201に戻る。このループが特殊単語の圧縮処理の流れとなる。ステップS6201において、圧縮対象文字コードがない場合(ステップS6201:No)、コンピュータは、対象ファイルFpから圧縮された圧縮ファイルfpを圧縮バッファ6000からファイル出力して保存する(ステップS6211)。そして、ステップS6104に移行する。一方、ステップS6206において不一致となった場合(ステップS6206:No)、16ビットの文字コードの圧縮処理のループに入る。
図63は、図61に示した圧縮処理(ステップS6103)の詳細な処理手順を示すフローチャート(その2)である。図63において、コンピュータは、ステップS6204で取得された先頭位置のポインタを参照して、対象ファイル群Fsから圧縮対象文字コードを取得してレジスタにセットする(ステップS6301)。
つぎに、コンピュータは、圧縮対象文字コードについて、高位文字コードの構造体500に対して2分木探索をおこなう(ステップS6302)。一致した場合(ステップS6303:Yes)、コンピュータは、該当する文字の葉L♯へのポインタにより葉L♯の構造体にアクセスする(ステップS6304)。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出する(ステップS6305)。
この後、コンピュータは、探索された圧縮符号を圧縮バッファ6000に格納して(ステップS6306)、ステップS6201に戻る。このループが16ビットの文字コードの圧縮処理の流れとなる。一方、ステップS6303において一致する文字コードが存在しなかった場合(ステップS6303:No)、分割文字コードの圧縮処理のループに入る。
図64は、図61に示した圧縮処理(ステップS6103)の詳細な処理手順を示すフローチャート(その3)である。図64において、まず、コンピュータは、圧縮対象文字コードを上位8ビットと下位8ビットとに分割し(ステップS6401)、上位8ビットの分割文字コードを抽出する(ステップS6402)。そして、コンピュータは、分割文字コードの構造体600に対して2分木探索をおこなう(ステップS6403)。
そして、コンピュータは、探索された分割文字コードの葉L♯へのポインタにより葉L♯の構造体にアクセスする(ステップS6404)。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている分割文字コードの圧縮符号を抽出する(ステップS6405)。この後、コンピュータは、探索された圧縮符号を圧縮バッファ6000に格納する(ステップS6406)。
つぎに、コンピュータは、下位8ビットが探索済みか否かを判断し(ステップS6407)、探索済みでない場合(ステップS6407:No)、コンピュータは、下位8ビットの分割文字コードを抽出して(ステップS6408)、ステップS6403〜S6406を実行する。一方、下位8ビットが探索済みである場合(ステップS6407:Yes)、ステップS6201に戻り、特殊単語の圧縮処理のループに入る。
このように、2N分枝無節点ハフマン木を用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉L♯の構造体に格納されている文字情報を抽出して、圧縮バッファ6000に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。
また、圧縮対象文字コードが格納されている葉L♯の構造体を、特殊単語の構造体100、高位文字コードの構造体500および分割文字コードの構造体600により即座に特定することができる。したがって、2N分枝無節点ハフマン木の葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、6万種以上ある低位の文字コードをたかだか256種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。
<圧縮ファイルの絞込み例>
つぎに、圧縮ファイルの絞り込み例について説明する。対象ファイル群Fsは、2N分枝無節点ハフマン木で圧縮されて、圧縮ファイル群Fsとなっている。コンピュータは、圧縮ファイル群Fsの中から、検索文字列を2N分枝無節点ハフマン木で圧縮した圧縮文字列の各圧縮文字をすべて含む圧縮ファイルを絞り込む。圧縮ファイルの絞込みは、検索文字列を構成する文字情報の出現マップ群をAND演算する。
つぎに、圧縮ファイルの絞り込み例について説明する。対象ファイル群Fsは、2N分枝無節点ハフマン木で圧縮されて、圧縮ファイル群Fsとなっている。コンピュータは、圧縮ファイル群Fsの中から、検索文字列を2N分枝無節点ハフマン木で圧縮した圧縮文字列の各圧縮文字をすべて含む圧縮ファイルを絞り込む。圧縮ファイルの絞込みは、検索文字列を構成する文字情報の出現マップ群をAND演算する。
図65は、圧縮ファイルの絞込み例を示す説明図である。(A)は、検索文字列が「結婚」の場合の出現マップ群のAND演算結果を示している。検索文字列「結婚」の場合、基礎単語「結婚」の出現マップのみ取得する。(A)の例では、対象ファイルF3にのみ、検索文字列「結婚」が記述されていることがわかる。
(B)は、検索文字列が「結婚活動」の場合の出現マップ群のAND演算結果を示している。検索文字列「結婚活動」の場合、基礎単語「結婚」の出現マップと、基礎単語「活動」の出現マップと、のAND演算となる。(B)の例では、対象ファイルF3にのみ、検索文字列「結婚活動」が記述されていることがわかる。
(C)は、検索文字列が「婚活」の場合の出現マップ群のAND演算結果を示している。検索文字列「婚活」の場合、高位文字「活」の出現マップと、分割文字コード「0x5A」の出現マップと、のAND演算となる。(C)の例では、対象ファイルF1〜F3に、検索文字列「婚活」が記述されている可能性があることがわかる。このように、検索文字列が基礎単語に登録されていない場合は、基礎単語の出現マップが使えないため、圧縮ファイルの絞込みが甘くなる傾向があり、伸長対象となる圧縮ファイルが増加する。したがって、伸長速度の効率化を図る必要がある。
<伸長処理例>
つぎに、2N分枝無節点ハフマン木により圧縮された圧縮符号列を伸長する伸長処理例について説明する。
つぎに、2N分枝無節点ハフマン木により圧縮された圧縮符号列を伸長する伸長処理例について説明する。
図66〜図71は、圧縮符号列の伸長処理例を示す説明図である。図66〜図71では、圧縮ファイルを伸長する過程において、圧縮ファイル内の圧縮符号列と検索文字列「婚活」の圧縮符号列とを照合し、一致した場合には照合/置換テーブルT(T6)の置換文字列を伸長バッファに書き出す例を示す。なお、照合不一致の場合は、伸長された文字列を伸長バッファに書き出すこととなる。
また、伸長処理では、コンピュータは、レジスタr1に圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。コンピュータは、抽出した圧縮符号を、1パス(1枝分のアクセス)で2N分枝無節点ハフマン木の根から探索する。そして、コンピュータは、アクセスした葉L♯の構造体に格納されている文字コードを読み出して伸長バッファ6600に格納する。
圧縮符号を抽出するため、コンピュータは、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を“0xFFF10000”とする。このマスクパターンは先頭13ビットが“1”であり、後続の19ビットが“0”のビット列である。
コンピュータは、ビットアドレスabiとバイトオフセットbyosとビットオフセットbiosとを算出する。ビットアドレスabiは、抽出された圧縮符号のビット位置を示す値であり、今回のビットアドレスabiは、前回のビットアドレスabiに前回抽出された圧縮符号の圧縮符号長legを加算した値となる。なお、初期状態では、ビットアドレスabiはabi=0とする。
バイトオフセットbyosは、メモリに保持されている圧縮符号列のバイト境界を示す値であり、ビットアドレスabi/8の商で求められる。たとえば、バイトオフセットbyos=0のときは、メモリに記憶されている先頭からの圧縮符号列をレジスタにセットし、バイトオフセットbyos=1のときは、メモリに記憶されている先頭1バイト目からの圧縮符号列をレジスタにセットする。
また、ビットオフセットbiosは、マスクパターンのマスク位置(“FFF”)をオフセットする値であり、ビットアドレスabi/8の余りである。たとえば、ビットオフセットbios=0のときは、マスク位置はシフトされないこととなり、マスクパターンは、“0xFFF10000”となる。一方、ビットオフセットbios=4のときは、マスク位置は末尾方向に4ビットシフトすることとなり、マスクパターンは、“0x0FFF0000”となる。
レジスタシフト数rsは、マスクパターンとのAND演算後のレジスタr2内の圧縮符号列を末尾方向にシフトするビット数であり、rs=32−13−biosで求められる。このシフトにより、コンピュータは、シフト後のレジスタr2の末尾mビットのビット列を対象ビット列として抽出する。コンピュータは、対象ビット列の抽出後はレジスタr2をクリアする。
なお、図66〜図71において、メモリには図59に示した圧縮符号列が保持されているものとする。また、図66〜図71のメモリ内のブロックは1バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。
図66は、初期状態((A)の状態)を示している。(A)では、ビットアドレスabi=0により、バイトオフセットbyos=0、ビットオフセットbios=0となる。バイトオフセットbyos=0により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭から4バイト分(図中、網掛け)の圧縮符号列をレジスタr1にセットする。
また、ビットオフセットbios=0により、マスクパターンは、“0xFFF80000”であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン“0xFFF80000”を論理積(AND)演算することにより、レジスタr2においてAND結果が得られる。
また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32−m―bios=32−13−0=19となる。したがって、レジスタr2内のAND結果を末尾方向に19ビット分シフトする。このシフトによりレジスタr2には、“0101001101100”が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、“0101001101100”が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。
図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1〜L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列“0101001101100”と一致する葉L♯へのポインタを探索する。この場合、葉L#(0x5A)へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L#(0x5A)へのポインタを読み出して、葉L#(0x5A)の構造体にアクセスする。
葉L#(0x5A)の構造体には、分割文字コード「0x5A」へのポインタが格納されているため、コンピュータは、分割文字コードの構造体600の中から、分割文字コード“0x5A”へのポインタで分割文字コード「0x5A」を指定して、読み出す。
また、アクセス先となる葉L#(0x5A)の構造体においては、対象ビット列“0101001101100”のうち先頭12ビットの圧縮符号“010100110110”が格納されている。また、葉L#(0x5A)の構造体の照合フラグがONであるため、コンピュータは、葉L#(0x5A)の構造体の照合/置換テーブルTへのポインタp3により、当該ポインタp3のレコードと圧縮符号“010100110110”とを照合する。この場合、前方一致となるため、ポインタp3のレコードの指定中フラグをON(0⇒1)にする。
また、葉L#(0x5A)の構造体には、圧縮符号長leg(=12ビット)も格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=0+12=12となる。
図67は、図66に示した(A)の状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理((B)の状態)を示している。前回である(A)のビットアドレスabiはabi=0、圧縮符号長legは12ビットであるため、(B)のビットアドレスabiはabi=12ビットとなる。
また、このビットアドレスabi=12により、バイトオフセットbyos=1、ビットオフセットbios=4となる。バイトオフセットbyos=1により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭1バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタr2にセットする。
また、ビットオフセットbios=4により、マスクパターンは、“0x0FFF8000”であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン“0x0FFF8000”を論理積(AND)演算することにより、レジスタr2においてAND結果が得られる。
また、ビットオフセットbios=4により、レジスタシフト数rsは、rs=32−m―bios=32−13−4=15となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に15ビット分シフトする。このシフトによりレジスタr2には、“00000101001101100”が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、“0101001101100”が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。
図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1〜L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列“0101001101100”と一致する葉L♯へのポインタを探索する。この場合、対象ビット列“0101001101100”が葉L#(0x5A)へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L#(0x5A)へのポインタを読み出して、葉L#(0x5A)の構造体にアクセスする。
葉L#(0x5A)の構造体には、分割文字コード「0x5A」へのポインタが格納されているため、コンピュータは、分割文字コードの構造体600の中から、分割文字コード“0x5A”へのポインタで分割文字コード「0x5A」を指定して、読み出す。
また、アクセス先となる葉L#(0x5A)の構造体においては、対象ビット列“0101001101100”のうち先頭12ビットの圧縮符号“010100110110”が格納されている。したがって、コンピュータは、照合/置換テーブルTのうち指定中フラグがONになっているレコード、ここでは、ポインタp3のレコードと圧縮符号“010100110110”とを照合する。この照合は、指定中フラグがONのため、後方一致照合をおこなう。そして、後方一致するため、ポインタp3のレコードの置換文字列「<color>婚</color>」を伸長バッファ6600に書き出す。このあと、コンピュータは指定中フラグを0に戻す。
また、葉L#(0x5A)の構造体には、圧縮符号長leg(=12ビット)も格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=12+12=24となる。
図68は、図67に示した(B)の状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理((C)の状態)を示している。前回である(B)のビットアドレスabiはabi=12、圧縮符号長legは12ビットであるため、(C)のビットアドレスabiはabi=24ビットとなる。
また、このビットアドレスabi=24により、バイトオフセットbyos=3、ビットオフセットbios=0となる。バイトオフセットbyos=3により、メモリに保持されている圧縮符号列のうち先頭3バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタr1にセットする。
また、ビットオフセットbios=0により、マスクパターンは、“0xFFF80000”であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン“0xFFF80000”を論理積(AND)演算することにより、レジスタr2においてAND結果が得られる。
また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32−m―bios=32−13−0=19となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に19ビット分シフトする。このシフトによりレジスタr2には、“0011100100011”が残されるため、末尾13ビットを対象ビット列として抽出する。この場合は、“0011100100011”が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。
図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1〜L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体セルの中から、抽出された対象ビット列“0011100100011”と一致する葉L♯へのポインタを探索する。この場合、対象ビット列“0011100100011”が葉L#(活)へのポインタ群の中の1つと一致するため、コンピュータは、該当する葉L#(活)へのポインタを読み出して、葉L#(活)の構造体にアクセスする。
葉L#(活)の構造体には、高位文字「活」へのポインタが格納されているため、コンピュータは、高位文字コードの構造体500の中から、高位文字「活」へのポインタで高位文字「活」を指定して、読み出す。
また、アクセス先となる葉L#(活)の構造体においては、対象ビット列“0011100100011”のうち先頭9ビットの圧縮符号“001110010”が格納されている。また、葉L#(活)の構造体の照合フラグがONであるため、コンピュータは、葉L#(活)の構造体の照合/置換テーブルTへのポインタp4により、当該ポインタp4のレコードと圧縮符号“001110010”とを照合する。この場合、完全一致となるため、ポインタp4のレコードの置換文字列「<color>活</color>」を伸長バッファ6600に書き出す。
また、葉L#(活)の構造体には、圧縮符号長leg(=9ビット)も格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=24+9=33となる。
図69は、図68に示した(C)の状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理((D)の状態)を示している。前回である(C)のビットアドレスabiはabi=24、圧縮符号長legは9ビットであるため、(D)のビットアドレスabiはabi=33ビットとなる。
また、このビットアドレスabi=33により、バイトオフセットbyos=4、ビットオフセットbios=1となる。バイトオフセットbyos=4により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭4バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタr1にセットする。
また、ビットオフセットbios=1により、マスクパターンは、“0x07FFC000”であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン“0x07FFC000”を論理積(AND)演算することにより、AND結果が得られる。
また、ビットオフセットbios=1により、レジスタシフト数rsは、rs=32−m―bios=32−13−1=18となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に18ビット分シフトする。このシフトによりレジスタr2には、“00011100110101”が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、“0011100110101”が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。
図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1〜L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列“0011100110101”と一致する葉L♯へのポインタを探索する。この場合、対象ビット列“0011100110101”が葉L#(は)へのポインタ群の中の一つと一致するため、葉L#(は)へのポインタを読み出して、葉L#(は)の構造体にアクセスする。
葉L#(は)の構造体には、高位文字「は」へのポインタが格納されているため、コンピュータは、高位文字コードの構造体500の中から、高位文字「は」へのポインタで高位文字「は」を指定して、読み出す。
また、アクセス先となる葉L#(は)の構造体においては、対象ビット列“0011100110101”のうち先頭9ビットの圧縮符号“001110011”が格納されている。また、葉L#(は)の構造体の照合フラグがOFFであるため、コンピュータは、照合/置換テーブルTを参照しない。したがって、コンピュータは、高位文字コードの構造体500から読み出された高位文字「は」を伸長バッファ6600に書き出す。
また、葉L#(は)の構造体には、圧縮符号長leg(=9ビット)も格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=33+9=42となる。
図70は、図69に示した(D)の状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理((E)の状態)を示している。前回である(D)のビットアドレスabiはabi=33、圧縮符号長legは9ビットであるため、(E)のビットアドレスabiはabi=42ビットとなる。
また、このビットアドレスabi=42により、バイトオフセットbyos=5、ビットオフセットbios=2となる。バイトオフセットbyos=5により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭5バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタr1にセットする。
また、ビットオフセットbios=2により、マスクパターンは、“0x3FFE0000”であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン“0x3FFE0000”を論理積(AND)演算することにより、AND結果が得られる。
また、ビットオフセットbios=2により、レジスタシフト数rsは、rs=32−m―bios=32−13−2=17となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に17ビット分シフトする。このシフトによりレジスタr2には、“000101001000000”が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、“0101001000000”が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。
図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1〜L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列“0101001000000”と一致する葉L♯へのポインタを探索する。この場合、対象ビット列“0101001000000”が葉L#(結婚)へのポインタと一致するため、コンピュータは、葉L(結婚)へのポインタを読み出して、葉L(結婚)の構造体にアクセスする。
葉L#(結婚)の構造体には、基礎単語「結婚」へのポインタが格納されているため、コンピュータは、特殊単語の構造体100の中から、基礎単語「結婚」へのポインタで基礎単語「結婚」を指定して、読み出す。
また、アクセス先となる葉L#(結婚)の構造体においては、対象ビット列“0101001000000”のうち先頭13ビットの圧縮符号“0101001000000”が格納されている。また、葉L#(結婚)の構造体の照合フラグがONであるため、コンピュータは、葉L#(結婚)の構造体の照合/置換テーブルTへのポインタp2により、当該ポインタp2のレコードと圧縮符号“0101001000000”とを照合する。この場合、前方一致となるため、ポインタp2のレコードの指定中フラグをON(0⇒1)にする。
また、葉L#(結婚)の構造体には、圧縮符号長leg(=13ビット)も格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=42+13=55となる。
図71は、図70に示した(E)の状態からレジスタをバイトオフセットbyos分シフトした場合の伸長処理((F)の状態)を示している。前回である(E)のビットアドレスabiはabi=42、圧縮符号長legは13ビットであるため、(F)のビットアドレスabiはabi=55ビットとなる。
また、このビットアドレスabi=55により、バイトオフセットbyos=6、ビットオフセットbios=7となる。バイトオフセットbyos=6により、コンピュータは、メモリに保持されている圧縮符号列のうち先頭6バイト目から4バイト分(図中、網掛け)の圧縮符号列をレジスタr1にセットする。
また、ビットオフセットbios=7により、マスクパターンは、“0x01FFF000”であり、レジスタr2にセットされる。したがって、レジスタr1にセットされた圧縮符号列とレジスタr2にセットされたマスクパターン“0x01FFF000”を論理積(AND)演算することにより、AND結果が得られる。
また、ビットオフセットbios=7により、レジスタシフト数rsは、rs=32−m―bios=32−13−7=12となる。したがって、コンピュータは、レジスタr2内のAND結果を末尾方向に12ビット分シフトする。このシフトによりレジスタr2には、“00000000101001000010”が残されるため、コンピュータは、末尾13ビットを対象ビット列として抽出する。この場合は、“0101001000010”が対象ビット列として抽出される。抽出後、レジスタr2はクリアされる。
図28に示したように、2N分枝無節点ハフマン木の根の構造体には、葉L1〜L5401へのポインタが格納されている。したがって、コンピュータは、2N分枝無節点ハフマン木の根の構造体の中から、抽出された対象ビット列“0101001000010”と一致する葉L♯へのポインタを探索する。この場合、対象ビット列“0101001000010”が葉L#(活動)へのポインタと一致するため、コンピュータは、葉L(活動)へのポインタを読み出して、葉L(活動)の構造体にアクセスする。
葉L#(活動)の構造体には、基礎単語「活動」へのポインタが格納されているため、コンピュータは、特殊単語の構造体100の中から、基礎単語「活動」へのポインタで基礎単語「活動」を指定して、読み出す。
また、アクセス先となる葉L#(活動)の構造体においては、対象ビット列“0101001000010”のうち先頭13ビットの圧縮符号“0101001000010”が格納されている。したがって、コンピュータは、照合/置換テーブルTのうち指定中フラグがONになっているレコード、ここでは、ポインタp2のレコードと圧縮符号“0101001000010”とを照合する。この照合は、指定中フラグがONのため、後方一致照合をおこなう。そして、後方一致するため、ポインタp2のレコードの置換文字列「結<color>婚活</color>動」を伸長バッファ6600に書き出す。このあと、コンピュータは指定中フラグを0に戻す。
また、葉L#(活動)の構造体には、圧縮符号長leg(=13ビット)も格納されているため、コンピュータは、圧縮符号長legも抽出する。コンピュータは、この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=55+13=68となる。したがって、圧縮符号列がなくなるまで、伸長処理を継続することとなる。
このように、葉へのポインタには圧縮符号が含まれているため、いずれの葉へのポインタが抽出された場合であっても、圧縮符号を特定するまでもなく、直接葉の構造体にアクセスすることができる。したがって、伸長処理の高速化を実現することができる。
<機能的構成>
図72は、本実施の形態にかかるコンピュータの機能的構成例(その2)を示すブロック図である。コンピュータは、入力部7200と、第1の検索部7201と、第2の検索部7202と、抽出部7203と、作成部7204と、判定部7205と、伸長部7206と、を備える。入力部7200〜伸長部7206は、具体的には、たとえば、図34に示したROM3402、RAM3403、磁気ディスク3405、光ディスク3407などの記憶装置に記憶されたプログラムをCPU3401に実行させることにより、その機能を実現する。なお、図72で機能的構成として示したコンピュータは、図35において機能的構成として示したコンピュータと同一コンピュータでもよく、異なるコンピュータでもよい。
図72は、本実施の形態にかかるコンピュータの機能的構成例(その2)を示すブロック図である。コンピュータは、入力部7200と、第1の検索部7201と、第2の検索部7202と、抽出部7203と、作成部7204と、判定部7205と、伸長部7206と、を備える。入力部7200〜伸長部7206は、具体的には、たとえば、図34に示したROM3402、RAM3403、磁気ディスク3405、光ディスク3407などの記憶装置に記憶されたプログラムをCPU3401に実行させることにより、その機能を実現する。なお、図72で機能的構成として示したコンピュータは、図35において機能的構成として示したコンピュータと同一コンピュータでもよく、異なるコンピュータでもよい。
入力部7200は、2個以上の文字からなる検索文字列の入力を受け付ける。具体的には、出現頻度にかかわらず、たとえば、2連続文字の入力を受け付ける。たとえば、ユーザが入力装置(キーボードやマウス、タッチパッド)を操作することで、入力部7200は、2個の文字からなる検索文字列の入力を受け付ける。なお、2連続文字のほか、3連続以上の文字列でもよい。
第1の検索部7201は、入力部7200によって入力された検索文字列をデータベース7210から検索する。データベース7210とは、上述した特殊単語の構造体100、高位文字コードの構造体500、分割文字コードの構造体600からなるデータ構造体である。第1の検索部7201は、具体的には、たとえば、特殊単語の構造体100から検索文字列を検索する。
第2の検索部7202は、第1の検索部7201によって検索されなかった場合、検索文字列の先頭文字を末尾文字とする先行単語と、検索文字列の末尾文字を先頭文字とする後続単語と、をデータベース7210の単語の集合から検索する。データベース7210の単語の集合とは、特殊単語の構造体100である。
第2の検索部7202は、検索文字列がたとえば「婚活」である場合、「婚活」の先頭文字「婚」を末尾文字とする単語、たとえば、「結婚」、「離婚」といった単語を先行単語として検索する。また、第2の検索部7202は、検索文字列「婚活」の末尾文字「活」を先頭文字とする単語、たとえば、「活動」、「活用」といった単語を後続単語として検索する。
抽出部7203は、第2の検索部7202によって先行単語および後続単語が検索された場合、2N分枝無節点ハフマン木Hのうち先行単語の圧縮符号を先行単語に関連付けされた葉から抽出する。上記の例では、抽出部7203は、先行単語「結婚」の圧縮符号を、当該圧縮符号を格納する葉L#(結婚)の構造体から抽出する。同様に、後続単語「活動」の圧縮符号を、当該圧縮符号を格納する葉L#(活動)の構造体から抽出する。
作成部7204は、先行単語の圧縮符号と後続単語の圧縮符号とを連結させた連結圧縮符号と、先行単語および後続単語からなりかつ先行単語の末尾文字と後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する。テーブルとは、照合/置換テーブルTである。上記の例では、作成部7204は、先行単語「結婚」の圧縮符号と後続単語「活動」の圧縮符号を連結した連結圧縮符号を生成する(図4の照合/置換テーブルT4のポインタp2のレコードを参照)。
また、作成部7204は、先行単語および後続単語からなりかつ先行単語の末尾文字と後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列を生成する。上記の例では、先行単語「結婚」と後続単語「活動」からなり、先行単語の末尾文字「婚」と後続単語の先頭文字「活」とを特徴付ける情報を埋め込んだ置換文字列を生成する。特徴付ける情報とは、たとえば、先行単語の末尾文字と後続単語の先頭文字の色を変更したり、その背景を変更したり、フォントを変更したりするタグである。そして、作成部7204は、連結圧縮符号と置換文字列とを関連付けて照合/置換テーブルTに格納する図4の照合/置換テーブルT4のポインタp2のレコードを参照)。
判定部7205は、圧縮ファイルfi内の圧縮符号列が作成部7204によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する。具体的には、たとえば、判定部7205は、圧縮ファイルfi内の圧縮符号列が作成部7204によって作成された照合/置換テーブルT内の連結圧縮符号と一致するか否かを判定する。
伸長部7206は、判定部7205によって一致すると判定された場合、連結圧縮符号に関連付けられた置換文字列を伸長先に書き出す。具体的には、伸長部7206は、判定部7205によって一致すると判定された場合、先行単語「結婚」と後続単語「活動」との連結圧縮符号に関連付けられた置換文字列「結<color>婚活</color>動」を伸長先となる伸長バッファに書き出すこととなる。
<検索処理手順>
図73は、本実施の形態にかかる検索処理手順を示すフローチャートである。まず、コンピュータは、検索文字列の入力を待ち受け(ステップS7301:No)、検索文字列が入力された場合(ステップS7301:Yes)、ファイル絞込み処理(ステップS7302)、照合/置換テーブルT作成処理(ステップS7303)、伸長処理(ステップS7304)を実行する。ファイル絞込み処理(ステップS7302)は、圧縮ファイル群Fsの中から検索文字列を構成する文字情報が存在する対象ファイルの圧縮ファイルを絞り込む。ファイル絞込み処理(ステップS7302)の詳細については、図74および図75で後述する。
図73は、本実施の形態にかかる検索処理手順を示すフローチャートである。まず、コンピュータは、検索文字列の入力を待ち受け(ステップS7301:No)、検索文字列が入力された場合(ステップS7301:Yes)、ファイル絞込み処理(ステップS7302)、照合/置換テーブルT作成処理(ステップS7303)、伸長処理(ステップS7304)を実行する。ファイル絞込み処理(ステップS7302)は、圧縮ファイル群Fsの中から検索文字列を構成する文字情報が存在する対象ファイルの圧縮ファイルを絞り込む。ファイル絞込み処理(ステップS7302)の詳細については、図74および図75で後述する。
照合/置換テーブルT作成処理(ステップS7303)は、図1〜図11に示したように、照合/置換テーブルTを作成する。照合/置換テーブルT作成処理(ステップS7303)の詳細については、図76で後述する。伸長処理(ステップS7304)は、ファイル絞込み処理(ステップS7302)で絞り込まれた圧縮ファイルを伸長する過程で、照合/置換テーブルT作成処理(ステップS7303)で作成された照合/置換テーブルTを用いて、伸長対象となる圧縮符号列と検索文字列の圧縮文字列とを照合する。伸長処理(ステップS7304)については、図82で後述する。
図74は、図73に示したファイル絞込み処理(ステップS7302)の詳細な処理手順を示すフローチャート(その1)である。まず、コンピュータは、検索文字列を対象文字列に設定し(ステップS7401)、最長一致検索処理を実行する(ステップS7402)。最長一致検索処理(ステップS7402)は、図43に示した最長一致検索処理(ステップS4301)と同一処理であるため説明を省略する。
そして、コンピュータは、特殊単語の構造体100において、最長一致検索処理(ステップS7402)で得られた最長一致検索結果を2分探索する(ステップS7403)。最長一致検索結果が、特殊単語の構造体100で探索された場合(ステップS7403:Yes)、対象文字列である特殊単語について、その特殊単語の出現マップを特殊単語の出現マップ群から取得する(ステップS7404)。
そして、コンピュータは、対象文字列に後続があるか否かを判断する(ステップS7405)。後続がある場合(ステップS7405:Yes)、コンピュータは、後続文字列を対象文字列に設定して(ステップS7406)、最長一致検索処理(ステップS7402)に戻る。一方、後続がない場合(ステップS7405:No)、これまでに取得された出現マップ群のAND演算で対象ファイルを絞り込む(ステップS7407)。これにより、ファイル絞込み処理(ステップS7302)は終了し、照合/置換テーブルT作成処理(ステップS7303)に移行する。
また、ステップS7403において、最長一致検索結果が、特殊単語の構造体100で探索されなかった場合(ステップS7403:No)、図75のステップS7501に移行する。具体的には、最長一致検索結果が特殊単語の構造体100に登録されていない場合、または、最長一致検索で最長一致候補がなかった場合(ステップS4410:No)に、図75のステップS7501に移行する。
図75は、図73に示したファイル絞込み処理(ステップS7302)の詳細な処理手順を示すフローチャート(その2)である。図75では、対象文字列を構成する文字ごとに、出現マップを取得する処理である。
まず、コンピュータは、対象文字列の先頭文字を対象文字に設定する(ステップS7501)。つぎに、コンピュータは、高位文字コードの構造体500において対象文字を2分探索する(ステップS7502)。対象文字が探索された場合(ステップS7503:Yes)、コンピュータは、高位文字の出現マップ群から対象文字の出現マップを取得する(ステップS7504)。そして、図74のステップS7405に戻る。
一方、ステップS7503において、探索されなかった場合(ステップS7503:No)、コンピュータは、対象文字を上位8ビットと下位8ビットに分割する(ステップS7505)。そして、コンピュータは、分割文字コードの出現マップ群の中から上位分割文字コードの出現マップを取得する(ステップS7506)。
また、コンピュータは、分割文字コードの出現マップ群の中から下位分割文字コードの出現マップを取得する(ステップS7507)。そして、図74のステップS7405に戻る。このように、図75に示した処理手順により、対象文字についての出現マップを取得することができる。したがって、図74のステップS7407でのAND演算により圧縮ファイルの絞込みができることとなる。
図76は、図73に示した照合/置換テーブルT作成処理(ステップS7303)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、検索文字列を対象文字列に設定し(ステップS7601)、対象文字列が1文字であるか否かを判断する(ステップS7602)。1文字である場合(ステップS7602:Yes)、文字コード設定処理(ステップS7608)に移行する。一方、1文字でない場合(ステップS7602:No)、コンピュータは、特殊単語設定処理を実行する(ステップS7603)。特殊単語設定処理(ステップS7603)では、たとえば、図9に示したような照合/置換テーブルT1を作成する処理である。特殊単語設定処理(ステップS7603)の詳細については図77で後述する。
特殊単語設定処理(ステップS7603)では最長一致検索を実行するため、対象文字列の中に特殊単語が含まれているか否かが判別される。そして、コンピュータは、特殊単語設定処理(ステップS7603)において、特殊単語があったか否かを判断する(ステップS7604)。特殊単語があった場合(ステップS7604:Yes)、コンピュータは、対象文字列に後続があるか否かを判断する(ステップS7605)。
後続がある場合(ステップS7605:Yes)、コンピュータは、後続文字列を対象文字列に設定し(ステップS7606)、ステップS7602に戻る。一方、後続がない場合(ステップS7605:No)、照合/置換テーブルT作成処理(ステップS7303)を終了し、伸長処理(ステップS7304)に移行する。
また、ステップS7604において、特殊単語設定処理(ステップS7603)で特殊単語がなかった場合(ステップS7604:No)、コンピュータは、非特殊単語設定処理を実行する(ステップS7607)。非特殊単語設定処理(ステップS7607)は、たとえば、図2に示したように照合/置換テーブルT0から照合/置換テーブルT1を作成し、図3および図4に示したように、さらに照合/置換テーブルT1から照合/置換テーブルT4を作成する処理手順である。非特殊単語設定処理(ステップS7607)の詳細については図78および図79で後述する。
そして、コンピュータは、文字コード設定処理を実行する(ステップS7608)。文字コード設定処理(ステップS7608)は、たとえば、検索文字列に含まれている高位文字について、図8に示した照合/置換テーブルT6のポインタp4のレコードや、図10に示した照合/置換テーブルT2のポインタp2のレコードを作成する処理である。文字コード設定処理(ステップS7608)については図80で後述する。
図77は、図76に示した特殊単語設定処理(ステップS7603)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字列に対し最長一致検索処理を実行する(ステップS7701)。最長一致検索処理(ステップS7701)は、最長一致検索処理(ステップS4301、S7402)と同一処理であるため、説明を省略する。
つぎに、コンピュータは、特殊単語の構造体100において、最長一致検索された特殊単語を2分探索する(ステップS7702)。探索されなかった場合(ステップS7702:No)、図76のステップS7604に移行する。最長一致検索処理(ステップS7701)で特殊単語が得られなかった場合も、図76のステップS7604に移行する。
一方、探索された場合(ステップS7702:Yes)、コンピュータは、特殊単語の構造体100の葉へのポインタにより、探索特殊単語の葉の構造体を指定する(ステップS7703)。そして、コンピュータは、指定先である探索特殊単語の葉の構造体内の照合フラグをONにする(ステップS7704)。つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、検出された空きポインタを照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定する(ステップS7705)。
そして、コンピュータは、照合/置換テーブルTにおいて、照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定された空きポインタのレコードに、探索特殊単語の圧縮符号長、圧縮符号、置換文字列を設定する(ステップS7706)。このあと、図76のステップS7604に移行する。図77に示した特殊単語設定処理(ステップS7603)では、図9に示したような照合/置換テーブルT1を作成することができる。
図78は、図76に示した非特殊単語設定処理(ステップS7607)の詳細な処理手順を示すフローチャート(その1)である。図78の処理手順は、図2に示したように、たとえば、照合/置換テーブルT1を作成する処理手順である。
コンピュータは、特殊単語の構造体100において、対象文字列と末尾文字が一致する特殊単語を2分探索する(ステップS7801)。探索された場合(ステップS7802:Yes)、コンピュータは、特殊単語の構造体100の葉へのポインタにより、探索特殊単語の葉の構造体を指定する(ステップS7803)。そして、コンピュータは、指定先である探索特殊単語の葉の構造体内の照合フラグをONにする(ステップS7804)。つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、検出された空きポインタを照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定する(ステップS7805)。
そして、コンピュータは、照合/置換テーブルTにおいて、照合/置換テーブルTへのポインタとして探索特殊単語の葉の構造体内に設定された空きポインタのレコードに、探索特殊単語の圧縮符号長、圧縮符号、置換文字列を設定する(ステップS7806)。このあと、ステップS7802に戻り、次に探索されたか否かを判断する。
ステップS7802において、探索されなかった場合(ステップS7802:No)、コンピュータは、特殊単語の構造体100での探索が終了したか否かを判断する(ステップS7807)。探索が終了していない場合(ステップS7807:No)、ステップS7802に戻る。一方、探索が終了した場合(ステップS7807:Yes)、コンピュータは、対象文字列と末尾文字が一致する特殊単語があったか否かを判断する(ステップS7808)。すなわち、ステップS7803〜S7806を実行したか否かを判断する。
対象文字列と末尾文字が一致する特殊単語があった場合(ステップS7808:Yes)、図79のステップS7901に移行する。一方、対象文字列と末尾文字が一致する特殊単語がなかった場合(ステップS7808:No)、非特殊単語設定処理(ステップS7607)を終了し、図76のステップS7608に移行する。このように、図78の処理手順では、図2に示したように、照合/置換テーブルT1を作成することができる。
図79は、図76に示した非特殊単語設定処理(ステップS7607)の詳細な処理手順を示すフローチャート(その2)である。図79の処理手順は、図3や図4に示したように、たとえば、照合/置換テーブルT3,T4を作成する処理手順である。
コンピュータは、特殊単語の構造体100において、対象文字列と先頭文字が一致する特殊単語を2分探索する(ステップS7901)。探索された場合(ステップS7902:Yes)、コンピュータは、照合/置換テーブルTの未完成レコードを空きポインタにコピーする(ステップS7903)。
未完成レコードとは、図78で設定されたレコード(たとえば、図2に示したポインタp1のレコード)のように、図79での設定が完了していないレコードである。たとえば、図3の(9)に示したように、コンピュータは、照合/置換テーブルT1を照合/置換テーブルT2に更新して、ポインタp2のレコードを生成する。未完成レコードをコピーするのは、さらなる探索(ステップS7902)で、対象文字列と先頭文字が一致する特殊単語が探索された場合に備えるためである。
つぎに、コンピュータは、特殊単語の構造体100の葉へのポインタにより、探索特殊単語の葉の構造体を指定する(ステップS7904)。そして、コンピュータは、末尾文字が一致する特殊単語の未完成レコードごとに、先頭文字が一致する特殊単語の圧縮符号長を加算し、圧縮符号を連結し、置換文字列を更新する(ステップS7905)。たとえば、コンピュータは、図3の照合/置換テーブルT2のポインタp1のレコードを、照合/置換テーブルT3のポインタp1のレコードのように更新する。また、コンピュータは、図4の照合/置換テーブルT3のポインタp2のレコードを、照合/置換テーブルT4のポインタp2のレコードのように更新する。
また、ステップS7902において、探索されなかった場合(ステップS7902:No)、コンピュータは、特殊単語の構造体100の2分探索が終了したか否かを判断する(ステップS7906)。探索が終了していない場合(ステップS7906:No)、ステップS7902に戻る。一方、探索が終了した場合(ステップS7906:Yes)、コンピュータは、照合/置換テーブルTにおいて残されている未完成レコードを消去する(ステップS7907)。そして、図76の文字コード設定処理(ステップS7608)に移行する。このように、図79の処理手順では、図3や図4に示したように、照合/置換テーブルT3、T4を作成することができる。
図80は、図76に示した文字コード設定処理(ステップS7608)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字列の先頭文字を対象文字に設定し(ステップS8001)、高位文字コードの構造体500において、対象文字を2分探索する(ステップS8002)。探索された場合(ステップS8003:Yes)、コンピュータは、高位文字コードの構造体500の葉へのポインタにより、探索文字の葉の構造体を指定する(ステップS8004)。
そして、コンピュータは、指定先である探索文字の葉の構造体内の照合フラグをONにする(ステップS8005)。つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、検出された空きポインタを照合/置換テーブルTへのポインタとして探索文字の葉の構造体内に設定する(ステップS8006)。
そして、コンピュータは、照合/置換テーブルTにおいて、照合/置換テーブルTへのポインタとして探索文字の葉の構造体内に設定された空きポインタのレコードに、探索文字の圧縮符号長、圧縮符号、置換文字列を設定する(ステップS8007)。このあと、図76のステップS7605に移行する。
一方、ステップS8003において、探索されなかった場合(ステップS8003:No)、分割文字コード設定処理を実行して(ステップS8008)、図76のステップS7605に移行する。このように、図80に示した文字コード設定処理(ステップS7608)では、検索文字列に含まれている高位文字について、図8に示した照合/置換テーブルT6のポインタp4のレコードや、図10に示した照合/置換テーブルT2のポインタp2のレコードを作成することができる。
図81は、図80に示した分割文字コード設定処理(ステップS8008)の詳細を示すフローチャートである。分割文字コード設定処理(ステップS8008)は、検索対象文字列に含まれている分割文字コードについて、図6に示した照合/置換テーブルT4のポインタp3のレコードや、図7に示した照合/置換テーブルT5のポインタp3のレコード、図10〜図11に示した照合/置換テーブルT2〜T4のポインタp3のレコードを作成する処理である。
まず、コンピュータは、対象文字を上位8ビットと下位8ビットに分割し(ステップS8101)、分割文字コードの構造体600において、上位分割文字コードを2分探索する(ステップS8102)。そして、コンピュータは、分割文字コードの構造体600において、探索された上位分割文字コードの葉の構造体を指定する(ステップS8103)。そして、コンピュータは、指定先となる葉の構造体内の照合フラグをONにする(ステップS8104)。
つぎに、コンピュータは、照合/置換テーブルTの空きポインタを検出して、探索された上位分割文字コードの葉の構造体での照合/置換テーブルTへのポインタとして設定する(ステップS8105)。このあと、コンピュータは、探索された上位分割文字コードの葉の構造体での照合/置換テーブルTへのポインタとして設定された空きポインタのレコードに、上位分割文字コードの圧縮符号長、圧縮符号、置換文字列を設定する(ステップS8106)。たとえば、図6の照合/置換テーブルT4のポインタp3のレコードのように設定する。
また、コンピュータは、分割文字コードの構造体600において、下位分割文字コードを2分探索する(ステップS8107)。そして、コンピュータは、分割文字コードの構造体600において、探索された下位分割文字コードの葉の構造体を指定する(ステップS8108)。このあと、コンピュータは、照合/置換テーブルTにおける上位分割文字コードについて設定されたレコードに、下位分割文字コードの圧縮符号長を加算し、圧縮符号を連結し、置換文字列を更新する(ステップS8109)。
たとえば、図7に示したように、照合/置換テーブルT4のポインタp3のレコードを、照合/置換テーブルT5のポインタp3のレコードのように更新する。このあと、図76のステップS7605に移行する。このように、分割文字コード設定処理(ステップS8008)によれば、分割文字コードで構成される低出現頻度の文字についても、置換文字列を生成することができる。
図82は、2N分枝無節点ハフマン木を用いた伸長処理手順を示すフローチャートである。図82において、まず、コンピュータは、ビットアドレスabiをabi=0とし(ステップS8201)、バイトオフセットbyosを算出し(ステップS8202)、ビットオフセットbiosを算出する(ステップS8203)。そして、コンピュータは、バイトオフセットbyosの位置からの圧縮符号列をレジスタr1にセットする(ステップS8204)。
つぎに、コンピュータは、レジスタr2にセットされたマスクパターンをビットオフセットbios分、末尾方向にシフトして(ステップS8205)、レジスタr1にセットされた圧縮符号列とのAND演算をおこなう(ステップS8206)。このあと、コンピュータは、レジスタシフト数rsを算出して(ステップS8207)、AND演算後のレジスタr2をレジスタシフト数rs分、末尾にシフトする(ステップS8208)。
図83は、図73に示した2N分枝無節点ハフマン木を用いた伸長処理(ステップS7304)の詳細な処理手順を示すフローチャートである。ステップS8208のあと、図83において、コンピュータは、シフト後のレジスタr2から末尾Nビットを対象ビット列として抽出する(ステップS8301)。つぎに、コンピュータは、2N分枝無節点ハフマン木の根の構造体から葉L♯へのポインタを特定し(ステップS8302)、ポイント先となる葉L♯の構造体に1パスでアクセスする(ステップS8303)。このあと、コンピュータは、照合置換処理を実行する(ステップS8304)。照合置換処理(ステップS8304)の詳細は、図84で後述する。
照合置換処理(ステップS8304)のあと、コンピュータは、葉L♯の構造体から圧縮符号長legを抽出し(ステップS8305)、ビットアドレスabiを更新する(ステップS8306)。このあと、コンピュータは、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断する(ステップS8307)。たとえば、バイトオフセットbyosに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合(ステップS8307:Yes)、図82のステップS8202に戻る。一方、圧縮符号列がない場合(ステップS8307:No)、伸長処理(ステップS7304)を終了する。
このような伸長処理により、圧縮符号列からNビット単位で圧縮符号を抽出することができ、さらに、2N分枝無節点ハフマン木の根の構造体にアクセスすることで、該当する枝番号となる葉L♯へのポインタを特定することができる。そして、アクセス先となる葉L♯の構造体から文字コードを抽出することで、圧縮符号を伸長する。このように、2N分枝無節点ハフマン木は、内部節点を有していないため、葉L♯へのポインタが特定されれば、1パスで葉L♯の構造体にアクセスすることができ、伸長速度の高速化を図ることができる。
図84は、図83に示した照合置換処理(ステップS8304)の詳細な処理手順を示すフローチャートである。まず、コンピュータは、指定先となる葉の構造体内の照合フラグがONであるか否かを判断する(ステップS8401)。照合フラグがONである場合(ステップS8401:Yes)、コンピュータが、指定先となる葉の構造体内の照合/置換テーブルTへのポインタにより、照合/置換テーブルTの該当レコードを指定する(ステップS8402)。そして、コンピュータは、指定先となる葉の構造体内の圧縮符号長と、照合/置換テーブルTの指定先レコードでの圧縮符号長とが一致するか否かを判断する(ステップS8403)。
一致する場合(ステップS8403:Yes)、コンピュータは、照合/置換テーブルTの指定先レコードにある置換文字列を伸長バッファに書き出して(ステップS8404)、ステップS8305に移行する。一方、不一致である場合(ステップS8403:No)、コンピュータは、指定先レコードの指定中フラグをONにして(ステップS8405)、ステップS8305に移行する。なお、不一致の場合でも、照合フラグがONであるため、指定先レコードの圧縮符号列と指定先となる葉の構造体内の圧縮符号とは前方一致する。
また、ステップS8401において、照合フラグがOFFである場合(ステップS8401:No)、指定中フラグがONである指定先レコードが照合/置換テーブルTにあるか否かを判断する(ステップS8406)。指定中フラグがONである指定先レコードがある場合(ステップS8406:Yes)、コンピュータは、指定中フラグがONである指定先レコードのうち、圧縮符号が後方一致する指定先レコードを特定する(ステップS8407)。
そして、コンピュータは、特定された指定先レコードの置換文字列を伸長バッファに書き出して(ステップS8408)、特定された指定先レコードの指定中フラグをOFFにする(ステップS8409)。これにより、図70および図71のように置換文字列を伸長バッファに書き出すことができる。このあと、ステップS8305に移行する。
また、ステップS8406において、指定中フラグがONである指定先レコードがない場合(ステップS8406:No)、コンピュータは、該当する文字情報の構造体から文字情報を取得し(ステップS8410)、取得した文字情報を伸長バッファに書き出す(ステップS8411)。すなわち、コンピュータは、指定先となる葉の構造体において照合フラグがOFFであっても、また、葉の構造体で指定される文字情報が、高位文字、分割文字コード、特殊単語にかかわらず、伸長バッファに書き出すことができる。このあと、ステップS8305に移行する。
以上説明したように、本実施の形態によれば、基礎単語として登録されていない未登録単語であっても高精度な検索をおこなうことができる。たとえば、上述したように、「婚活」について「結婚」「活動」の連結圧縮符号及び置換文字列「結婚活動」を登録しておき、圧縮符号列と連続圧縮符号が一致したら置換文字列を書出す。これにより、未登録単語「婚活」であるがゆえに「婚」と「活」に分離されてしまうといういわゆる泣き別れを防止することができ、未登録単語の検索精度の向上を図ることができる。また、このような処理により、伸長速度の向上も図ることができる。
また、検索文字列を構成する高位文字について照合/置換テーブルTを作成することにより、圧縮状態のまま圧縮符号列と検索文字列に含まれている高位文字の圧縮符号とを照合することができる。これにより、伸長しながら高位文字の置換文字列を書き出すことができる。置換文字列は検索文字列を構成する高位文字として強調表示される。このように、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。
また、検索文字列を構成する低出現頻度の文字についても、分割文字コードについて照合/置換テーブルTを作成することにより、圧縮状態のまま圧縮符号列と検索文字列に含まれている分割文字コードの圧縮符号とを照合することができる。これにより、伸長しながら低出現頻度の文字の置換文字列を書き出すことができる。置換文字列は検索文字列を構成する低出現頻度の文字として強調表示される。このように、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。
また、検索文字列を構成する特殊単語について照合/置換テーブルTを作成することにより、圧縮状態のまま圧縮符号列と検索文字列に含まれている特殊単語の圧縮符号とを照合することができる。これにより、伸長しながら低出現頻度の文字の置換文字列を書き出すことができる。置換文字列は検索文字列を構成する特殊単語として強調表示される。このように、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。
また、検索文字列が基礎単語ではない場合であっても、先行する基礎単語の末尾文字と後続の基礎単語の先頭文字との2連続文字の場合においても、照合/置換テーブルTを作成することができる。これにより、たとえば、「婚活」といった基礎単語ではない検索文字列であっても、「結<color>婚活</color>用」、「結<color>婚活</color>動」のように、検索文字列「婚活」を含む置換文字列を伸長して書き出すことができる。置換文字列は、タグにより「婚活」として強調表示される。このように、基礎単語にはない略語のような文字列であっても、検索精度の向上や、検索速度および伸長速度の高速化を実現することができる。
また、文字情報の総種類数に応じて2N分枝無節点ハフマン木での圧縮符号長の上限長Nを1ビット刻みで調節することができる。したがって、文字情報の総種類数に適したサイズで2N分枝無節点ハフマン木を生成することができ、省メモリ化を図ることができる。
具体的には、文字情報の総種類数が2K-1個より大きく2K個以下である場合は、上限長NをKビットに決定することで、上述の補正Aで示したように、上限長K以上の圧縮符号長の葉数は上限長Kの圧縮符号長の葉数に集約される。したがって、2K分枝無節点ハフマン木が生成されるため、上限符号長を(K+1)以上とした場合の無節点ハフマン木よりもサイズを小さくすることができる。
たとえば、文字情報の総種類数が210個より大きく211個以下である場合は、上限長Nを11ビットに決定することで、211分枝無節点ハフマン木を生成することができる。また、文字情報の総種類数が211個より大きく212個以下である場合は、上限長Nを12ビットに決定することで、212分枝無節点ハフマン木を生成することができる。さらに、文字情報の総種類数が212個より大きく213個以下である場合は、上限長Nを13ビットに決定することで、213分枝無節点ハフマン木を生成することができる。
また、補正Aでの生起確率総和がしきい値t以上1以下であれば、十分な圧縮効率を見込める。したがって、補正Aでの各圧縮符号長の葉数で2N分枝無節点ハフマン木を生成することで、生成速度の高速化を図ることができる。
また、補正Aでの生起確率総和がしきい値t以上1以下でなければ、補正Bを実行することで、圧縮効率の向上を図ることができる。たとえば、しきい値t未満であれば、補正+処理を実行することで、生起確率総和を1に漸近させることができ、圧縮効率の向上を最大限までおこなうことができる。同様に、1より大きい場合でも、補正-処理を実行することで、生起確率総和を1に漸近させることができ、圧縮効率の向上を最大限までおこなうことができる。
また、圧縮符号長間で葉数のシフトをおこなうことでも、生起確率総和を1に近似させることが可能となる。いずれにしても、生起確率総和が1に近似するように各圧縮符号長の葉数を最適な葉数とすることで、圧縮効率の向上を図ることができる。
上述した実施の形態では、2文字の「婚活」を検索文字列としたが、検索文字列は2文字のほか、3文字以上の場合も同じ処理によって検索結果を得ることができる。
なお、本実施の形態で説明した方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能なコンピュータに、
2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、
前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、
前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、
前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、
前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、
を実行させることを特徴とする検索プログラム。
2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、
前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、
前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、
前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、
前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、
を実行させることを特徴とする検索プログラム。
(付記2)前記抽出工程は、
さらに、前記検索文字列を構成する文字に関連付けられた葉から圧縮符号を抽出し、
前記作成工程は、
さらに、前記検索文字列を構成する文字について前記抽出工程によって抽出された圧縮符号と、前記検索文字列を構成する文字を特徴付ける情報を埋め込んだ前記検索文字列を構成する文字情報の置換文字と、を関連付けて、前記テーブルに格納し、
前記判定工程は、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列を構成する文字の圧縮符号と一致するか否かを判定し、
前記伸長工程は、
前記判定工程によって前記検索文字列を構成する文字の圧縮符号と一致すると判定された場合、前記検索文字列を構成する文字の圧縮符号に関連付けられた前記置換文字を前記伸長先に書き出すことを特徴とする付記1に記載の検索プログラム。
さらに、前記検索文字列を構成する文字に関連付けられた葉から圧縮符号を抽出し、
前記作成工程は、
さらに、前記検索文字列を構成する文字について前記抽出工程によって抽出された圧縮符号と、前記検索文字列を構成する文字を特徴付ける情報を埋め込んだ前記検索文字列を構成する文字情報の置換文字と、を関連付けて、前記テーブルに格納し、
前記判定工程は、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列を構成する文字の圧縮符号と一致するか否かを判定し、
前記伸長工程は、
前記判定工程によって前記検索文字列を構成する文字の圧縮符号と一致すると判定された場合、前記検索文字列を構成する文字の圧縮符号に関連付けられた前記置換文字を前記伸長先に書き出すことを特徴とする付記1に記載の検索プログラム。
(付記3)前記抽出工程は、
前記第1の検索工程によって前記検索文字列が前記データベースから検索された場合、前記検索文字列に一致する単語に関連付けられた葉から圧縮符号を抽出し、
前記作成工程は、
前記検索文字列に一致する単語について前記抽出工程によって抽出された圧縮符号と、前記検索文字列に一致する単語を特徴付ける情報を埋め込んだ前記検索文字列に一致する単語の置換文字列と、を関連付けて、前記テーブルに格納し、
前記判定工程は、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列に一致する単語の圧縮符号と一致するか否かを判定し、
前記伸長工程は、
前記判定工程によって前記検索文字列に一致する単語の圧縮符号と一致すると判定された場合、前記検索文字列に一致する単語の圧縮符号に関連付けられた前記置換文字列を前記伸長先に書き出すことを特徴とする付記1に記載の検索プログラム。
前記第1の検索工程によって前記検索文字列が前記データベースから検索された場合、前記検索文字列に一致する単語に関連付けられた葉から圧縮符号を抽出し、
前記作成工程は、
前記検索文字列に一致する単語について前記抽出工程によって抽出された圧縮符号と、前記検索文字列に一致する単語を特徴付ける情報を埋め込んだ前記検索文字列に一致する単語の置換文字列と、を関連付けて、前記テーブルに格納し、
前記判定工程は、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列に一致する単語の圧縮符号と一致するか否かを判定し、
前記伸長工程は、
前記判定工程によって前記検索文字列に一致する単語の圧縮符号と一致すると判定された場合、前記検索文字列に一致する単語の圧縮符号に関連付けられた前記置換文字列を前記伸長先に書き出すことを特徴とする付記1に記載の検索プログラム。
(付記4)前記伸長工程は、
前記圧縮ファイル内の前記判定工程によって前記連結圧縮符号と不一致な圧縮符号については、当該不一致な圧縮符号を有する葉に関連付けされた文字を前記データベースから抽出して、前記伸長先に書き出すことを特徴とする付記1〜3のいずれか一つに記載の検索プログラム。
前記圧縮ファイル内の前記判定工程によって前記連結圧縮符号と不一致な圧縮符号については、当該不一致な圧縮符号を有する葉に関連付けされた文字を前記データベースから抽出して、前記伸長先に書き出すことを特徴とする付記1〜3のいずれか一つに記載の検索プログラム。
(付記5)前記対象ファイルに出現する前記文字および前記単語を含む文字情報群内の各文字情報の出現率に応じた生起確率で規定される圧縮符号長ごとに、前記文字情報の種類数を集計する集計工程と、
前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定する決定工程と、
前記集計工程によって集計された圧縮符号長ごとの前記文字情報の種類数のうち、前記決定工程によって決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正する補正工程と、
前記補正工程によって補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、前記上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築し、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の葉を関連付けることで、前記データベースを構築して、前記2N分枝無節点ハフマン木および前記データベースを前記記憶装置に格納する構築工程と、
前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮することにより、前記圧縮ファイルを前記記憶装置に格納する圧縮工程と、
を前記コンピュータに実行させることを特徴とする付記1〜4のいずれか一つに記載の検索プログラム。
前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定する決定工程と、
前記集計工程によって集計された圧縮符号長ごとの前記文字情報の種類数のうち、前記決定工程によって決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正する補正工程と、
前記補正工程によって補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、前記上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築し、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の葉を関連付けることで、前記データベースを構築して、前記2N分枝無節点ハフマン木および前記データベースを前記記憶装置に格納する構築工程と、
前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮することにより、前記圧縮ファイルを前記記憶装置に格納する圧縮工程と、
を前記コンピュータに実行させることを特徴とする付記1〜4のいずれか一つに記載の検索プログラム。
(付記6)前記決定工程は、
前記文字情報の総種類数が2K-1個より大きく2K個以下である場合は、前記上限長NをKビットに決定することを特徴とする付記5に記載の検索プログラム。
前記文字情報の総種類数が2K-1個より大きく2K個以下である場合は、前記上限長NをKビットに決定することを特徴とする付記5に記載の検索プログラム。
(付記7)前記決定工程は、
前記文字情報の総種類数が210個より大きく211個以下である場合は、前記上限長Nを11ビットに決定することを特徴とする付記6に記載の検索プログラム。
前記文字情報の総種類数が210個より大きく211個以下である場合は、前記上限長Nを11ビットに決定することを特徴とする付記6に記載の検索プログラム。
(付記8)前記決定工程は、
前記文字情報の総種類数が211個より大きく212個以下である場合は、前記上限長Nを12ビットに決定することを特徴とする付記6に記載の検索プログラム。
前記文字情報の総種類数が211個より大きく212個以下である場合は、前記上限長Nを12ビットに決定することを特徴とする付記6に記載の検索プログラム。
(付記9)前記決定工程は、
前記文字情報の総種類数が212個より大きく213個以下である場合は、前記上限長Nを13ビットに決定することを特徴とする付記6に記載の検索プログラム。
前記文字情報の総種類数が212個より大きく213個以下である場合は、前記上限長Nを13ビットに決定することを特徴とする付記6に記載の検索プログラム。
(付記10)前記補正工程による補正後の前記上限長Nまでの各圧縮符号長での前記文字情報の種類数に基づいて、前記上限長Nまでの各圧縮符号長を規定する各生起確率の総和を算出する算出工程と、
前記算出工程によって算出された総和がしきい値以上1以下であるか否かを判断する判断工程と、
前記判断工程によって前記しきい値以上1以下であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成する生成工程と、
前記上限長Nまでの圧縮符号長に基づいて、前記生成工程によって生成された葉の構造体1つ当たりの枝数を、前記上限長Nまでの圧縮符号長ごとに特定する特定工程と、を前記コンピュータに実行させ、
前記構築工程は、
前記葉の構造体内の圧縮符号に前記特定工程によって特定された枝数分の枝番号をあらわす各ビット列を連結した葉へのポインタ群を、葉の構造体ごとに生成することにより、前記各葉の構造体についての前記葉へのポインタ群を根とする2N分枝無節点ハフマン木を構築することを特徴とする付記5〜9のいずれか一つに記載の検索プログラム。
前記算出工程によって算出された総和がしきい値以上1以下であるか否かを判断する判断工程と、
前記判断工程によって前記しきい値以上1以下であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成する生成工程と、
前記上限長Nまでの圧縮符号長に基づいて、前記生成工程によって生成された葉の構造体1つ当たりの枝数を、前記上限長Nまでの圧縮符号長ごとに特定する特定工程と、を前記コンピュータに実行させ、
前記構築工程は、
前記葉の構造体内の圧縮符号に前記特定工程によって特定された枝数分の枝番号をあらわす各ビット列を連結した葉へのポインタ群を、葉の構造体ごとに生成することにより、前記各葉の構造体についての前記葉へのポインタ群を根とする2N分枝無節点ハフマン木を構築することを特徴とする付記5〜9のいずれか一つに記載の検索プログラム。
(付記11)前記判断工程によって前記しきい値以上1以下でないと判断された場合、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を、前記総和で割ることにより、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を更新する更新工程を前記コンピュータに実行させ、
前記算出工程は、
前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、
前記判断工程は、
前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、
前記生成工程は、
前記判断工程によって前記再算出された総和が前記最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする付記10に記載の検索プログラム。
前記算出工程は、
前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、
前記判断工程は、
前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、
前記生成工程は、
前記判断工程によって前記再算出された総和が前記最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする付記10に記載の検索プログラム。
(付記12)前記判断工程によって前記しきい値以上1以下でないと判断された場合、前記上限長Nまでの各圧縮符号長のうち第1の圧縮符号長の前記文字情報の種類数を所定数減少させ、当該第1の圧縮符号長よりも大きい第2の圧縮符号長の前記文字情報の種類数を前記所定数増加させることにより、前記上限長Nまでの各圧縮符号長の前記文字情報の種類数を更新する更新工程を前記コンピュータに実行させ、
前記算出工程は、
前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、
前記判断工程は、
前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、
前記生成工程は、
前記判断工程によって前記再算出された総和が1以下の最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする付記10に記載の検索プログラム。
前記算出工程は、
前記更新工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づいて、前記総和を再算出し、
前記判断工程は、
前記算出工程によって再算出された総和が1以下の最大値であるか否かを判断し、
前記生成工程は、
前記判断工程によって前記再算出された総和が1以下の最大値であると判断された場合、前記上限長Nまでの圧縮符号長と、前記上限長Nまでの圧縮符号長ごとの更新後における前記文字情報の種類数と、前記文字情報の出現率と、に基づいて、前記文字情報に圧縮符号を割り当てた葉の構造体を生成することを特徴とする付記10に記載の検索プログラム。
(付記13)前記再算出された総和が1以下の最大値となるまで、前記更新工程による更新、前記算出工程による更新後における前記上限長Nまでの各圧縮符号長の前記文字情報の種類数に基づく前記総和の再算出、および、前記判断工程による再算出された総和が1以下の最大値であるか否かの判断を、前記コンピュータに繰り返し実行させることを特徴とする付記11または12に記載の検索プログラム。
(付記14)対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能な検索装置であって、
2個以上の文字からなる検索文字列の入力を受け付ける入力手段と、
前記入力手段によって入力された検索文字列を前記データベースから検索する第1の検索手段と、
前記第1の検索手段によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索手段と、
前記第2の検索手段によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出手段と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成手段と、
前記圧縮ファイル内の圧縮符号列が前記作成手段によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定手段と、
前記判定手段によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長手段と、
を備えることを特徴とする検索装置。
2個以上の文字からなる検索文字列の入力を受け付ける入力手段と、
前記入力手段によって入力された検索文字列を前記データベースから検索する第1の検索手段と、
前記第1の検索手段によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索手段と、
前記第2の検索手段によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出手段と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成手段と、
前記圧縮ファイル内の圧縮符号列が前記作成手段によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定手段と、
前記判定手段によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長手段と、
を備えることを特徴とする検索装置。
(付記15)対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能なコンピュータが、
2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、
前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、
前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、
前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、
前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、
を実行することを特徴とする検索方法。
2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、
前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、
前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、
前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、
前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、
を実行することを特徴とする検索方法。
7200 入力部
7201 第1の検索部
7202 第2の検索部
7203 抽出部
7204 作成部
7205 判定部
7206 伸長部
T 照合/置換テーブル
7201 第1の検索部
7202 第2の検索部
7203 抽出部
7204 作成部
7205 判定部
7206 伸長部
T 照合/置換テーブル
Claims (10)
- 対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能なコンピュータに、
2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、
前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、
前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、
前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、
前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、
を実行させることを特徴とする検索プログラム。 - 前記抽出工程は、
さらに、前記検索文字列を構成する文字に関連付けられた葉から圧縮符号を抽出し、
前記作成工程は、
さらに、前記検索文字列を構成する文字について前記抽出工程によって抽出された圧縮符号と、前記検索文字列を構成する文字を特徴付ける情報を埋め込んだ前記検索文字列を構成する文字情報の置換文字と、を関連付けて、前記テーブルに格納し、
前記判定工程は、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列を構成する文字の圧縮符号と一致するか否かを判定し、
前記伸長工程は、
前記判定工程によって前記検索文字列を構成する文字の圧縮符号と一致すると判定された場合、前記検索文字列を構成する文字の圧縮符号に関連付けられた前記置換文字を前記伸長先に書き出すことを特徴とする請求項1に記載の検索プログラム。 - 前記抽出工程は、
前記第1の検索工程によって前記検索文字列が前記データベースから検索された場合、前記検索文字列に一致する単語に関連付けられた葉から圧縮符号を抽出し、
前記作成工程は、
前記検索文字列に一致する単語について前記抽出工程によって抽出された圧縮符号と、前記検索文字列に一致する単語を特徴付ける情報を埋め込んだ前記検索文字列に一致する単語の置換文字列と、を関連付けて、前記テーブルに格納し、
前記判定工程は、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の前記検索文字列に一致する単語の圧縮符号と一致するか否かを判定し、
前記伸長工程は、
前記判定工程によって前記検索文字列に一致する単語の圧縮符号と一致すると判定された場合、前記検索文字列に一致する単語の圧縮符号に関連付けられた前記置換文字列を前記伸長先に書き出すことを特徴とする請求項1に記載の検索プログラム。 - 前記伸長工程は、
前記圧縮ファイル内の前記判定工程によって前記連結圧縮符号と不一致な圧縮符号については、当該不一致な圧縮符号を有する葉に関連付けされた文字を前記データベースから抽出して、前記伸長先に書き出すことを特徴とする請求項1〜3のいずれか一つに記載の検索プログラム。 - 前記対象ファイルに出現する前記文字および前記単語を含む文字情報群内の各文字情報の出現率に応じた生起確率で規定される圧縮符号長ごとに、前記文字情報の種類数を集計する集計工程と、
前記対象ファイルに出現する前記文字情報の総種類数に基づいて、最小圧縮符号長から最大圧縮符号長までの圧縮符号長群の中から、前記文字情報に割り当てられる圧縮符号長の上限長Nを決定する決定工程と、
前記集計工程によって集計された圧縮符号長ごとの前記文字情報の種類数のうち、前記決定工程によって決定された上限長Nを圧縮符号長とする前記文字情報の種類数を、前記上限長N以上の圧縮符号長での前記文字情報の種類数の総和に補正する補正工程と、
前記補正工程によって補正された補正後の前記圧縮符号長ごとの前記文字情報の種類数に基づいて、前記上限長Nを最大枝数とし、前記文字情報の各々の生起確率に応じた圧縮符号長の圧縮符号を葉とする2N分枝無節点ハフマン木を構築し、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の葉を関連付けることで、前記データベースを構築して、前記2N分枝無節点ハフマン木および前記データベースを前記記憶装置に格納する構築工程と、
前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮することにより、前記圧縮ファイルを前記記憶装置に格納する圧縮工程と、
を前記コンピュータに実行させることを特徴とする請求項1〜4のいずれか一つに記載の検索プログラム。 - 前記決定工程は、
前記文字情報の総種類数が2K-1個より大きく2K個以下である場合は、前記上限長NをKビットに決定することを特徴とする請求項5に記載の検索プログラム。 - 前記決定工程は、
前記文字情報の総種類数が210個より大きく211個以下である場合は、前記上限長Nを11ビットに決定することを特徴とする請求項6に記載の検索プログラム。 - 前記決定工程は、
前記文字情報の総種類数が211個より大きく212個以下である場合は、前記上限長Nを12ビットに決定することを特徴とする請求項6に記載の検索プログラム。 - 対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能な検索装置であって、
2個以上の文字からなる検索文字列の入力を受け付ける入力手段と、
前記入力手段によって入力された検索文字列を前記データベースから検索する第1の検索手段と、
前記第1の検索手段によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索手段と、
前記第2の検索手段によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出手段と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成手段と、
前記圧縮ファイル内の圧縮符号列が前記作成手段によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定手段と、
前記判定手段によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長手段と、
を備えることを特徴とする検索装置。 - 対象ファイルに出現する文字情報群内の各文字および2以上の文字からなる単語の生起確率に応じた圧縮符号長の圧縮符号を葉とする最大枝数2Nの2N分枝無節点ハフマン木と、前記文字情報群の文字情報および前記単語の集合内の単語ごとに前記2N分枝無節点ハフマン木の対応する葉を関連付けたデータベースと、前記対象ファイルを前記2N分枝無節点ハフマン木で圧縮した圧縮ファイルと、を記憶する記憶装置にアクセス可能なコンピュータが、
2個以上の文字からなる検索文字列の入力を受け付ける入力工程と、
前記入力工程によって入力された検索文字列を前記データベースから検索する第1の検索工程と、
前記第1の検索工程によって検索されなかった場合、前記検索文字列の先頭文字を末尾文字とする先行単語と、前記検索文字列の末尾文字を先頭文字とする後続単語と、を前記データベースの単語の集合から検索する第2の検索工程と、
前記第2の検索工程によって前記先行単語および前記後続単語が検索された場合、前記2N分枝無節点ハフマン木のうち前記先行単語の圧縮符号を前記先行単語に関連付けされた葉から抽出するとともに、前記2N分枝無節点ハフマン木のうち前記後続単語の圧縮符号を前記後続単語に関連付けされた葉から抽出する抽出工程と、
前記先行単語の圧縮符号と前記後続単語の圧縮符号とを連結させた連結圧縮符号と、前記先行単語および前記後続単語からなりかつ前記先行単語の末尾文字と前記後続単語の先頭文字とを特徴付ける情報を埋め込んだ置換文字列と、を関連付けて記憶するテーブルを作成する作成工程と、
前記圧縮ファイル内の圧縮符号列が前記作成工程によって作成されたテーブル内の連結圧縮符号と一致するか否かを判定する判定工程と、
前記判定工程によって一致すると判定された場合、前記連結圧縮符号に関連付けられた前記置換文字列を伸長先に書き出す伸長工程と、
を実行することを特徴とする検索方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2011/054816 WO2012117544A1 (ja) | 2011-03-02 | 2011-03-02 | 検索プログラム、検索装置、および検索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2012117544A1 JPWO2012117544A1 (ja) | 2014-07-07 |
JP5621906B2 true JP5621906B2 (ja) | 2014-11-12 |
Family
ID=46757504
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013502109A Active JP5621906B2 (ja) | 2011-03-02 | 2011-03-02 | 検索プログラム、検索装置、および検索方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9501558B2 (ja) |
EP (1) | EP2682876B1 (ja) |
JP (1) | JP5621906B2 (ja) |
WO (1) | WO2012117544A1 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014045318A1 (ja) * | 2012-09-21 | 2014-03-27 | 富士通株式会社 | 圧縮プログラム、圧縮方法及び圧縮装置 |
US11138246B1 (en) * | 2016-06-27 | 2021-10-05 | Amazon Technologies, Inc. | Probabilistic indexing of textual data |
CN107025219B (zh) * | 2017-04-19 | 2019-07-26 | 厦门大学 | 一种基于内部语义层次结构的词嵌入表示方法 |
US20230123921A1 (en) * | 2021-10-14 | 2023-04-20 | EMC IP Holding Company LLC | Facilitating the embedding of block references for reducing file access latency file systems |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07296005A (ja) * | 1994-04-25 | 1995-11-10 | Nippon Telegr & Teleph Corp <Ntt> | 日本語テキスト登録・検索装置 |
WO2006123429A1 (ja) * | 2005-05-20 | 2006-11-23 | Fujitsu Limited | 情報検索方法、装置、プログラム、該プログラムを記録した記録媒体 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3152868B2 (ja) | 1994-11-16 | 2001-04-03 | 富士通株式会社 | 検索装置および辞書/テキスト検索方法 |
JP3427679B2 (ja) | 1997-06-18 | 2003-07-22 | 富士ゼロックス株式会社 | 単語検索装置及び単語検索プログラムを記録したコンピュータ読取り可能な記録媒体 |
WO2008142799A1 (ja) * | 2007-05-24 | 2008-11-27 | Fujitsu Limited | 情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置 |
JP5782214B2 (ja) * | 2008-05-30 | 2015-09-24 | 富士通株式会社 | 情報検索プログラム、情報検索装置および情報検索方法 |
JP4947183B2 (ja) * | 2010-04-22 | 2012-06-06 | 横河電機株式会社 | 光スペクトラムアナライザ |
-
2011
- 2011-03-02 WO PCT/JP2011/054816 patent/WO2012117544A1/ja unknown
- 2011-03-02 EP EP11860084.0A patent/EP2682876B1/en active Active
- 2011-03-02 JP JP2013502109A patent/JP5621906B2/ja active Active
-
2013
- 2013-08-30 US US14/015,391 patent/US9501558B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07296005A (ja) * | 1994-04-25 | 1995-11-10 | Nippon Telegr & Teleph Corp <Ntt> | 日本語テキスト登録・検索装置 |
WO2006123429A1 (ja) * | 2005-05-20 | 2006-11-23 | Fujitsu Limited | 情報検索方法、装置、プログラム、該プログラムを記録した記録媒体 |
Non-Patent Citations (4)
Title |
---|
CSND199801205005; 奥村 晴彦: 'データ圧縮アルゴリズム' C MAGAZINE 第10巻 第10号, 19981001, 52-63ページ, ソフトバンク株式会社 * |
CSNG200000935008; 宮崎 正路: '圧縮テキストに対するパターン照合機械の高速化' 情報処理学会論文誌 第39巻 第9号, 19980915, 2638-2648ページ, 社団法人情報処理学会 * |
JPN6014035499; 宮崎 正路: '圧縮テキストに対するパターン照合機械の高速化' 情報処理学会論文誌 第39巻 第9号, 19980915, 2638-2648ページ, 社団法人情報処理学会 * |
JPN6014035502; 奥村 晴彦: 'データ圧縮アルゴリズム' C MAGAZINE 第10巻 第10号, 19981001, 52-63ページ, ソフトバンク株式会社 * |
Also Published As
Publication number | Publication date |
---|---|
EP2682876A4 (en) | 2014-10-22 |
EP2682876A1 (en) | 2014-01-08 |
EP2682876B1 (en) | 2018-09-05 |
JPWO2012117544A1 (ja) | 2014-07-07 |
US9501558B2 (en) | 2016-11-22 |
US20130346443A1 (en) | 2013-12-26 |
WO2012117544A1 (ja) | 2012-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11204905B2 (en) | Trie-based indices for databases | |
KR101560109B1 (ko) | 추출 방법, 추출 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 추출 장치, 및 추출 시스템 | |
WO2012150637A1 (ja) | 抽出方法、情報処理方法、抽出プログラム、情報処理プログラム、抽出装置、および情報処理装置 | |
JP5605288B2 (ja) | 出現マップ生成方法、ファイル抽出方法、出現マップ生成プログラム、ファイル抽出プログラム、出現マップ生成装置、およびファイル抽出装置 | |
US5150119A (en) | Data compression method and apparatus | |
JP2011100320A (ja) | 情報処理プログラム、情報検索プログラム、情報処理装置、および情報検索装置 | |
JP5621906B2 (ja) | 検索プログラム、検索装置、および検索方法 | |
JP5505524B2 (ja) | 生成プログラム、生成装置、および生成方法 | |
US20220277139A1 (en) | Computer-readable recording medium, encoding device, index generating device, search device, encoding method, index generating method, and search method | |
JPH09245043A (ja) | 情報検索装置 | |
JP6304302B2 (ja) | 情報生成方法、情報生成装置、および情報生成プログラム | |
JP4208326B2 (ja) | 情報索引装置 | |
JP2016149160A5 (ja) | ||
JP3565840B2 (ja) | 文書管理方法および文書管理装置 | |
JP3728264B2 (ja) | インデックス作成装置、検索システム、及び制御方法 | |
JP2013196264A (ja) | 類似検索装置及びコンピュータプログラム及び類似検索方法 | |
JPH1097542A (ja) | 全文検索装置及び全文検索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20140826 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140908 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5621906 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |