JP5966673B2 - 符号処理のためのプログラム及びデータ構造 - Google Patents

符号処理のためのプログラム及びデータ構造 Download PDF

Info

Publication number
JP5966673B2
JP5966673B2 JP2012145224A JP2012145224A JP5966673B2 JP 5966673 B2 JP5966673 B2 JP 5966673B2 JP 2012145224 A JP2012145224 A JP 2012145224A JP 2012145224 A JP2012145224 A JP 2012145224A JP 5966673 B2 JP5966673 B2 JP 5966673B2
Authority
JP
Japan
Prior art keywords
character
code
data
string
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012145224A
Other languages
English (en)
Other versions
JP2014011538A (ja
Inventor
大介 二宮
大介 二宮
真嘉 樋口
真嘉 樋口
豊 小山
豊 小山
雅樹 西垣
雅樹 西垣
量 松村
量 松村
敏郎 小野
敏郎 小野
崇記 小澤
崇記 小澤
純史 川井
純史 川井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012145224A priority Critical patent/JP5966673B2/ja
Priority to US13/899,878 priority patent/US9223809B2/en
Priority to EP15174629.4A priority patent/EP2947778B1/en
Priority to EP13171211.9A priority patent/EP2680445B1/en
Priority to CN201310269060.9A priority patent/CN103532565B/zh
Publication of JP2014011538A publication Critical patent/JP2014011538A/ja
Application granted granted Critical
Publication of JP5966673B2 publication Critical patent/JP5966673B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Machine Translation (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本技術は、符号化技術に関する。
従来技術では、入力文字列の圧縮を行うために文節木を生成する。この文節木の各ノードは、文字又は文字列と置き換える符号と、圧縮される文字と、階層を表すデータと、親ノードポインタと、使用される可能性がある各文字に対応する子ノードへのポインタと、各子ノードに対応する文字が出現する回数を計数するカウンタとを含む。例えば入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBB」が入力された場合、図1に示すような文節木が生成される。なお、新たなノードを生成するための出現回数の閾値は2である。この例では、第0階層のノードとしてルートノードが設けられており、第1階層のノードとして文字「0x00」乃至「0xFF」についてのノードが設けられている。第2階層のノードとして、文字「0x41」の子ノードとして文字「0x42」及び「0x41」についてのノードと、文字「0x42」の子ノードとして文字「0x43」についてのノードと、文字「0x43」の子ノードとして文字「0x42」についてのノードとが設けられている。さらに、第3階層のノードとして、文字「0x42」の子ノードとして文字「0x43」についてのノードと、文字「0x42」の子ノードとして文字「0x43」「0x41」及び「0x42」についてのノードとが設けられている。なお、各ノードについては、符号(A)と、文字(B)と、子ノードについての文字の出現回数(C)と、子ノードへのポインタ(D)とを模式的に示している。
図2に示すように子ノードポインタと子ノードについての文字の出現回数とが、使用可能な文字種256個分となるので、1つのノードで3085バイトのメモリ容量が消費されることになる。仮に符号長2バイトで表現できる最大数65536個のノードが設けられるとすると、合計で約192Mバイトメモリ容量が消費される。
文節木は文字列を置き換える符号の種類(すなわちノード数)が多いほど、多様なデータを圧縮することができる。しかし、符号の種類がこのように多くなるとノード数も多くなり、文節木全体のサイズが大きくなってしまう。
特開2011−221845号公報
従って、本技術の目的は、一側面において、文節木を表すデータ構造のためのメモリ容量を削減するための技術を提供することである。
本技術の第1の態様に係る文節木のデータ構造は、分節木のデータ構造であって、(A)分節木を構成する複数のノードそれぞれが、特定の文字または文字列に対応する符号を保持する1の領域と、(B)特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と、(C)特定の文字または文字列の次に入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は上記出現回数を、出現回数が特定の閾値を超えた場合は特定の文字または文字列と特定の文字または文字列の次に入力文字列において出現した文字とからなる文字列に対応して生成される符号を、特定の文字または文字列の次に入力文字列において出現した文字の出現順番に応じて保持する3の領域とを有する
本技術の第2の態様に係るデータ構造は、文節木に対応する第1のデータと、文節木の各ノードに対応する文字又は文字列についての第2のデータと、文節木の階層についての第3のデータとを有する。また、第1のデータにおいて、文節木の各ノードについて、当該ノードの親ノードの符号又は当該ノードの子ノードの符号のうち最大の符号と、当該ノードで表される文字のコードと、当該ノードが所属する階層とを対応付けデータが、各ノードの符号の順番に並べられている。第2のデータは、文節木の第2階層以降の各階層の各ノードについて当該ノードに対応する文字又は文字列のコードを当該ノードの符号の順に含む。さらに、第3のデータは、文節木の第2階層以降の各階層について、当該階層に属するノードの数と、当該階層に属するノードの符号のうち最小の符号と、第2のデータにおいて当該最小の号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む。
文節木を表すデータ構造のためのメモリ容量を削減できるようになる。
図1は、従来例の文節木を表すデータ構造の一例を模式的に示す図である。 図2は、従来例の使用メモリ量の一例を示す図である。 図3は、第1の実施の形態に係る文節木の1ノード分のデータ構造を示す図である。 図4は、拡張カウンタ兼子ノード番号の配列の一例を示す図である。 図5は、実施の形態に係る情報処理装置の機能ブロック図である。 図6は、実施の形態に係るメインの処理フローを示す図である。 図7は、文節木生成処理の処理フローを示す図である。 図8は、文節木のデータの生成処理を説明するための図である。 図9は、文節木のデータの生成処理を説明するための図である。 図10は、文節木のデータの生成処理を説明するための図である。 図11は、文節木のデータの生成処理を説明するための図である。 図12は、文節木のデータの生成処理を説明するための図である。 図13は、文節木のデータの生成処理を説明するための図である。 図14は、文節木のデータの生成処理を説明するための図である。 図15は、文節木のデータの生成処理を説明するための図である。 図16は、文節木のデータの生成処理を説明するための図である。 図17は、文節木のデータの生成処理を説明するための図である。 図18は、文節木のデータの生成処理を説明するための図である。 図19は、文節木のデータの生成処理を説明するための図である。 図20Aは、文節木のデータの生成処理を説明するための図である。 図20Bは、文節木のデータの生成処理を説明するための図である。 図20Cは、文節木のデータの生成処理を説明するための図である。 図20Dは、文節木のデータの生成処理を説明するための図である。 図20Eは、文節木のデータの生成処理を説明するための図である。 図20Fは、文節木のデータの生成処理を説明するための図である。 図21は、文節木のデータの生成処理を説明するための図である。 図22Aは、文節木のデータの生成処理を説明するための図である。 図22Bは、文節木のデータの生成処理を説明するための図である。 図23は、文節木のデータの生成処理を説明するための図である。 図24Aは、文節木のデータの生成処理を説明するための図である。 図24Bは、文節木のデータの生成処理を説明するための図である。 図24Cは、文節木のデータの生成処理を説明するための図である。 図24Dは、文節木のデータの生成処理を説明するための図である。 図24Eは、文節木のデータの生成処理を説明するための図である。 図24Fは、文節木のデータの生成処理を説明するための図である。 図25は、文節木のデータの生成処理を説明するための図である。 図26Aは、番号取得処理の処理フローを示す図である。 図26Bは、配列設定処理の処理フローを示す図である。 図27は、カレントノード設定処理の処理フローを示す図である。 図28は、文節木の一例を示す図である。 図29は、ソート後の文節木の一例を示す図である。 図30は、圧縮マップを説明するための図である。 図31は、圧縮マップの生成を説明するための図である。 図32は、圧縮マップの生成処理を説明するための図である。 図33は、圧縮マップの生成処理を説明するための図である。 図34は、圧縮マップの生成処理を説明するための図である。 図35は、圧縮マップの生成処理を説明するための図である。 図36は、圧縮マップの生成処理を説明するための図である。 図37は、圧縮マップの生成処理を説明するための図である。 図38は、圧縮マップの生成処理を説明するための図である。 図39は、圧縮マップの生成処理を説明するための図である。 図40は、圧縮マップの生成処理を説明するための図である。 図41は、圧縮マップの生成処理を説明するための図である。 図42は、圧縮マップの生成処理を説明するための図である。 図43は、圧縮マップの生成処理を説明するための図である。 図44は、圧縮マップの生成処理を説明するための図である。 図45は、圧縮マップの生成処理を説明するための図である。 図46は、圧縮マップの生成処理を説明するための図である。 図47は、圧縮マップの生成処理を説明するための図である。 図48は、圧縮マップの生成処理を説明するための図である。 図49は、圧縮マップの生成処理を説明するための図である。 図50は、圧縮マップの生成処理を説明するための図である。 図51は、圧縮マップ生成処理の処理フローを示す図である。 図52は、エントリ追加処理の処理フローを示す図である。 図53は、圧縮処理の処理フローを示す図である。 図54は、圧縮マップの一例を示す図である。 図55は、圧縮処理を説明するための図である。 図56は、伸張処理の処理フローを示す図である。 図57は、伸張処理を説明するための図である。 図58は、文節木のデータ構造を用いて圧縮する場合の処理を説明するための図である。 図59は、文節木のデータ構造を用いて圧縮する場合の処理を説明するための図である。 図60は、文節木のデータ構造を用いて圧縮する場合の処理を説明するための図である。 図61は、文節木のデータ構造を用いて圧縮する場合の処理を説明するための図である。 図62は、文節木のデータ構造を用いて伸張する場合の処理を説明するための図である。 図63は、文節木のデータ構造を用いて伸張する場合の処理を説明するための図である。 図64は、文節木のデータ構造を用いて伸張する場合の処理を説明するための図である。 図65は、文節木のデータ構造を用いて伸張する場合の処理を説明するための図である。 図66は、文節木のデータ構造を用いて伸張する場合の処理を説明するための図である。 図67は、第2の実施の形態を説明するための文節木を表す図である。 図68は、第2の実施の形態における圧縮マップの模式図である。 図69は、第2の実施の形態におけるエントリ追加処理2の処理フローを示す図である。 図70は、第2の実施の形態における圧縮処理2の処理フローを示す図である。 図71は、第2の実施の形態における圧縮マップの一例を示す図である。 図72は、第3の実施の形態における圧縮マップの一例を示す図である。 図73は、第3の実施の形態における階層情報の一例を示す図である。 図74は、第3の実施の形態における伸張マップの一例を示す図である。 図75は、第3の実施の形態における圧縮マップ生成処理2の処理フローを示す図である。 図76は、第3の実施の形態におけるエントリ追加処理3の処理フローを示す図である。 図77は、第3の実施の形態における設定処理の処理フローを示す図である。 図78は、第3の実施の形態における圧縮処理3の処理フローを示す図である。 図79は、第3の実施の形態における伸処理2の処理フローを示す図である。 図80は、伸処理2を説明するための図である。 図81は、第4の実施の形態における圧縮マップの一例を示す図である。 図82は、第4の実施の形態における階層情報の一例を示す図である。 図83は、第4の実施の形態における伸マップの一例を示す図である。 図84は、第4の実施の形態における圧縮マップ生成処理3の処理フローを示す図である。 図85は、第4の実施の形態におけるエントリ追加処理4の処理フローを示す図である。 図86は、第4の実施の形態における設定処理2の処理フローを示す図である。 図87は、第4の実施の形態における圧縮処理4の処理フローを示す図である。 図88は、第4の実施の形態における伸処理3の処理フローを示す図である。 図89は、コンピュータの機能ブロック図である。
[実施の形態1]
図3に本実施の形態に係る文節木におけるノード1つ分のデータ構造を示す。ノードのデータブロックは、符号(IDX)の領域と、文字出現番号の配列の領域と、カウンタ兼子ノード番号の配列の領域と、スパンド番号の領域と、文字出現数の領域とを含む。また、これとは別に、拡張カウンタ兼子ノード番号の配列数をカウントするための領域を有する。
文字出現番号の領域は、本ノードの符号に対応する文字又は文字列の次に出現する各文字(0x00乃至0xFFまでの各文字)について出現順番を保持する配列である。但し、文字出現数が256の場合以外「FF」は未使用を表す。また、他の値は、カウンタ兼子ノード番号の配列番号を表す。例えば、文字「0x41(A)」のノードについて着目し、文節木を生成するための文字列が「ABAAC」である場合、最初の「A」の次にまず出現した文字はB(0x4)なので、文字出現番号の領域0x42番目に「0」が設定され、次の「A」の次に出現した文字はAなので、文字出現番号の領域0x41番目に「1」が設定され、次の「A」の次に出現した文字はCなので、文字出現番号の領域0x43番目に「2」が設定される。
カウンタ兼子ノード番号の配列には、出現順番に従って出現回数(カウンタ)又は子ノード番号(「0x」が付された番号)が格納される。上で述べた例では、「0」番目に文字「0x42」についての子ノード番号(符号)「0x0100」が格納され、「1」番目に文字「0x41」についての子ノード番号(符号)「0x0104」が格納され、「2」番目に文字「0x043」についての出現回数「1」が格納されている。本実施の形態では、カウンタ兼子ノード番号の領域には、8つの出現回数又は子ノード番号しか格納できない。8つを超える出現回数又は子ノード番号を保持する場合には、拡張カウンタ兼子ノード番号の配列の番号をスパンド番号の領域に設定する。スパンド番号の初期値は「0xFFFF」である。
拡張カウンタ兼子ノード番号の配列は、どのノードからも参照される共通領域に設けられる。図4に示すように、この配列も1つで8つの出現回数又は子ノード番号を保持できるようになっており、最後にこの配列でも不足する場合に参照すべき拡張カウンタ兼子ノード番号の配列の番号(拡張スパンド番号)が設定されるようになっている。
文字出現数の領域には、本ノードに対応する文字又は文字列の次に出現した文字の数が設定される。上で述べた例では「B」「A」「C」の3文字出現したので「3」が設定される。
このように、デフォルトで特定できる子ノードの数を限定して必ずしも用いない子ノードへのポインタの領域を削減している。また、親ノードへのポインタも有していないので、メモリ使用量が削減されている。
本実施の形態では、このような文節木を生成する処理、このような文節木からディスクに格納するためのデータ構造である圧縮マップを生成する処理、圧縮マップを用いた圧縮処理及び伸張処理、並びにこれらの処理を実施する装置などについて説明する。
本実施の形態に係る情報処理装置100の機能ブロック図を図5に示す。情報処理装置100は、文節木生成部110と、圧縮マップ生成部120と、データ格納部130と、圧縮処理部140と、伸張処理部150と、入出力部160とを有する。
文節木生成部110は、例えば入出力部160から入力された文節木生成のための入力文字列に対して処理を行って本実施の形態に係る文節木のデータを生成する。圧縮マップ生成部120は、文節木生成部110が生成した文節木のデータから圧縮マップを生成して、データ格納部130に格納する。
圧縮処理部140は、データ格納部130に格納されている圧縮マップを用いて例えば入出力部160から入力された圧縮対象の入力文字列に対して圧縮処理を実施して、圧縮結果をデータ格納部130に格納する。伸張処理部150は、データ格納部130に格納されている圧縮マップを用いて、例えばデータ格納部130に格納されている圧縮結果に対して伸張処理を実施し、伸張結果をデータ格納部130に格納する。入出力部160は、伸張結果を表示装置などの出力装置又は他のコンピュータなどに出力する場合もある。
次に、図6乃至図66を用いて情報処理装置100の処理内容について説明する。まず、文節木生成部110は、入力文字列に対して文節木生成処理を実施する(図6:ステップS1)。この文節木生成処理については図7乃至図27を用いて詳細に説明する。また、圧縮マップ生成部120は、文節木生成部110によって生成された文節木から圧縮マップを生成する圧縮マップ生成処理を実施し、データ格納部130に格納する(ステップS3)。圧縮マップ生成処理については図28乃至図52を用いて詳細に説明する。
その後、例えば入出力部160から圧縮対象の入力文字列が入力されると、圧縮処理部140は、圧縮マップを用いて圧縮処理を実施し、圧縮結果をデータ格納部130に格納する(ステップS5)。圧縮処理については図53乃至図55を用いて詳細に説明する。また、例えば入出力部160から指示されると、伸張処理部150は、例えばデータ格納部130に格納されている圧縮結果に対して、圧縮マップを用いて伸張処理を実施し、処理結果をデータ格納部130に格納する(ステップS7)。伸張処理については図56及び図57を用いて詳細に説明する。
次に、文節木生成処理について図7を用いて説明する。まず、文節木生成部110は、符号0x0000乃至0x00FFのノードのデータを生成する(ステップS11)。必ず設けられる第1階層のノードを初期設定として生成する。
そして、文節木生成部110は、入力文字列から入力文字を1バイト読み込み、そのノードをカレントノードに設定する(ステップS13)。さらに、文節木生成部110は、入力文字列から次の入力文字を1バイト読み込む(ステップS15)。そして、文節木生成部110は、次の入力文字が入力文字列の終端であるか判断する(ステップS17)。次の入力文字が入力文字列の終端であれば、処理は呼出元の処理に戻る。
一方、次の入力文字が入力文字列の終端ではない場合には、文節木生成部110は、入力文字のコードを配列番号として用いて、カレントノードの文字出現番号の配列に格納されている値Aを取得する(ステップS18)。そして、文節木生成部110は、番号取得処理を実施する(ステップS19)。この番号取得処理については、図26A及び図26Bを用いて説明する。
その後、文節木生成部110は、カレントノード設定処理を実施する(ステップS21)。カレントノード設定処理については、図27を用いて説明する。その後処理はステップS15に戻る。
号取得処理及びカレントノード設定処理の詳細を述べる前に、処理内容を分かり易くするために、具体例について図8乃至図25を用いて説明しておく。ここでは、「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」という文字列を入力する際の処理を説明する。また、文節木のデータ構造だけではなく、文節木の模式図をも併せて説明する。
ステップS11では、模式的に示せば図8に示すように、第1階層として符号0x0001乃至0x00FFのノードが生成される。この例では主に符号「0x0041」「0x0042」「0x0043」のノード及びその子ノードが主な処理対象となるので、この部分のみが示されている。また、図9に示すようなデータ構造のデータブロックが生成される。このように、文字「0x41」に対応する符号「0x0041」についての図3に示したデータブロックと、文字「0x42」に対応する符号「0x0042」についての図3に示したデータブロックと、文字「0x43」に対応する符号「0x0043」についての図3に示したデータブロックとが生成される。この段階では設定される値は初期値である。
次に、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の最初の「A」を読み込み、対応する符号「0x0041」のノードをカレントノードに設定する。また、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の次の「B」を読み込む。そうすると、図10に示すように、カレントノードの文字出現番号の配列において「0x42(B)」の値を参照すると「0xFF」のため、文字出現番号=出現順番=0を設定する。また、文字出現数の値を「0」から「1」に更新する。さらに、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「0」を1インクリメントして「1」を設定する。また、出現回数が閾値「2」に達していないので、カレントノードを文字「0x42」に対応する符号「0x0042」のノードに変更する。なお、新たなカレントノードを黒塗り三角形で表し、旧カレントノードを白抜き三角形で表す。
次に、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「A」を読み込む。そうすると、図11に示すように、カレントノードの文字出現番号の配列において「0x41(A)」の値を参照すると「0xFF」のため、文字出現番号=出現順番=0を設定する。また、文字出現数の値を「0」から「1」に更新する。さらに、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「0」を1インクリメントして「1」を設定する。また、出現回数が閾値「2」に達していないので、カレントノードを文字「0x41」に対応する符号「0x0041」のノードに変更する。
さらに、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「B」を読み込む。そうすると、図12に示すように、カレントノードの文字出現番号の配列において「0x42(B)」の値を参照すると出現順番「0」が得られる。そして、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「1」を1インクリメントする。そうすると、閾値「2」に達するので、図12に示すように、新規に符号「0x0100」の子ノードを生成し、カウンタ兼子ノード番号の配列の「0」番目に子ノードの符号「0x0100」を設定する。符号「0x0100」は「AB」に対応する符号となる。そして、カレントノードを符号「0x0100」の子ノードに設定する。文節木は、図8のような状態から、図13に示す状態に変化する。
また、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「C」を読み込む。そうすると、図14に示すように、カレントノードの文字出現番号の配列において「0x43(C)」の値を参照すると「0xFF」のため、文字出現番号=出現順番=0を設定する。また、文字出現数の値を「0」から「1」に更新する。さらに、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「0」を1インクリメントして「1」を設定する。また、出現回数が閾値「2」に達していないので、カレントノードを文字「0x43」に対応する符号「0x0043」のノードに変更する。
さらに、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「A」を読み込む。そうすると、図15に示すように、カレントノードの文字出現番号の配列において「0x41(A)」の値を参照すると「0xFF」のため、文字出現番号=出現順番=0を設定する。また、文字出現数の値を「0」から「1」に更新する。さらに、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「0」を1インクリメントして「1」を設定する。また、出現回数が閾値「2」に達していないので、カレントノードを文字「0x41」に対応する符号「0x0041」のノードに変更する。
さらに、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「B」を読み込む。そうすると、図16に示すように、カレントノードの文字出現番号の配列において「0x42(B)」の値を参照すると「0」のため、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値を参照する。そうすると符号「0x0100」が得られるので、カレントノードを符号「0x0100」のノードに更する。
さらに、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「C」を読み込む。そうすると、図17に示すように、カレントノードの文字出現番号の配列において「0x43(C)」の値を参照すると出現順番「0」が得られる。そして、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「1」を1インクリメントする。そうすると、閾値「2」に達するので、図17に示すように、新規に符号「0x0101」の子ノードを生成し、カウンタ兼子ノード番号の配列の「0」番目に子ノードの符号「0x0101」を設定する。符号「0x0101」は「ABC」に対応する符号となる。そして、カレントノードを符号「0x0101」の子ノードに設定する。文節木は、図13のような状態から、図18に示す状態に変化する。
さらに、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「A」を読み込む。そうすると、図19に示すように、カレントノードの文字出現番号の配列において「0x41(A)」の値を参照すると「0xFF」のため、文字出現番号=出現順番=0を設定する。また、文字出現数の値を「0」から「1」に更新する。さらに、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「0」を1インクリメントして「1」を設定する。また、出現回数が閾値「2」に達していないので、カレントノードを文字「0x41」に対応する符号「0x0041」のノードに変更する。このような処理を繰り返して行く。
そして、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「I」を読み込む段階になったものとする。この時カレントノードは符号「0x0102」のノードであり、図20A乃至図20Fに示すように、カレントノードの文字出現番号の配列において「0x49(I)」の値を参照すると「0xFF」であるため、文字出現番号=出現順番「8」を設定する。また、文字出現数の値を「8」から「9」に更新する。さらに、カウンタ兼子ノード番号の配列において、出現順番「8」番目は、デフォルトの配列には入っていないので、拡張カウンタ兼子ノード番号の配列を参照することになる。ここでは拡張カウンタ兼子ノード番号の配列「0」を確保し、その配列において「0(=8−8)」番目の値を参照する。この拡張カウンタ兼子ノード番号の配列「0」における出現順番「0」番目の値が「0x0100」より小さいので、出現回数「0」を1インクリメントして「1」を設定する。また、出現回数が閾値「2」に達していないので、カレントノードを文字「0x49」に対応する符号「0x0049」のノードに変更する。なお、この段階では文節木は図21に示すような状態となっている。符号「0x0102」の子ノード(第3階層のノード)が8つ既に生成されている。
その後、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「C」を読み込む。そうすると、図22A及び図22Bに示すように、カレントノードの文字出現番号の配列において「0x43(C)」の値を参照すると出現順番「0」が得られる。そして、カウンタ兼子ノード番号の配列において、出現順番「0」番目の値が「0x0100」より小さいので、出現回数「0」を1インクリメントして「1」を設定する。また、出現回数が閾値「2」に達していないので、カレントノードを文字「0x43」に対応する符号「0x0043」のノードに変更する。
さらに、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「B」を読み込む。そうすると、図23に示すように、カレントノードの文字出現番号の配列において「0x42(B)」の値を参照すると「1」のため、カウンタ兼子ノード番号の配列において、出現順番「1」番目の値を参照する。そうすると符号「0x0102」が得られるので、カレントノードを符号「0x0102」のノードに更する。
最後に、入力文字列「ABABCABCABCCBCBCBCAAACBACBACBBCCBBCBECBECBDCBDCBGCBGCBHCBHCBFCBFCBICBI」の「I」を読み込む。そうすると、図24A乃至図24Fに示すように、カレントノードの文字出現番号の配列において「0x49(I)」の値を参照すると出現順番「8」が得られる。カウンタ兼子ノード番号の配列において、出現順番「8」番目は、デフォルトの配列には入っていないので、拡張カウンタ兼子ノード番号の配列を参照することになる。ここでは拡張カウンタ兼子ノード番号の配列「0」において「0(=8−8)」番目の値を参照すると、「0x0100」より小さいので、出現回数「1」を1インクリメントする。そうすると、閾値「2」に達するので、図24A乃至図24Fに示すように、新規に符号「0x010D」の子ノードを生成し、カウンタ兼子ノード番号の配列の「0」番目に子ノードの符号「0x010D」を設定する。符号「0x010D」は「ABI」に対応する符号となる。そして、カレントノードを符号「0x010D」の子ノードに設定する。文節木は、図23のような状態から、図25に示す状態に変化する。このように、第2階層には4個、第3階層には10個のノードを有する文節木が生成されるが、出現順番で子ノードを生成しているので、第2階層及び第3階層において、符号は、対応する文字のコード順には並べられていない。
このような処理を実施するための番号取得処理について、図26Aを用いて説明する。文節木生成部110は、値Aが0xFF且つ文字出現数が256ではないという条件を満たしているか判断する(ステップS31)。この条件が満たされている場合には、今まで出現していなかった文字が出現したことになるので、文節木生成部110は、値Aにカレントノードについての文字出現番号を設定し(ステップS33)、文字出現数を1インクリメントする(ステップS35)。
ステップS31の条件を満たしていないと判断された場合又はステップS35の後に、文節木生成部110は、値Aが8以上であるか判断する(ステップS37)。値Aが8未満であれば、文節木生成部110は、カウンタ兼子ノード番号の配列においてA番目に格納されている値Bを取得する(ステップS51)。そして呼出元の処理に戻る。
一方、値Aが8以上であれば、文節木生成部110は、スパンド番号が0xFFFFとなっているか判断する(ステップS39)。スパンド番号が0xFFFFである場合には、まだ拡張カウンタ兼子ノード番号の配列を取得していないことになる。従って、スパンド番号が0xFFFFである場合には、文節木生成部110は、配列設定処理を実施する(ステップS41)。そして処理はステップS43に移行する。
配列設定処理について図26Bを用いて説明する。文節木生成部110は、カレントノードについてのスパンド番号又は現在参照している拡張カウンタ兼子ノード番号の配列の拡張スパンド番号に、現在の配列数を設定する(ステップS68)。そして、文節木生成部110は、配列数を1インクリメントする(ステップS69)。そして、呼出元の処理に戻る。
ステップS39でスパンド番号が0xFFFFではなく他の値が設定されているか、又はステップS41の後に、文節木生成部110は、取得した「スパンド番号」又は「拡張スパンド番号」番目の拡張カウンタ兼子ノード番号の配列を参照する(ステップS43)。そして、文節木生成部110は、A=A−8を算出する(ステップS45)。その後、文節木生成部110は、Aが8以上であるか判断する(ステップS47)。Aが8以上であれば、拡張カウンタ兼子ノード番号の配列を2以上使用することになる。Aが8以上であれば、現在参照している拡張カウンタ兼子ノード番号の配列における拡張スパンド番号が0xFFFFであるか判断する(ステップS53)。拡張スパンド番号が0xFFFFでない場合にはステップS57に移行する。一方、拡張スパンド番号が0xFFFFである場合には、新たな拡張カウンタ兼子ノード番号の配列を設定することになるので、文節木生成部110は、配列設定処理(図26B)を実施する(ステップS55)。そして処理はステップS57に移行する。
そして、文節木生成部110は、参照先の拡張カウンタ兼子ノード番号の配列における拡張スパンド番号、又は配列設定処理において設定された拡張カウンタ兼子ノード番号の配列における拡張スパンド番号を取得する(ステップS57)。そして処理はステップS43に戻る。
一方、値Aが8未満となれば、文節木生成部110は、参照先の拡張カウンタ兼子ノード番号の配列のA番目に格納されている値Bを取得する(ステップS49)。そして処理は呼出元の処理に戻る。
以上の処理を実施することで、子ノードの符号又は文字の出現回数を得ることができるようになる。
次に、カレントノード設定処理について、図27を用いて説明する。文節木生成部110は、カウンタ兼子ノード番号(又は拡張カウンタ兼子ノード番号)の配列のA番目に格納されている値Bが子ノード番号(すなわち0x0100以上の符号)であるか判断する(ステップS71)。値Bが子ノード番号である場合には、文節木生成部110は、カレントノードを子ノードに位置づける(ステップS83)。そして呼出元の処理に戻る。
一方、値Bが子ノード番号ではない場合には、文節木生成部110は、値Bを1インクリメントする(ステップS73)。そして、文節木生成部110は、値Bが閾値以上となったか判断する(ステップS75)。値Bが閾値未満であれば、文節木生成部110は、カレントノードを入力文字の対応する符号のノード(すなわち、入力文字コードのノード)に位置づける(ステップS77)。そして呼出元の処理に移行する。
一方、値Bが閾値以上であれば、文節木生成部110は、カウンタ兼子ノード番号(又は拡張カウンタ兼子ノード番号)の配列のA番目に、新たな子ノードの符号を設定する(ステップS79)。データブロックのうち最も大きい符号+1で新たな子ノードの符号が設定される。さらに、文節木生成部110は、設定した符号の新たな子ノードのデータブロックを生成し、カレントノードを、生成したノードに位置づける(ステップS81)。
このような処理を実施すれば、図24A乃至図24Fに示すような文節木が生成される。
次に、圧縮マップ生成処理について説明する。上でも述べたように、文節木は、第1階層については文字コードの順に符号を付与しているので符号の小さい順にソートされているが、第2階層以降については出現順に符号が付与されてしまうので、階層や対応する文字コードとは無関係に符号が付与されている。図28に示す簡単な例では、第2階層には符号「0x0100」「0x0104」「0x0106」「0x0102」のノードが付与されており、連続した符号となっていない。また、文字コード「0x41」に対応する符号「0x0041」の子ノード「0x0100」で表す文字コードは「0x42」であり、子ノード「0x0104」で表す文字コードは「0x41」であり、この点においても符号は文字コードの順に整列されていない。
本実施の形態では、圧縮マップを生成する際に、図28に示すような符号の付与態様から、図29に示すように、階層順及び親ノード毎に対応する文字(符号に対応する文字列の最後の文字)のコード順にソートするように、符号を振り直す。図29の例では、第2階層の符号「0x0100」には文字「0x41」のノードを対応付け、符号「0x0101」には文字「0x42」のノードを対応付け、符号「0x0102」には文字「0x43」のノードを対応付け、符号「0x0103」に文字「0x2」のノードを対応付ける。また、第3階層の符号「0x0104」に文字「0x43」のノードを対応付け、符号「0x0105」に文字「0x41」のノードを対応付け、符号「0x0106」に文字「0x42」のノードを対応付け、符号「0x0107」に文字「0x43」のノードを対応付ける。このようにすれば、ノードの二分探索(二分検索)が可能となる。
より具体的に圧縮マップを説明する。圧縮マップは、親ノードの符号と自ノードの文字コード(自ノードの符号に対応する文字又は文字列の最後の文字)とを対応付ける対応付けデータを符号の順番で並べたデータである。実際には、カレントノードの符号と、当該カレントノードのカウンタ兼子ノード番号の配列に符号が格納されていることが確認された文字出現番号の配列の番号とを対応付ける対応付けデータを含む。図28に示すような文節木の場合には、図30の左側のような圧縮マップが生成される。上でも述べたように、符号は出現順に付与されるので、親ノードの符号の列はソートされておらず、結果として符号で表される文字列自体も文字コード順にソートされていない。なお、図30の例では、符号も文字列も示されているが、これらのデータは圧縮マップには含まれていない補足情報である。
本実施の形態では、文節木から図30の右側に示すように、上記のようなソート及び符号の振り直しを実施して、親ノードの符号と自ノードの文字コードとを対応付ける対応付けデータを、新たに振り直された符号の順番に並べることで圧縮マップを生成する。図30の例でも分かるように、親ノードの符号は符号の小さい順にソートされている。これによって圧縮マップの二分探索が可能となる。
本実施の形態では、ソートを行うために、図31に示すように、ソート領域を導入する。ソート領域には、以下の処理で特定される符号を、以下の処理で特定された順で格納する。この際、ソート領域の配列番号はソート後の符号となる。図31の例では、配列番号「0x0100」の位置には、第2階層のノードの符号として最初にソート前符号「0x0104」が格納される。すなわち、ソート前符号「0x0104」のノードは、今後ソート後符号「0x0100」として取り扱われる。このノードについては、親ノードの符号は「0x0041」であり、このノードで表される文字コードは「0x41」である。
より具体的な処理内容を、図24A乃至図24Fに示すような文節木のデータが得られた場合を一例として段階的に説明する。
まず、符号「0x0000」乃至「0x00FF」のノードについてはソートを行わなくてもよいので、そのまま圧縮マップにデータを登録する。例えば図32に示すようなデータが圧縮マップに登録される。なお、親ノードは根ノードなので親ノードの符号として「root」というデータが登録されており、さらにそれぞれの担当する文字「0x00」乃至「0xFF」が登録される。さらに、図33に示すように、ソート領域にはノード「0x0000」乃至「0x00FF」を小さい順に登録する。
次に、ソート領域に登録されている符号のノードを配列番号(=ソート後の符号)の小さい順に処理を行う。但し、子ノードが存在しないと圧縮マップには対応付けデータは登録されないので、図25に示す文節木に示すように符号「0x0040」までの処理の説明は省略する。そして、図34に示すように、配列番号「0x0041」を処理することになると、符号「0x0041」のデータブロックを参照し、その文字出現番号の配列番号「0x00」から順番に「0xFF」以外の値が登録されている位置を探索する。この例では、「0x41」番目に出現順番「1」が登録されているので、カウンタ兼子ノード番号の配列で「1」番目を参照する。そうすると、「0x100」以上の値として符号「0x0104」が登録されているので、ソート領域の最後端「0x0100」に「0x0104」を登録する。さらに、圧縮マップに、図35に示すように、ソート後符号「0x100」番目に、親ノードのソート後の符号「0x0041」と文字出現番号の配列番号「0x41」に相当する文字コードとを対応付ける対応付けデータを登録する。
また、図36に示すように、符号「0x0041」のデータブロックにおける文字出現番号の配列番号「0x42」番目には、出現順番「0」が登録されているので、カウンタ兼子ノード番号の配列で「0」番目を参照する。そうすると、「0x100」以上の値として符号「0x0100」が登録されているので、ソート領域の最後端「0x0101」に「0x0100」を登録する。さらに、圧縮マップに、図37に示すように、ソート後符号「0x101」番目に、親ノードのソート後の符号「0x0041」と文字出現番号の配列番号「0x42」に相当する文字コードとを対応付ける対応付けデータを登録する。
さらに、図38に示すように、符号「0x0041」のデータブロックにおける文字出現番号の配列番号「0x43」番目には、出現順番「2」が登録されているので、カウンタ兼子ノード番号の配列で「2」番目を参照する。そうすると、「0x100」未満の値「1」が登録されているので、圧縮マップに対応付けデータを登録することはない。文字出現番号の以後の配列番号について処理しても圧縮マップに対応付けデータを登録することはない。
次に、図39に示すように、配列番号「0x0042」を処理することになると、符号「0x0042」のデータブロックを参照し、その文字出現番号の配列番号「0x00」から順番に「0xFF」以外の値が登録されている位置を探索する。この例では、「0x41」番目に出現順番「0」が登録されているので、カウンタ兼子ノード番号の配列で「0」番目を参照する。そうすると、「0x100」未満の値「1」が登録されているので、圧縮マップに対応付けデータを登録することはない。
また、符号「0x0042」のデータブロックにおける文字出現番号の配列番号「0x42」番目には、「0xFF」が登録されているので圧縮マップにはデータは登録されない。
さらに、図40に示すように、符号「0x0042」のデータブロックにおける文字出現番号の配列番号「0x43」番目には、出現順番「1」が登録されているので、カウンタ兼子ノード番号の配列で「1」番目を参照する。そうすると、「0x100」以上の値として符号「0x0106」が登録されているので、ソート領域の最後端「0x0102」に「0x0106」を登録する。さらに、圧縮マップに、図41に示すように、ソート後符号「0x102」番目に、親ノードのソート後の符号「0x0042」と文字出現番号の配列番号「0x43」に相当する文字コードとを対応付ける対応付けデータを登録する。文字出現番号の以後の配列番号について処理しても圧縮マップに対応付けデータを登録することはない。
次に、図42に示すように、配列番号「0x0043」を処理することになると、符号「0x0043」のデータブロックを参照し、その文字出現番号の配列番号「0x00」から順番に「0xFF」以外の値が登録されている位置を探索する。この例では、「0x41」番目に出現順番「0」が登録されているので、カウンタ兼子ノード番号の配列で「0」番目を参照する。そうすると、「0x100」未満の値「1」が登録されているので、圧縮マップに対応付けデータを登録することはない。
さらに、図43に示すように、符号「0x0043」のデータブロックにおける文字出現番号の配列番号「0x42」番目には、出現順番「1」が登録されているので、カウンタ兼子ノード番号の配列で「1」番目を参照する。そうすると、「0x100」以上の値として符号「0x0102」が登録されているので、ソート領域の最後端「0x0103」に「0x0102」を登録する。さらに、圧縮マップに、図44に示すように、ソート後符号「0x103」番目に、親ノードのソート後の符号「0x0043」と文字出現番号の配列番号「0x42」に相当する文字コードとを対応付ける対応付けデータを登録する。文字出現番号の以後の配列番号について処理しても圧縮マップに対応付けデータを登録することはない。
ソート後符号「0x0044」のデータブロックを処理しても圧縮マップにデータが登録されることはなく、ソート後符号「0x00FF」までの全データブロックを処理しても圧縮マップにデータが登録されることはない。
また、図45に示すように、配列番号「0x0100」を処理することになると、符号「0x0100」のデータブロックを参照し、その文字出現番号の配列番号「0x00」から順番に「0xFF」以外の値が登録されている位置を探索する。この例では、「0x43」番目に出現順番「0」が登録されているので、カウンタ兼子ノード番号の配列で「0」番目を参照する。そうすると、「0x100」以上の値として符号「0x0101」が登録されているので、ソート領域の最後端「0x0104」に「0x0101」を登録する。さらに、圧縮マップに、図46に示すように、ソート後符号「0x104」番目に、親ノードのソート後の符号「0x0100」と文字出現番号の配列番号「0x43」に相当する文字コードとを対応付ける対応付けデータを登録する。文字出現番号の以後の配列番号について処理しても圧縮マップに対応付けデータを登録することはない。
また、ソート後符号「0x0101」のデータブロックを処理しても圧縮マップにデータが登録されることはない。
また、図47に示すように、配列番号「0x010」を処理することになると、符号「0x0102」のデータブロックを参照し、その文字出現番号の配列番号「0x00」から順番に「0xFF」以外の値が登録されている位置を探索する。この例では、「0x41」番目に出現順番「1」が登録されているので、カウンタ兼子ノード番号の配列で「1」番目を参照する。そうすると、「0x100」以上の値として符号「0x0105」が登録されているので、ソート領域の最後端「0x0105」に「0x0105」を登録する。さらに、圧縮マップに、図48に示すように、ソート後符号「0x105」番目に、親ノードのソート後の符号「0x0103」と文字出現番号の配列番号「0x41」に相当する文字コードとを対応付ける対応付けデータを登録する。このデータブロックについては、文字出現番号の以後の配列番号について処理すると、順調に圧縮マップに対応付けデータが追加されるようになる。
そして、図49に示すように、符号「0x0102」のデータブロックにおける文字出現番号の配列番号「0x49」番目には、出現順番「8」が登録されているので、拡張カウンタ兼子ノード番号の配列で「0」番目を参照する。そうすると、「0x100」以上の値として符号「0x010D」が登録されているので、ソート領域の最後端「0x010D」に「0x010D」を登録する。さらに、圧縮マップに、図50に示すように、ソート後符号「0x10D」番目に、親ノードのソート後の符号「0x0103」と文字出現番号の配列番号「0x49」に相当する文字コードとを対応付ける対応付けデータを登録する。文字出現番号の以後の配列番号について処理しても圧縮マップに対応付けデータを登録することはない。以下の処理で圧縮マップにはデータは登録されないので、説明を省略する。
次に、図51及び図52を用いて圧縮マップ生成処理を説明する。
圧縮マップ生成部120は、圧縮マップに、第1階層のノード「0x0000」乃至「0x00FF」のデータとして、根ノードを表すデータrootとノードの符号に対応する文字コードとを対応付ける対応付けデータを順番に追加する(図51:ステップS91)。また、圧縮マップ生成部120は、ソート領域に、第1の階層のノード「0x0000」乃至「0x00FF」の符号を、順番に追加する(ステップS93)。そして、圧縮マップ生成部120は、ソート領域から、ソート後符号の小さい順に、未処理の符号を1つ読み出す(ステップS95)。ここで未処理の符号を読み出すことができない場合には(ステップS97:Noルート)、呼出元の処理に戻る。
一方、未処理の符号を読み出すことができれば(ステップS97:Yesルート)、圧縮マップ生成部120は、文節木において、読み出した符号のノードのデータブロックを参照する(ステップS99)。そして、圧縮マップ生成部120は、エントリ追加処理を実施する(ステップS101)。このエントリ追加処理については、図52を用いて説明する。エントリ追加処理が終了すると、ステップS95に戻る。
次に、エントリ追加処理の処理フローについて説明する。
圧縮マップ生成部120は、読み出した符号のノードのデータブロックにおいて、文字出現番号の配列における未処理の番号における値Aを、番号の小さい順に取り出す(図52:ステップS111)。ここで、圧縮マップ生成部120は、処理が、文字出現番号の配列における終端まで既に行われていたか判断する(ステップS113)。処理が文字出現番号の配列における終端まで既に行われていた場合には、呼出元の処理に戻る。
一方、処理が文字出現番号の配列における終端まで行われていない場合には、圧縮マップ生成部120は、取り出した値Aが0xFFであり且つ文字出現数が256ではないか判断する(ステップS115)。この条件を満たす場合には、符号がカウンタ兼子ノード番号の配列に登録されていないのでステップS111に戻る。
一方、値Aが上で述べた条件を満たさない場合には、圧縮マップ生成部120は、値Aが8以上であるか判断する(ステップS117)。Aが8以上の場合には、拡張カウンタ兼子ノード番号の配列を用いているので、圧縮マップ生成部120は、スパンド番号の値を読み取り、スパンド番号番目(拡張スパンド番号の場合もある)の拡張カウンタ兼子ノード番号の配列を参照する(ステップS119)。また、圧縮マップ生成部120は、値Aを−8する(ステップS121)。そして、圧縮マップ生成部120は、値Aが8以上であるか判断する(ステップS123)。まだ値Aが8以上である場合には、圧縮マップ生成部120は、拡張カウンタ兼子ノード番号の最後尾に格納されている拡張スパンド番号の値Cを取得する(ステップS125)。そして処理はステップS119に戻る。
一方、値Aが8より小さい場合には、圧縮マップ生成部120は、参照先の拡張カウンタ兼子ノード番号の配列においてA番目に格納されている値Bを読み出す(ステップS127)。そして処理はステップS130に移行する。
一方、値Aが初めからAが8未満である場合には、圧縮マップ生成部120は、カウンタ兼子ノード番号の配列においてA番目に格納されている値Bを読み出す(ステップS129)。
そして、圧縮マップ生成部120は、取り出した値Bが「0x0100」以上であるか判断する(ステップS130)。取り出した値Bが「0x0100」未満であれば、圧縮マップのデータを追加することはないので、処理はステップS111に戻る。一方、取り出した値Bが「0x0100」以上であれば、圧縮マップ生成部120は、符号Bをソート領域の最後尾に追加する(ステップS131)。また、圧縮マップ生成部120は、圧縮マップに、ソート領域における処理対象の配列番号と文字出現番号の配列における処理対象の配列番号とを対応付ける対応付けデータを追加する(ステップS133)。そして処理はステップS111に戻る。
以上のような処理を実施することで、上で具体的に説明した処理が行われるようになる。また、このように生成された圧縮マップであれば、ディスクにそのまま格納することができ、圧縮処理及び伸張処理において利用することができる。
次に、圧縮マップを用いた圧縮処理について、図53乃至図55を用いて説明する。
圧縮処理部140は、圧縮対象の入力文字列から1文字取り出し、圧縮マップにおいて当該文字に対応する符号をカレントノードに位置づける(図53:ステップS141)。また、圧縮処理部140は、入力文字列から次の1文字取り出す(ステップS143)。ここで、圧縮処理部140は、ステップS143で文字を取り出すことができたか判断する(ステップS144)。文字を取り出すことができれば、圧縮処理部140は、カレントノードの符号が「0x0100」より小さいか判断する(ステップS147)。
カレントノードの符号が「0x0100」より小さい場合には、圧縮処理部140は、「親ノードの符号=カレントノードの符号、文字コード=取り出した文字」となるノードについて、圧縮マップにおいて符号「0x0100」から最終ノードの範囲で二分探索を実施する(ステップS149)。そして処理はステップS153に移行する。
一方、カレントノードが「0x0100」以上であれば、圧縮処理部140は、「親ノードの符号=カレントノードの符号、文字コード=取り出した文字」となるノードについて、圧縮マップにおいてカレントノードの符号+1から最終ノードの範囲で二分探索を実施する(ステップS151)。そして処理はステップS153に移行する。
ステップS153の処理に移行して、圧縮処理部140は、二分探索により該当ノードが見つかったか判断する(ステップS153)。該当ノードが見つからなかった場合には、圧縮処理部140は、圧縮結果としてカレントノードの符号を出力し(ステップS157)、カレントノードを、ステップS143で取り出した文字のノードに設定する(ステップS159)。そして処理はステップS143に戻る。一方、該当ノードが見つかった場合には、圧縮処理部140は、カレントノードを該当ノードに変更する(ステップS155)。そして処理はステップS143に戻る。
ステップS143で文字が取り出せなかった場合には、圧縮処理部140は、カレントノードの符号を圧縮結果として出力する(ステップS145)。そして処理は呼出元の処理に戻る。
このような処理を実施することで、文字列の圧縮が行われる。
例えば、図54に示すような圧縮マップが生成され、「ABCAA」という圧縮対象の文字列が入力された場合の処理について具体的に説明する。
まず、入力文字列「ABCAA」の「A」を処理する場合には、カレントノードが「0x0041」に設定される(図55における[1])。次に、「ABCAA」の「B」を処理する場合には、「親ノードの符号=0x0041、文字コード=0x42」というノードについて、符号「0x0100」から「0x0107」の範囲で二分探索を実施する。そうすると、符号「0x0101」が該当するノードであることが分かるので、カレントノードを「0x0101」に設定する(図55における[2])。
さらに、「ABCAA」の「C」を処理する場合には、「親ノードの符号=0x0101、文字コード=0x43」というノードについて、符号「0x0102」から「0x0107」の範囲で二分探索を実施する。そうすると、符号「0x0104」が該当するノードであることが分かるので、カレントノードを「0x0104」に設定する(図55における[3])。さらに、「ABCAA」の「A」を処理する場合には、「親ノードの符号=0x0104、文字コード=0x41」となるノードについて、符号「0x0105」から「0x0107」の範囲で二分探索を実施する。そうすると、見つからないので、カレントノードの符号「0x0104」を圧縮結果に追加する(図55における[4])。なお、文字コード「0x041」に対応する符号「0x0041」のノードをカレントノードに設定する。
さらに、「ABCAA」の「A」を処理する場合には、「親ノードの符号=0x0041、文字コード=0x41」というノードについて、符号「0x0100」から「0x0107」の範囲で二分探索を実施する。そうすると、符号「0x0100」が該当するノードであることが分かるので、カレントノードを「0x0100」に設定する(図55における[5])。これで入力文字列の全文字を処理したので、カレントノードの符号「0x0100」を出力して、処理を終了する(図55における[6])。
このように圧縮処理を実施することができる。
次に、図56及び図57を用いて伸張処理の処理フローを説明する。まず、伸張処理部150は、圧縮データから未処理の符号を1つ読み出し、圧縮マップにおいて該当するノードをカレントノードに設定する(図56:ステップS161)。なお、ステップS161で符号を取得できなければ処理は呼出元の処理に戻る(ステップS163:Noルート)。一方、符号が取得できれば(ステップS163:Yesルート)、伸張処理部150は、カレントノードの文字を作業域に出力する(ステップS165)。そして、伸張処理部150は、カレントノードに親ノードの符号が含まれているか判断する(ステップS167)。親ノードの符号がrootである場合には、親ノードの符号は無しと判断する。親ノードの符号がない場合には、伸張処理部150は、作業域の文字列を後ろから伸張結果として出力する(ステップS169)。処理はステップS161にる。一方、親ノードの符号がある場合には、伸張処理部150は、親ノードの符号をカレントノードに位置づける(ステップS171)。そして処理はステップS165に戻る。
このような処理を実施することで符号を文字列に伸張することができるようになる。
例えば図54に示すような圧縮マップを用いて符号「0x0104、010」が圧縮データとして入力された場合を説明する。
まず、符号「0x0104」のノードをカレントノードに設定し、カレントノードにおける文字「C」を作業領域に出力する。また、親ノードの符号が「0x0101」であるので、カレントノードを符号「0x0101」のノードに設定する(図57における[1])。また、カレントノードの符号「0x0101」における文字「B」を作業域に出力する。さらに、親ノードの符号が「0x0041」であるので、カレントノードを符号「0x0041」に設定する(図57における[2])。
そして、カレントノードの符号「0x0041」における文字「A」を作業域に出力する。但し、親ノードは存在しないので、作業域の文字を逆順に出力すると、「ABC」が得られる。
次に、新たな符号「0x010」を読み出すと、カレントノードに設定して、当該符号のノードにおける文字「A」を作業域に出力する。そして、親ノードの符号が「0x0041」であるので、カレントノードを符号「0x0041」のノードに設定する(図57における[4])。そして、カレントノードにおける文字「A」を作業域に出力する。ここでカレントノードには親ノードの符号は無いので、作業域の文字列を逆順に出力すると、「AA」がさらに得られる。ここで伸張処理が完了する(図57における[5])。
このように文節木のデータ構造を変更したため、処理途中で消費するメモリ容量を削減できる。
なお、圧縮マップを生成せずとも、文節木のデータを用いて圧縮処理を実施することができる。
例えば、図24A乃至図24Fで表した文節木のデータを用いて文字列「ABCAA」を圧縮する場合を一例に説明する。
「ABCAA」における「A」を読み出すと、図58に示すように、文字「A」に対応する符号「0x0041」のノードをカレントノードに設定する。さらに、「ABCAA」における「B」を読み出すと、文字出現番号の配列において「0x42(B)」番目の値「0」を得て、カウンタ兼子ノード番号の配列における出現順番「0」の値を読み出す。この場合、符号「0x0100」が得られる。符号「0x0100」であれば、この符号に対応するノードをカレントノードに設定する。
次に、「ABCAA」における「C」を読み出すと、図59に示すように、文字出現番号の配列において「0x43(C)」番目の値「0」を得て、カウンタ兼子ノード番号の配列における出現順番「0」の値を読み出す。ここでは、符号「0x0101」が得られる。符号「0x0101」であれば、この符号のノードをカレントノードに設定する。
また、「ABCAA」における「A」を読み出すと、図60に示すように、文字出現番号の配列において「0x41(A)」番目の値「0」を得て、カウンタ兼子ノード番号の配列における出現順番「0」の値を読み出す。そうすると、符号「0x0100」より小さい値であるので、カレントノードの符号「0x0101」を圧縮結果として出力する。
さらに、「ABCAA」における「A」を読み出すと、図61に示すように、文字出現番号の配列において「0x41(A)」番目の値「1」を得て、カウンタ兼子ノード番号の配列における出現順番「1」の値を読み出す。そうすると、符号「0x0104」が得られる。ここで入力文字列は終了するので、符号「0x0104」も圧縮結果として出力する。そうすると、最終的に「0x0101」「0x0104」が圧縮結果として出力されることになる。
また、文節木のデータを用いて圧縮データを伸張することもできる。ここでは、図24A乃至図24Fで表した文節木のデータを用いて符号「0x0101」「0x0104」を伸張する場合を一例に説明する。
まず、図62に示すように、符号「0x0101」を、カウンタ兼子ノード番号の配列の中に含むノードを探索する。そうすると、今回は符号「0x0100」のノードの出現順番「0」が特定される。そうすると、文字出現番号の配列で「0」が登録されている番号を探索すると「0x43」が得られる。この文字コード「0x43」を作業域に出力する。
次に、図63に示すように、符号「0x0100」を、カウンタ兼子ノード番号の配列の中に含むノードを探索する。そうすると、今回は符号「0x0041」のノードの出現順番「0」が特定される。そうすると、文字出現番号の配列で「0」が登録されている番号を探索すると「0x42」が得られる。この文字コード「0x42」を作業域に出力する。
次に、符号「0x0041」が探索対象となるが符号「0x0100」より小さいので、符号「0x0041」に対応する文字「0x41」を作業域に出力する。
そうすると、図64に示すように、作業域内の文字の順番を入れ替えて、「0x41」「0x42」「0x43」が伸張結果として出力される。
次に、図65に示すように、符号「0x0104」を、カウンタ兼子ノード番号の配列の中に含むノードを探索する。そうすると、今回は符号「0x0041」のノードの出現番号「1」が特定される。そうすると、文字出現番号の配列で「1」が登録されている番号を探索すると「0x41」が得られる。この文字コード「0x41」を作業域に出力する。
さらに、符号「0x0041」が探索対象となるが上で述べたのと同様に符号「0x0100」より小さいので、符号「0x0041」に対応する文字「0x41」を作業域に出力する。
そうすると、図66に示すように、作業域内の文字の順番を入れ替えて、「0x41」「0x41」を伸張結果に追加する。このようにして、「ABCAA」が得られる。
[実施の形態2]
本実施の形態では圧縮処理の処理速度を向上させるために、圧縮マップのデータ構造を変更する。
具体的には、各ノードについて子ノードの最大ノード番号(最大子ノードの符号)を保持するようにする。圧縮処理では、ステップS149及びステップS151でも、カレントノードを親ノードとするノードを探索している。すなわち、カレントノードの子ノードであることが検索の条件となっているが、探索範囲はステップS149では「0x0100」から最終ノードまでであり、ステップS151ではカレントノードの符号+1から最終ノードまでである。
図67に模式的に示す文節木において、例えば、カレントノードが「0x0103」のノードであるとすると、子ノードの探索範囲は、実際には「0x0105」乃至「0x0107」のノードであるが、第1の実施の形態では、「0x0104」についても探索対象となっていた。この例では1つのノードしか余分になっていないが、実際には「0x0100」「0x0101」「0x0102」に多数の子ノードが存在する場合には影響がある。また、「0x0101」がカレントノードであれば、子ノードは「0x0104」のみであるが、第1の実施の形態では「0x102」乃至「0x0107」が探索範囲となっていた。
これに対して各ノードについて最大子ノードの符号を保持すれば、カレントノードの1つ前のノードの最大子ノードの符号+1のノードからカレントノードの最大子ノードまでを探索範囲として絞り込むことができるようになる。なお、子ノードが存在しない場合には、そのノードの符号−1のノードの最大子ノードの符号をコピーしておく。
このように最大子ノードの符号を保持すれば、カレントノードが「0x0103」であれば最大子ノードは「0x0107」となっている。さらにカレントノードの符号「0x0103」−1=「0x0102」の最大子ノードの符号「0x0104」+1=「0x0105」が得られるので、探索範囲は「0x0105」乃至「0x0107」であると効率的に特定できるようになる。
具体的には、圧縮マップは、図68に示すように、親ノードの符号と、文字コードと、最大子ノードの符号とを対応付ける形に変形される。
次に、本実施の形態に係る圧縮マップ生成処理について説明する。本実施の形態では、圧縮マップ生成処理におけるエントリ追加処理を、図69に示すように変更する。但し、変更部分は、ステップS135が追加された部分のみである。
ステップS135では、1つのノードについて文字出現番号の配列を最後まで処理した後に、圧縮マップ生成部120は、ソート領域に最後に追加した符号の配列番号を最大子ノードの符号として設定する。処理に係るノードについてソート領域に子ノードの符号を追加しなかった場合、すなわち子ノードが存在していない場合には、処理に係るノードより前のノードと同じ符号が最大子ノードの符号として設定されることになる。
また、本実施の形態に係る圧縮処理は、図70に示すような処理フローとなる。但し、図53の処理フローと異なる部分は、ステップS147乃至SS151の部分のみである。
具体的には、圧縮処理部140は、カレントノードの符号が「0x0000」であるか否かを判断する(ステップS147b)。これは、「0x0000」のノードだけが、カレントノードより1つ前のノードの最大子ノードを取得できないためである。カレントノードの符号が「0x0000」である場合には、圧縮処理部140は、「親ノードの符号=カレントノードの符号、文字コード=取り出した文字」となるノードについて、圧縮マップにおいて符号「0x0100」から最大子ノードの符号の範囲で二分探索を実施する(ステップS149b)。そして処理はステップS153に移行する。ステップS149よりも探索の範囲が狭められている。
一方、カレントノードが「0x0000」でない場合には、圧縮処理部140は、「親ノードの符号=カレントノードの符号、文字コード=取り出した文字」となるノードについて、圧縮マップにおいて、カレントノードの1つ前のノードの最大子ノードの符号+1から最大子ノードの符号の範囲で二分探索を実施する(ステップS151b)。そして処理はステップS153に移行する。同様に、ステップS151よりも探索の範囲が狭められている。
図67の文節木について上で述べた処理を実施すれば、図71のような圧縮マップが得られる。このような圧縮マップを用いて、入力文字列「ABCAA」について上で述べた圧縮処理を実施すると、以下のようになる。なお、処理結果自体は、図55に示したものと同様である。
まず、入力文字列「ABCAA」の「A」を処理する場合には、カレントノードが「0x0041」に設定される(図55における[1])。次に、「ABCAA」の「B」を処理する場合には、「親ノードの符号=0x0041、文字コード=0x42」というノードについて、符号「0x0100」から「0x0101」(カレントノードの最大子ノードの符号)の範囲で二分探索を実施する。そうすると、符号「0x0101」が該当するノードであることが分かるので、カレントノードを「0x0101」に設定する(図55における[2])。
さらに、「ABCAA」の「C」を処理する場合には、「親ノードの符号=0x0101、文字コード=0x43」というノードについて、符号「0x0104」(1つ前のノードの最大子ノードの符号+1=カレントノードの最大子ノードの符号)で二分探索を実施する。そうすると、符号「0x0104」が該当するノードであることが分かるので、カレントノードを「0x0104」に設定する(図55における[3])。
さらに、「ABCAA」の「A」を処理する場合には、「親ノードの符号=0x0104、文字コード=0x41」となるノードについて、符号「0x0108」(1つ前のノードの最大子ノードの符号+1)から符号「0x0107」(カレントノードの最大子ノード)が探索範囲として特定されるが、探索範囲の始点と終点が逆転しており、探索不要であることが分かる。そうすると、目的のノードは見つからないので、カレントノードの符号「0x0104」を圧縮結果に追加する(図55における[4])。なお、文字コード「0x041」に対応する符号「0x0041」のノードをカレントノードに設定する。
さらに、「ABCAA」の「A」を処理する場合には、「親ノードの符号=0x0041、文字コード=0x41」というノードについて、符号「0x0100」から「0x0101」(カレントノードの最大子ノードの符号)の範囲で二分探索を実施する。そうすると、符号「0x0100」が該当するノードであることが分かるので、カレントノードを「0x0100」に設定する(図55における[5])。これで入力文字列の全文字を処理したので、カレントノードの符号「0x0100」を出力して、処理を終了する(図55における[6])。
以上のように具体例でも探索範囲が狭められていることが分かる。
[実施の形態3]
第3の実施の形態では、伸張処理の処理速度を向上させる。図56で示した処理では、根ノード(root)までノードを遡ることになるので、ノードの探索の処理回数が多くなっている。そこで、本実施の形態では、圧縮マップのデータ構造を変更すると共に、新たに階層情報及び伸張マップを生成して保持しておくものとする。このように追加のデータを保持するようになったとしても、追加で必要な容量は800KB程度であり、負担がそれほど増えるわけではない。なお、圧縮マップは、446KB程度である。
図72に本実施の形態に係る圧縮マップの一例を示す。図72に示すように、基本的な構成は第1の実施の形態と同様であるが、親ノードの符号と自ノードの文字コードと自ノードの所属階層の番号とを対応付けて格納するようになっている。
また、図73は、第1階層以降の各階層について、階層内ノード数と、階層内先頭符号と、伸張文字列先頭オフセット(offset)値とが対応付けられるようになっている。図73の例は、図67の文節木を基にしているが、階層情報があれば、第2階層には4つのノード「0x0100」「0x0101」「0x0102」「0x0103」があり、これらがそれぞれ2文字からなる文字列を表していることが分かる。また、これらの文字列は合計2×4=8バイトである。また、第3階層においては4つのノード「0x0104」「0x0105」「0x0106」「0x0107」があり、これらがそれぞれ3文字からなる文字列を表していることが分かる。また、これらの文字列は合計3×4=12バイトであることも分かる。伸張文字列先頭オフセット値は、階層が特定されたとき、当該階層の先頭の符号の文字又は文字列が、伸マップの先頭からどれだけ離れた位置に配置されているかを示している。
さらに、図74は、本実施の形態に係る伸張マップの一例を示す。本実施の形態に係る伸張マップは、所属するノードの符号に対応する文字が、符号の順番で格納されている連想配列である。図67の文節木であれば、第2階層については、0番目には「AA」、1番目には「AB」、2番目には「BC」、3番目には「CB」が登録されている。また、第3階層については、0番目には「ABC」、1番目には「CBA」、2番目には「CBB」、3番目には「CBC」が登録されている。
このような圧縮マップなどのデータを生成する処理を、図75乃至図77を用いて説明する。
圧縮マップ生成部120は、圧縮マップに、第1階層のノード「0x0000」乃至「0x00FF」のデータとして、根ノードを表すデータrootとノードの符号に対応する文字コードと所属階層番号「1」を対応付ける対応付けデータを順番に追加する(図75:ステップS181)。
また、圧縮マップ生成部120は、階層情報に第1階層の情報を設定する(ステップS183)。すなわち、第1階層には256個のノードがあるので、階層内ノード数に256を設定し、階層内先頭符号に「0x0000」を設定し、伸張文字列先頭オフセットには「0」を設定する。これらは固定値である。
さらに、圧縮マップ生成部120は、伸張マップに第1層の情報を設定する(ステップS185)。第1層は1文字で文字コードそのものであるから「0x00」から「0xFF」までを設定する。これらは固定値である。
そして、圧縮マップ生成部120は、ソート領域に、第1の階層のノード「0x0000」乃至「0x00FF」の符号を、順番に追加する(ステップS187)。また、圧縮マップ生成部120は、次階層内先頭符号に「0x0100」を設定する(ステップS189)。次階層内先頭符号は、以下で用いる変数である。さらに、圧縮マップ生成部120は、階層カウンタを1に初期化する(ステップS190)。
その後、圧縮マップ生成部120は、ソート領域から、ソート後符号の小さい順に、未処理の符号を1つ読み出す(ステップS191)。ここで未処理の符号を読み出すことができない場合には(ステップS193:Noルート)、圧縮マップ生成部120は、以下で説明するノード数カウンタの値を、階層情報における最終階層の階層内ノード数として設定する(ステップS195)。そして処理は呼出元の処理に戻る。
一方、未処理の符号を読み出すことができれば(ステップS193:Yesルート)、圧縮マップ生成部120は、文節木において、読み出した符号のノードのデータブロックを参照する(ステップS197)。そして、圧縮マップ生成部120は、本実施の形態に係るエントリ追加処理3を実施する(ステップS199)。このエントリ追加処理3については、図76を用いて説明する。さらに、エントリ追加処理3の後に、圧縮マップ生成部120は、設定処理を実施する(ステップS201)。設定処理については、図77を用いて説明する。そして処理はステップS191に戻る。
次に、エントリ追加処理3について図76を用いて説明する。図76は、図52とほぼ同じであるが、ステップS133がステップS133bに変更され、ステップS137及びS139が追加されている。
すなわち、ステップS133bでは、圧縮マップ生成部120は、圧縮マップに、ソート領域における処理対象の配列番号(親ノードの符号)と文字出現番号の配列における処理対象の配列番号(子ノードの文字コード)と階層カウンタの値(所属階層)とを対応付ける対応付けデータを追加する(ステップS133b)。
また、圧縮マップ生成部120は、伸張マップに、親ノードの文字列+文字出現番号の配列番号(子ノードの文字コード)を、子ノードに対応する文字列として階層カウンタの値の階層において設定する(ステップS137)。親ノードの文字列(処理に係る符号の文字列)は、例えば圧縮マップをステップS95で特定された符号を用いてたどることによって特定する。また、親ノードの文字列は、圧縮マップで所属階層を取得して、階層情報における、カレントノードが所属する階層の「伸張文字列先頭オフセット」+(カレントノードの符号−階層内先頭符号)×階層の位置を、伸張マップにおいて参照すれば、得ることができる。
さらに、圧縮マップ生成部120は、ノード数カウンタの値を1インクリメントする(ステップS139)。そして処理はステップS111に戻る。
以上のようにすれば、圧縮マップ、階層情報及び伸張マップの一部を生成できるようになる。
次に、設定処理について、図77を用いて説明する。
圧縮マップ生成部120は、これまでに設定されていた次階層先頭符号がカレントノードの符号であるか判断する(ステップS211)。次階層先頭符号の初期値は「0x0100」である。次階層先頭符号がカレントノードの符号ではない場合には処理はステップS219に移行する。一方、次階層先頭符号がカレントノードの符号であれば、圧縮マップ生成部120は、エントリ追加処理3において、子ノードが特定されたか判断する(ステップS213)。子ノードが存在しない場合には、圧縮マップ生成部120は、次階層先頭符号に、カレントノードの符号+1を設定する(ステップS217)。そして処理は呼出元の処理に戻る。
一方、子ノードが存在した場合には、次階層先頭符号に、エントリ追加処理3において特定された子ノードのうち最小子ノードの符号を設定する(ステップS215)。そして処理はステップS219に移行する。
ステップS219の処理に移行して、圧縮マップ生成部120は、カレントノードの符号+1が次階層先頭符号であるか判断する(ステップS219)。すなわち、処理に係るノードが、現階層の最終ノードであるか判断する。カレントノードの符号+1が次階層先頭符号である場合には、圧縮マップ生成部120は、階層情報の階層内ノード数に、ノード数カウンタの値を設定する(ステップS221)。また、圧縮マップ生成部120は、階層情報において、次階層の階層内先頭符号としてカレントノード+1を設定する(ステップS223)。さらに、圧縮マップ生成部120は、階層情報における次の階層の伸張文字列先頭オフセットとして、現階層の伸張文字列先頭オフセット+ノード数カウンタ×階層番号(階層カウンタの値)を設定する(ステップS225)。
そして、圧縮マップ生成部120は、ノード数カウンタを0に初期化し(ステップS227)、階層カウンタの値を1インクリメントする(ステップS229)。そして処理は、呼出元の処理に戻る。
このような処理実施することで上で述べた圧縮マップ、階層情報及び伸張マップを生成することができる。
次に、本実施の形態に係る圧縮処理3について図78を用いて説明する。本実施の形態に係る圧縮処理3は、第1の実施の形態に係る圧縮処理とほぼ同じであり、異なるのはステップS147乃至S151に代わり、ステップS151cを実行するような点である。
すなわち、圧縮処理部140は、「親ノードの符号=カレントノードの符号、文字コード=取り出した文字」となるノードについて、圧縮マップにおいて、カレントノードの階層の次の階層の階層内先頭符号(階層情報内のデータ)から次の階層(階層情報内のデータ)の階層内ノード数の範囲で二分探索を実施する(ステップS151c)。
このようにすれば、第1の実施の形態に係る圧縮処理における探索範囲より狭められている。
例えば、「ABCAA」という圧縮対象の文字列が入力された場合の処理について具体的に説明する。
まず、入力文字列「ABCAA」の「A」を処理する場合には、カレントノードが「0x0041」に設定される(図55における[1])。次に、「ABCAA」の「B」を処理する場合には、「親ノードの符号=0x0041、文字コード=0x42」というノードについて、現階層が「1」であるから第2階層の符号「0x0100」から「0x0103」の範囲で二分探索を実施する。そうすると、符号「0x0101」が該当するノードであることが分かるので、カレントノードを「0x0101」に設定する(図55における[2])。
さらに、「ABCAA」の「C」を処理する場合には、「親ノードの符号=0x0101、文字コード=0x43」というノードについて、現階層が「2」であるから第3階層の符号「0x0104」から「0x0107」の範囲で二分探索を実施する。そうすると、符号「0x0104」が該当するノードであることが分かるので、カレントノードを「0x0104」に設定する(図55における[3])。
さらに、「ABCAA」の「A」を処理する場合には、「親ノードの符号=0x0104、文字コード=0x41」となるノードについて、現階層が「3」であるので、次階層が存在しないので、探索無しで該当ノード無しと言うことが分かる。従って、カレントノードの符号「0x0104」を圧縮結果に追加する(図55における[4])。なお、文字コード「0x41」に対応する符号「0x0041」のノードをカレントノードに設定する。
さらに、「ABCAA」の「A」を処理する場合には、「親ノードの符号=0x0041、文字コード=0x41」というノードについて、現階層が「1」であるから第2階層の符号「0x0100」から「0x0103」の範囲で二分探索を実施する。そうすると、符号「0x0100」が該当するノードであることが分かるので、カレントノードを「0x0100」に設定する(図55における[5])。これで入力文字列の全文字を処理したので、カレントノードの符号「0x0100」を出力して、処理を終了する(図55における[6])。
このように圧縮処理を実施することができる。
次に、本実施の形態に係る伸張処理2の処理内容について図79及び図80を用いて説明する。
まず、伸張処理部150は、圧縮データから1つ符号を取り出し、圧縮マップにおいて該当するノードをカレントノードに位置づける(ステップS231)。圧縮データから符号が読み出せなかった場合には(ステップS233:Noルート)、処理は呼出元の処理に戻る。一方、圧縮データから符号を読み出すことができれば(ステップS233:Yesルート)、階層情報における、カレントノードが所属する階層の「伸張文字列先頭オフセット」+(カレントノードの符号−階層内先頭符号)×階層の位置を、伸張マップにおいて参照し、階層バイト分出力する(ステップS235)。そしてステップS231に戻る。伸長文字列先頭オフセット、階層内先頭符号については、階層情報から読み出すことによって得られる。
このように階層情報と伸張マップを用いることで処理が高速化される。
例えば、「0x0104」「0x0100」を伸張する場合の処理を図80を用いて説明する。
まず、符号「0x0104」を読み出すと、圧縮マップから第3階層であることが特定されるので、第3階層の伸張文字列先頭オフセット「264」+(カレントノードの符号「0x0104」−階層内先頭符号「0x0104」)×3=「264」となるので、伸張マップの先頭から264バイトから3バイト分取り出す。そうすると、「ABC」が出力される(図80[1])。
さらに、次の符号「0x0100」を読み出すと、圧縮マップから第2階層であることが特定されるので、第2階層の伸張文字オフセット「256」+(カレントノードの符号「0x0100」−階層内先頭符号「0x0100」)×2=「256」となるので、伸張マップの先頭から256バイトから2バイト分取り出す。そうすると、「AA」がさらに出力されることになる(図80[2])。
以上のように2ステップで伸張されるので、処理が高速化される。
[実施の形態4]
本実施の形態では実施の形態2及び3を統合する。また、伸張マップ及び階層情報において固定で且つ圧縮マップのデータから得られる情報については省略することで、メモリ使用量を削減する。
本実施の形態に係る圧縮マップの一例を図81に示す。本実施の形態では、ソート後の符号の順番で、自ノードの文字コードと、最大子ノードの符号と、所属階層とを対応付けている。親ノードの符号については、階層情報及び伸張マップがあれば用いられないので、省略されている。
さらに、図82に本実施の形態に係る階層情報を示す。本実施の形態に係る階層情報は、第3の実施の形態と異なり、第1階層のデータが省略されている。第2階層以降の各階層について、階層内ノード数と、階層内先頭符号と、伸張文字列先頭オフセットとが登録されるようになっている。第1階層のデータが省略されているので、伸張文字列先頭オフセットの値が変更されている。
また、図83に本実施の形態に係る伸張マップを示す。本実施の形態に係る伸張マップは、第3の実施の形態と異なり、第1階層のデータが省略されている。伸張マップは、第2階層以降の符号の小さい順に、該当する文字列が格納されている連想配列である。
本実施の形態に係る圧縮マップ生成処理3の処理フローを図84に示す。第3の実施の形態に係る圧縮マップ生成処理2と異なる部分は、ステップS183及びS185が存在せず、エントリ追加処理3を実施するステップS199の代わりにエントリ追加処理4を実施するステップS199bを実施する点、設定処理を実施するステップS201の代わりに設定処理2を実施するステップS201bを実施する点が異なっている。
次にエントリ追加処理4の処理フローを図85に示す。第3の実施の形態に係るエントリ追加処理3と異なる点は、配列の終端の場合に実行するステップS135(エントリ追加処理2で説明した処理)を実施する点と、ステップS133bの代わりにステップS133cを実施する点である。
ステップS133cでは、圧縮マップ生成部120は、圧縮マップに、文字出現番号の配列における処理対象の配列番号(子ノードの文字コード)と階層カウンタの値(所属階層)とを対応付ける対応付けデータを追加する(ステップS133c)。ソート領域における処理対象の配列番号(親ノードの符号)を登録しなくなった点が異なる。
また、圧縮マップ生成処理3に含まれる設定処理2は、図77とは異なり、図86に示すような処理フローとなる。但し、図77との差は、ステップS220及びS222が追加され、ステップS223及びS225の代わりに、ステップS223b及びS225bが実施されるようになっている。
この設定処理2において、ステップS219においてカレントノードの符号+1が次階層先頭符号である場合、すなわち当該階層の最終ノードである場合には、圧縮マップ生成部120は、現在の階層カウンタの値が1であるか判断する(ステップS220)。現在の階層カウンタの値が1である場合には、階層情報にデータを追加しないので、圧縮マップ生成部120は、階層情報における次の階層の伸張文字列先頭オフセットに「0」を設定する(ステップS222)。そして処理はステップS225bに移行する。
一方、現在の階層カウンタの値が1でない場合には、圧縮マップ生成部120は、階層情報の階層内ノード数に、ノード数カウンタの値を設定する(ステップS221)。また、圧縮マップ生成部120は、階層情報における次の階層の伸張文字列先頭オフセットとして、現階層の伸張文字列オフセット+ノード数カウンタ×階層数(階層カウンタの値)を設定する(ステップS223b)。この処理はステップS225と同じである。さらに圧縮マップ生成部120は、階層情報において、次階層の階層内先頭符号としてカレントノードの符号+1を設定する(ステップS225b)。このステップはステップS223と同じである。以降の処理は図77と同じである。
次に、本実施の形態に係る圧縮処理4の処理フローを図87に示す。第2の実施の形態に係る圧縮処理2との差は、ステップS149bとステップS151bが、ステップS149dとステップS151dとに変更された点である。
具体的には、圧縮処理部140は、カレントノードの符号が「0x0000」であるか否かを判断する(ステップS147b)。これは、「0x0000」のノードだけが、カレントノードより1つ前のノードの最大子ノードを取得できないためである。カレントノードの符号が「0x0000」である場合には、圧縮処理部140は、文字コード=取り出した文字となるノードについて、圧縮マップにおいて符号「0x0100」から最大子ノードの符号の範囲で二分探索を実施する(ステップS149d)。親ノードについてのデータが圧縮マップから削除されているため、このような処理になる。
一方、カレントノードが「0x0000」でない場合には、圧縮処理部140は、文字コード=取り出した文字となるノードについて、圧縮マップにおいて、カレントノードの1つ前のノードの最大子ノードの符号+1から最大子ノードの符号の範囲で二分探索を実施する(ステップS151d)。そして処理はステップS153に移行する。
なお、伸張処理については、図79の伸張処理2の代わりに図88に示す伸張処理3を実施する。図88と図79の差については、ステップS237及びS239が追加されている点である。具体的には、伸張処理部150は、圧縮マップにおけるカレントノードの所属階層の値が「1」であるか判断する(ステップS237)。所属階層の値が「1」である場合には、伸張処理部150は、圧縮マップにおけるカレントノードにおける文字コードを出力し(ステップS239)、処理はステップS231に移行する。一方、所属階層の値が「2」以上であれば、処理はステップS235に移行する。このような処理を実施すれば、階層情報及び伸張マップのデータ量を削減しても伸張処理が高速化される。
以上本実施の形態を説明したが、本技術はこれに限定されるものではない。
例えば、上で述べた機能ブロック図は必ずしも実際のプログラムモジュール構成とは一致しない。また、処理フローについても処理結果が変わらない限り、処理順番を入れ替えたり、並列実行するようにできる。
さらに上で述べた処理については1台のコンピュータで処理する例を示したが、複数のコンピュータで処理するようにしても良い。
なお、上で述べた情報処理装置100は、コンピュータ装置であって、図89に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本実施の形態をまとめると、以下のようになる。
本実施の形態に係るデータ構造生成方法は、(A)文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と上記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に当該文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字について生成し、(B)入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において入力文字列において着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数が今回閾値を超えることになることを検出すると、第3の領域において当該出現順番のデータとして、着目する文字又は文字列と次に出現した文字とからなる第2の文字列に対応する符号を格納し、(C)第2の文字列についてのデータブロックを生成する処理を含む。
このような処理を実施することによって得られる複数のデータブロックを用いれば、メモリ使用量が削減されている。
なお、上で述べたデータ構造生成方法は、(D)入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において、入力文字列において着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数を増分しても閾値を超えないことを検出すると、次に出現した文字を、着目する文字に設定する処理をさらに含むようにしても良い。
さらに、上で述べたデータ構造生成方法は、(E)入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において、入力文字列において着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして着目する文字又は文字列と次に出現した文字とからなる第2の文字列に対応する符号が保持されていることを検出すると、当該第2の文字列を、着目する文字列に設定する処理をさらに含むようにしても良い。
さらに、上で述べた第3の領域が、所定出現順番までの領域に限定されている場合もある。この場合、上で述べたデータブロックが、第3の領域の拡張領域を示すデータを保持する第4の領域をさらに含むようにしても良い。これにより、下位のデータブロックの数が多い場合にも対処できるようになる。
また、上で述べたデータ構造生成方法は、(F)入力文字列について生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字又は文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造における第1階層の各データブロックについては最上位階層を表すデータと当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードとを対応付ける第1の対応付けデータと、上記状態における複数のデータブロックで表される木構造における第2階層以降の各データブロックについては当該データブロックの親データブロックの第1の領域に保持されている第2の符号と当該データブロックで追加された文字のコードとを対応付ける第2の対応付けデータとを含むデータを生成する生成処理をさらに含むようにしても良い。
このようにすれば、ディスクに格納できる形式でさらに圧縮処理及び伸張処理に好適なデータ構造(例えば実施の形態に係る圧縮マップ)が生成される。
また、第1の対応付けデータ及び第2の対応付けデータにおいて、当該データブロックについて第3の領域において保持されている最も大きい第2の符号をさらに対応付けられている場合もある。例えば圧縮処理における探索処理を高速化することができるようになる。
なお、上で述べたデータ構造生成方法は、(G)入力文字列について生成された複数のデータブロックのうち使用される可能性がある文字についての第1のデータブロックの各々を、当該第1のデータブロックの符号の小さい順に処理対象に設定する処理と、(H)処理対象の第1のデータブロックの第2の領域において文字のコードの順番で出現順番を読み出し、当該処理対象の第1のデータブロックの第3の領域において当該出現順番のデータとして符号が保持されている場合には、当該出現順番のデータとして保持されている符号のデータブロックを第1のデータブロックの後に処理すべき第2のデータブロックに追加し、当該処理対象の第1のデータブロックの処理順番に相当する第2の符号と上記文字のコードとを対応付ける対応付けデータを順に格納する第1の格納処理と、(I)第1のデータブロックの後に処理すべき第2のデータブロックの各々を、追加された順番で処理対象に設定する処理と、(J)処理対象の第2のデータブロックの第2の領域において文字のコードの順番で出現順番を読み出し、当該処理対象の第2のデータブロックの第3の領域において当該出現順番のデータとして符号が保持されている場合には、当該出現順番のデータとして保持されている符号のデータブロックを上記後に処理すべき第2のデータブロックに追加し、当該処理対象の第2のデータブロックの処理順番に相当する第2の符号と上記文字のコードとを対応付ける対応付けデータを順に格納する第2の格納処理とをさらに含むようにしても良い。
さらに、上で述べたデータ構造生成方法は、(K)入力文字列について生成された複数のデータブロックのうち使用される可能性がある文字についての第1のデータブロックの各々について、最上位のデータブロックを表すデータと当該第1のデータブロックについての文字のコードとを対応付ける対応付けデータを文字のコードの順に格納する処理をさらに含むようにしても良い。この場合、第1の格納処理又は第2の格納処理において、最後に上記対応付けデータを格納した際の第2の符号を、処理対象の第1のデータブロックについての文字のコード又は処理対象の第2のデータブロックについての文字列の最終文字のコードに対応付けて格納するようにしても良い。
本実施の形態の第2の態様に係るデータ構造生成方法は、(A)文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字と、既にデータブロックが生成されている、入力文字列内の文字又は文字列の次に所定の出現回数以上出現する文字とについて生成する第1生成処理と、(B)第1生成処理により生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字又は文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造の第1階層の各データブロックについては最上位階層を表すデータ又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードと階層番号とを対応付ける第1の対応付けデータと、上記状態における複数のデータブロックで表される木構造の第2階層以降の各データブロックについては当該データブロックの親データブロックの第1の領域に保持されている第2の符号又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックで追加された文字のコードと階層番号とを対応付ける第2の対応付けデータとを含むデータを生成する第2生成処理と、(C)上記状態における複数のデータブロックで表される木構造の第2階層以降の各階層に属する各データブロックの第1の領域に保持されている第2の符号に対応する文字列のコードを含む第1のデータを生成する第3生成処理と、(D)上記状態における複数のデータブロックで表される木構造の第2階層以降の各階層について当該階層内のデータブロック数と当該階層内のデータブロックの第1の領域に保持されている最小の第2の符号と第1のデータにおいて当該最小の第2の符号に対応する字列の配置位置の、先頭からのオフセット値とを対応付ける階層情報を生成する第4成処理とを含む。
これによって生成されるデータを用いれば、圧縮処理及び伸張処理の処理速度を上げることができる。
本実施の形態の第3の態様に係るデータ構造は、文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と上記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に上記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを各ノードのデータとして含む文節木のデータ構造である。これによってメモリ使用量を大幅に削減できるようになる。
本実施の形態の第4の態様に係るデータ構造は、文節木に対応するデータ構造であって、文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたものである。このようなデータであれば、そのままディスクに格納して後に使用することも可能である。
本実施の形態の第4の態様に係るデータ構造において、上で述べた対応付けデータが、さらに当該ノードの子ノードの符号のうち最大の符号をさらに対応付けている場合もある。これによって、圧縮処理の処理効率を上げることができるようになる。
また、本実施の形態の第5の態様に係るデータ構造は、文節木に対応する第1のデータと、文節木の各ノードに対応する文字又は文字列についての第2のデータと、文節木の階層についての第3のデータとを有する。そして、第1のデータにおいて、文節木の各ノードについて、当該ノードの親ノードの符号又は当該ノードの子ノードの符号のうち最大の符号と、当該ノードで表される文字のコードと、当該ノードが所属する階層とを対応付けデータが、各ノードの符号の順番に並べられている。また、第2のデータは、文節木の第2階層以降の各階層の各ノードについて当該ノードに対応する文字又は文字列のコードを当該ノードの符号の順に含む。さらに、第3のデータは、文節木の第2階層以降の各階層について、当該階層に属するノードの数と、当該階層に属するノードの符号のうち最小の符号と、第2のデータにおいて当該最小の号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む。
このようにすれば圧縮処理及び伸張処理の処理速度を向上させることができる。
さらに、本実施の形態の第6の態様に係る圧縮方法は、(A)文節木に対応するデータ構造であって、文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、(B)親ノードの符号が第1の文字に対応する符号となっており且つノードで表される文字のコードが入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、データ構造において探索する探索処理と、(C)対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、(D)対応付けデータが検出されない場合には、参照している対応付けデータの符号を出力し、第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、(E)探索処理と第1参照処理と第2参照処理とを、入力文字列の最後の文字を処理するまで、第2の文字を入力文字列の文字の順に移動させつつ実施し、入力文字の最後の文字を処理した後に、参照している対応付けデータの符号を出力する処理とを含む。
このように上で述べたデータ構造を用いて圧縮処理を実施できる。
本実施の形態の第6の態様に係る圧縮方法の探索処理において、データ構造の第1階層についての対応付けデータを参照している場合には、第2階層以降の対応付けデータを探索し、データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの符号より後ろの対応付けデータを探索するようにしても良い。
また、上で述べた対応付けデータが、さらに上記ノードの子ノードの符号のうち最大の符号をさらに対応付けるようにしても良い。この場合、上で述べた探索処理において、データ構造の第1階層についての対応付けデータを参照している場合には、第2階層に属する最初の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索し、データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの1つ前の対応付けデータに含まれる最大の符号の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索するようにしても良い。これによって、探索範囲が狭められ、圧縮処理の高速化が図られる。
また、上で述べた対応付けデータが、さらに当該ノードの属する階層の階層番号をさらに対応付けるようにしても良い。この場合、上で述べた探索処理において、データ構造において参照している対応付けデータの階層番号の次の階層番号が対応付けられている対応付けデータを探索するようにしても良い。このようにしても、探索範囲が狭められ、圧縮処理の高速化が図られる。
本実施の形態の第7の態様に係る圧縮方法は、文節木に対応する第1のデータと文節木の階層についての第2のデータとを有するデータ構造であって、第1のデータにおいて、文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードと、当該ノードが所属する階層とを対応付けデータが、各ノードの符号の順番に並べられており、第2のデータは、文節木の各階層について、当該階層に属するノードの数と、当該階層に属するノードの符号のうち最小の符号とを対応付けるデータを含むデータ構造を用いる。そして、上記圧縮方法は、(A)上記データ構造に含まれる第1のデータにおいて、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、(B)親ノードの符号が、参照している対応付けデータに対応するノードの符号となっており且つ上記ノードで表される文字のコードが入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、第2のデータにおいて、参照している対応付けデータに対応するノードの階層の1階層下の階層に属するノードの数及び最小の符号とから特定される範囲を第1のデータについて探索する探索処理と、(C)対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、(D)対応付けデータが検出されない場合には、参照している対応付けデータの符号を出力し、第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、(E)探索処理と第1参照処理と第2参照処理とを、入力文字列の最後の文字を処理するまで、第2の文字を入力文字列の文字の順に移動させつつ実施し、入力文字の最後の文字を処理した後に、参照している対応付けデータの符号を出力する処理と含む。このような処理でも伸処理を高速化できる。
さらに、本実施の形態の第8の態様に係る伸張方法は、(A)文節木に対応するデータ構造であって、文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力符号のうち第1の符号の順番の対応付けデータを特定する処理と、(B)特定された対応付けデータに含まれる文字のコードをメモリに格納する格納処理と、(C)特定された対応付けデータに含まれる親ノードの符号が文節木の根ノード以外のノードの符号を示している場合には、当該親ノードの符号の対応付けデータを参照する参照処理と、(D)特定された対応付けデータに含まれる親ノードの符号が文節木の根ノードの符号を示している場合には、メモリに格納されている文字のコードを逆順に出力する出力処理と、(E)格納処理と参照処理と出力処理とを、入力符号のうち第1の符号より後ろの各符号について順番に実施する処理とを含む。
このように上で述べたデータ構造を用いて伸張処理を行うことができる。
本実施の形態の第9の態様に係る圧縮方法は、文節木に対応するデータ構造であって、文節木の各ノードについて、当該ノードの子ノードの符号のうち最大の符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造を用いる。そして、本圧縮方法は、(A)入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、(B)上記ノードで表される文字のコードが入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、データ構造において探索する探索処理と、(C)対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、(D)対応付けデータが検出されない場合には、参照している対応付けデータの符号を出力し、第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、(E)探索処理と第1参照処理と第2参照処理とを、入力文字列の最後の文字を処理するまで、第2の文字を入力文字列の文字の順に移動させつつ実施し、入力文字の最後の文字を処理した後に、参照している対応付けデータの符号を出力する処理と含む。そして、上記探索処理においては、データ構造の第1階層についての対応付けデータを参照している場合には、第2階層に属する最初の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索する、また、データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの1つ前の対応付けデータに含まれる最大の符号の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索する。このようにすれば、探索範囲が狭められているので高速に圧縮できるようになる。
また、本実施の形態の第10の態様に係る伸張方法は、文節木に対応する第1のデータと、文節木の各ノードに対応する文字又は文字列についての第2のデータと、文節木の階層についての第3のデータとを有し且つデータ格納部に格納されているデータ構造を用いる。そして、第1のデータにおいて、文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられている。さらに、第2のデータは、文節木の各階層の各ノードについて当該ノードに対応する文字又は文字列を当該ノードの符号の順に含む。さらに、第3のデータは、文節木の各階層について、当該階層に属するノードの符号のうち最小の符号と、第2のデータにおいて当該最小の号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む。そして、本伸張方法は、(A)上記データ構造に含まれる第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する処理と、(B)特定されたエントリに含まれる階層番号に従って第3のデータにおいて上記最小の符号とオフセット値とを特定する特定処理と、(C)第2のデータから、特定されたオフセット値に対して、特定されたエントリの符号と特定された最小の符号との差に階層番号を乗じた値を加算することで得られる配置位置から階層番号分の文字又は文字列を読み出す読み出し処理と、(D)入力符号のうち第1の符号の後ろの第2の符号以降の各符号について、第1のデータにおけるエントリを特定し、特定処理と読み出し処理とを実施する処理とを含む。
このようにすれば、伸張処理が高速化される。
また、本実施の形態の第11の態様に係る伸張方法は、文節木に対応する第1のデータと、文節木の各ノードに対応する文字又は文字列についての第2のデータと、文節木の階層についての第3のデータとを有し且つデータ格納部に格納されているデータ構造を用いる。そして、第1のデータにおいて、文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられている。また、第2のデータは、文節木の第2の階層以降の各階層の各ノードについて当該ノードに対応する文字列を当該ノードの符号の順に含む。さらに、第3のデータは、文節木の第2の階層以降の各階層について、当該階層に属するノードの符号のうち最小の符号と、第2のデータにおいて当該最小の号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む。そして本伸張方法は、(A)上記データ構造に含まれる第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する処理と、(B)特定されたエントリが第1の階層におけるエントリであれば、特定されたエントリの符号に対応する文字を出力する出力処理と、(C)特定されたエントリが第2の階層以降のエントリであれば、特定されたエントリに含まれる階層番号に従って第3のデータにおいて最小の符号とオフセット値とを特定する特定処理と、(D)第2のデータにおいて、特定されたオフセット値に対して、特定されたエントリの符号と特定された最小の符号との差に階層番号を乗じた値を加算することで得られる配置位置から階層番号分の文字又は文字列を読み出す読み出し処理と、(E)入力符号のうち第1の符号の後ろの第2の符号以降の各符号について、第1のデータにおけるエントリを特定し、出力処理と特定処理と読み出し処理とを実施する処理とを含む。
このようにデータ構造のデータ量を削減しても伸張処理を高速化することができる。
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と前記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に前記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字について生成し、
入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数が今回閾値を超えることになることを検出すると、前記第3の領域において当該出現順番のデータとして、前記着目する文字又は文字列と前記次に出現した文字とからなる第2の文字列に対応する符号を格納し、
前記第2の文字列についてのデータブロックを生成する
処理をコンピュータに実行させるためのプログラム。
(付記2)
前記入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数を増分しても閾値を超えないことを検出すると、前記次に出現した文字を、着目する文字に設定する
処理をさらに前記コンピュータに実行させるための付記1記載のプログラム。
(付記3)
前記入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ前記第3の領域において当該出現順番のデータとして前記着目する文字又は文字列と前記次に出現した文字とからなる第2の文字列に対応する符号が保持されていることを検出すると、当該第2の文字列を、着目する文字列に設定する
処理をさらに前記コンピュータに実行させるための付記1又は2記載のプログラム。
(付記4)
前記第3の領域が、所定出現順番までの領域に限定されており、
前記データブロックが、前記第3の領域の拡張領域を示すデータを保持する第4の領域をさらに含む、
付記1乃至3のいずれか1つ記載のプログラム。
(付記5)
前記入力文字列について生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字又は文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造における第1階層の各データブロックについては最上位階層を表すデータと当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードとを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造における第2階層以降の各データブロックについては当該データブロックの第1の領域に保持されている第2の符号と当該データブロックの第3の領域に保持されている第2の符号に関連付けられている前記次に出現する文字のコードとを対応付ける第2の対応付けデータとを含むデータを生成する生成処理
をさらに前記コンピュータに実行させるための付記1乃至4のいずれか1つ記載のプログラム。
(付記6)
前記第1の対応付けデータ及び前記第2の対応付けデータにおいて、
当該データブロックについて第3の領域において保持されている最も大きい第2の符号をさらに対応付けられている
付記5記載のプログラム。
(付記7)
文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と前記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に前記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字と、既にデータブロックが生成されている、入力文字列内の文字又は文字列の次に所定の出現回数以上出現する文字とについて生成する第1生成処理と、
前記第1生成処理により生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字又は文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造の第1階層の各データブロックについては最上位階層を表すデータ又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードと階層番号とを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造の第2階層以降の各データブロックについては当該データブロックの第1の領域に保持されている第2の符号又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第3の領域に保持されている第2の符号に関連付けられている前記次に出現する文字のコードと階層番号とを対応付ける第2の対応付けデータとを含むデータを生成する第2生成処理と、
前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層に属する各データブロックの第1の領域に保持されている第2の符号に対応する文字列のコードを含む第1のデータを生成する第3生成処理と、
前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層について当該階層内のデータブロック数と当該階層内のデータブロックの第1の領域に保持されている最小の第2の符号と前記第1のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付ける階層情報を生成する第4の生成処理と、
をコンピュータに実行させるためのプログラム。
(付記8)
文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と前記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に前記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを各ノードのデータとして含む文節木のデータ構造。
(付記9)
文節木に対応するデータ構造であって、
前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられた
データ構造。
(付記10)
前記対応付けデータが、さらに当該ノードの子ノードの符号のうち最大の符号をさらに対応付けている付記9記載のデータ構造。
(付記11)
文節木に対応する第1のデータと、
前記文節木の各ノードに対応する文字又は文字列についての第2のデータと、
前記文節木の階層についての第3のデータと、
を有するデータ構造であって、
前記第1のデータにおいて、
前記文節木の各ノードについて、当該ノードの親ノードの符号又は当該ノードの子ノードの符号のうち最大の符号と、当該ノードで表される文字のコードと、当該ノードが所属する階層とを対応付けるデータが、各ノードの符号の順番に並べられており、
前記第2のデータは、
前記文節木の第2階層以降の各階層の各ノードについて当該ノードに対応する文字又は文字列のコードを当該ノードの符号の順に含み、
前記第3のデータは、
前記文節木の第2階層以降の各階層について、当該階層に属するノードの数と、当該階層に属するノードの符号のうち最小の符号と、前記第2のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む
データ構造。
(付記12)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、
前記親ノードの符号が、参照している前記対応付けデータに対応するノードの符号となっており且つ前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記データ構造において探索する探索処理と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、
前記探索処理と前記第1参照処理と前記第2参照処理とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ実施し、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する処理と、
を、コンピュータに実行させるための圧縮プログラム。
(付記13)
前記探索処理において、
前記データ構造の第1階層についての対応付けデータを参照している場合には、第2階層以降の対応付けデータを探索し、
前記データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの符号より後ろの対応付けデータを探索する
付記12記載の圧縮プログラム。
(付記14)
前記対応付けデータが、さらに前記ノードの子ノードの符号のうち最大の符号をさらに対応付けており、
前記探索処理において、
前記データ構造の第1階層についての対応付けデータを参照している場合には、第2階層に属する最初の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索し、
前記データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの1つ前の対応付けデータに含まれる最大の符号の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索する
付記12記載の圧縮プログラム。
(付記15)
前記対応付けデータが、さらに当該ノードの属する階層の階層番号をさらに対応付けており、
前記探索処理において、
前記データ構造において参照している対応データの階層番号の次の階層番号が対応付けられている対応付けデータを探索する
付記12記載の圧縮プログラム。
(付記16)
文節木に対応する第1のデータと前記文節木の階層についての第2のデータとを有するデータ構造であって、前記第1のデータにおいて、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードと、当該ノードが所属する階層とを対応付けデータが、各ノードの符号の順番に並べられており、前記第2のデータは、前記文節木の各階層について、当該階層に属するノードの数と、当該階層に属するノードの符号のうち最小の符号とを対応付けるデータを含む前記データ構造に含まれる前記第1のデータにおいて、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、
前記親ノードの符号が、参照している前記対応付けデータに対応するノードの符号となっており且つ前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記第2のデータにおいて、参照している対応付けデータに対応するノードの階層の1階層下の階層に属するノードの数及び前記最小の符号とから特定される範囲を前記第1のデータについて探索する探索処理と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、
前記探索処理と前記第1参照処理と前記第2参照処理とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ実施し、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する処理と、
をコンピュータに実行させるための圧縮プログラム。
(付記17)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの子ノードの符号のうち最大の符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、
前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記データ構造において探索する探索処理と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、
前記探索処理と前記第1参照処理と前記第2参照処理とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ実施し、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する処理と、
を、コンピュータに実行させ、
前記探索処理においては、
前記データ構造の第1階層についての対応付けデータを参照している場合には、第2階層に属する最初の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索し、
前記データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの1つ前の対応付けデータに含まれる最大の符号の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索する
圧縮プログラム。
(付記18)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力符号のうち第1の符号の順番の対応付けデータを特定する処理と、
特定された前記対応付けデータに含まれる文字のコードをメモリに格納する格納処理と、
特定された前記対応付けデータに含まれる親ノードの符号が前記文節木の根ノード以外のノードの符号を示している場合には、当該親ノードの符号の対応付けデータを参照する参照処理と、
特定された前記対応付けデータに含まれる親ノードの符号が前記文節木の根ノードの符号を示している場合には、前記メモリに格納されている文字のコードを逆順に出力する出力処理と、
前記格納処理と前記参照処理と前記出力処理とを、前記入力符号のうち前記第1の符号より後ろの各符号について順番に実施する処理と、
を、コンピュータに実行させるための伸張プログラム。
(付記19)
文節木に対応する第1のデータと、
前記文節木の各ノードに対応する文字又は文字列についての第2のデータと、
前記文節木の階層についての第3のデータと、
を有し且つデータ格納部に格納されているデータ構造であって、
前記第1のデータにおいて、
前記文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられており、
前記第2のデータは、
前記文節木の各階層の各ノードについて当該ノードに対応する文字又は文字列を当該ノードの符号の順に含み、
前記第3のデータは、
前記文節木の各階層について、当該階層に属するノードの符号のうち最小の符号と、前記第2のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む
前記データ構造に含まれる前記第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する処理と、
特定された前記エントリに含まれる階層番号に従って前記第3のデータにおいて前記最小の符号と前記オフセット値とを特定する特定処理と、
前記第2のデータから、特定された前記オフセット値に対して、特定された前記エントリの符号と特定された前記最小の符号との差に前記階層番号を乗じた値を加算することで得られる配置位置から前記階層番号分の文字又は文字列を読み出す読み出し処理と、
前記入力符号のうち前記第1の符号の後ろの第2の符号以降の各符号について、前記第1のデータにおけるエントリを特定し、前記特定処理と前記読み出し処理とを実施する処理と、
を、コンピュータに実行させるための伸張プログラム。
(付記20)
文節木に対応する第1のデータと、
前記文節木の各ノードに対応する文字又は文字列についての第2のデータと、
前記文節木の階層についての第3のデータと、
を有し且つデータ格納部に格納されているデータ構造であって、
前記第1のデータにおいて、
前記文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられており、
前記第2のデータは、
前記文節木の第2の階層以降の各階層の各ノードについて当該ノードに対応する文字列を当該ノードの符号の順に含み、
前記第3のデータは、
前記文節木の第2の階層以降の各階層について、当該階層に属するノードの符号のうち最小の符号と、前記第2のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む
前記データ構造に含まれる前記第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する処理と、
特定された前記エントリが第1の階層におけるエントリであれば、特定された前記エントリの符号に対応する文字を出力する出力処理と、
特定された前記エントリが第2の階層以降のエントリであれば、特定された前記エントリに含まれる階層番号に従って前記第3のデータにおいて前記最小の符号と前記オフセット値とを特定する特定処理と、
前記第2のデータにおいて、特定された前記オフセット値に対して、特定された前記エントリの符号と特定された前記最小の符号との差に前記階層番号を乗じた値を加算することで得られる配置位置から前記階層番号分の文字又は文字列を読み出す読み出し処理と、
前記入力符号のうち前記第1の符号の後ろの第2の符号以降の各符号について、前記第1のデータにおけるエントリを特定し、前記出力処理と前記特定処理と前記読み出し処理とを実施する処理と、
を、コンピュータに実行させるためのプログラム。
(付記21)
文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と前記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に前記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字について生成し、
入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数が今回閾値を超えることになることを検出すると、前記第3の領域において当該出現順番のデータとして、前記着目する文字又は文字列と前記次に出現した文字とからなる第2の文字列に対応する符号を格納し、
前記第2の文字列についてのデータブロックを生成する
処理がコンピュータにより実行される情報処理方法。
(付記22)
文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と前記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に前記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字について生成する手段と、
入力文字列に含まれる複数の文字のうち着目する文字又は文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数が今回閾値を超えることになることを検出すると、前記第3の領域において当該出現順番のデータとして、前記着目する文字又は文字列と前記次に出現した文字とからなる第2の文字列に対応する符号を格納する手段と、
前記第2の文字列についてのデータブロックを生成する手段と、
を有する情報処理装置。
(付記23)
文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と前記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に前記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字と、既にデータブロックが生成されている、入力文字列内の文字又は文字列の次に所定の出現回数以上出現する文字とについて生成する第1生成処理と、
前記第1生成処理により生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字又は文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造の第1階層の各データブロックについては最上位階層を表すデータ又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードと階層番号とを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造の第2階層以降の各データブロックについては当該データブロックの第1の領域に保持されている第2の符号又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第3の領域に保持されている第2の符号に関連付けられている前記次に出現する文字のコードと階層番号とを対応付ける第2の対応付けデータとを含むデータを生成する第2生成処理と、
前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層に属する各データブロックの第1の領域に保持されている第2の符号に対応する文字列のコードを含む第1のデータを生成する第3生成処理と、
前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層について当該階層内のデータブロック数と当該階層内のデータブロックの第1の領域に保持されている最小の第2の符号と前記第1のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付ける階層情報を生成する第4の生成処理と、
がコンピュータにより実行される情報処理方法。
(付記24)
文字又は文字列に対応する符号を保持するための第1の領域と当該文字又は文字列の次に出現する文字の出現順番を各文字について保持するための第2の領域と前記文字又は文字列の次に出現する文字の出現順番に応じて出現回数又は当該出現回数が閾値を超えた場合に前記文字又は文字列と今回出現した文字とからなる文字列に対応する符号を保持するための第3の領域とを含むデータブロックを、使用される可能性のある各文字と、既にデータブロックが生成されている、入力文字列内の文字又は文字列の次に所定の出現回数以上出現する文字とについて生成する手段と、
前記第1生成手段により生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字又は文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造の第1階層の各データブロックについては最上位階層を表すデータ又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードと階層番号とを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造の第2階層以降の各データブロックについては当該データブロックの第1の領域に保持されている第2の符号又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第3の領域に保持されている第2の符号に関連付けられている前記次に出現する文字のコードと階層番号とを対応付ける第2の対応付けデータとを含むデータを生成する手段と、
前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層に属する各データブロックの第1の領域に保持されている第2の符号に対応する文字列のコードを含む第1のデータを生成する手段と、
前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層について当該階層内のデータブロック数と当該階層内のデータブロックの第1の領域に保持されている最小の第2の符号と前記第1のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付ける階層情報を生成する手段と、
を有する情報処理装置。
(付記25)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、
前記親ノードの符号が、参照している前記対応付けデータに対応するノードの符号となっており且つ前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記データ構造において探索する探索処理と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、
前記探索処理と前記第1参照処理と前記第2参照処理とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ実施し、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する処理と、
が、コンピュータにより実行される圧縮方法。
(付記26)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する手段と、
前記親ノードの符号が、参照している前記対応付けデータに対応するノードの符号となっており且つ前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記データ構造において探索する探索手段と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照手段と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照手段と、
前記探索手段と前記第1参照手段と前記第2参照手段とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ動作させ、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する手段と、
を有する情報処理装置。
(付記27)
文節木に対応する第1のデータと前記文節木の階層についての第2のデータとを有するデータ構造であって、前記第1のデータにおいて、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードと、当該ノードが所属する階層とを対応付けデータが、各ノードの符号の順番に並べられており、前記第2のデータは、前記文節木の各階層について、当該階層に属するノードの数と、当該階層に属するノードの符号のうち最小の符号とを対応付けるデータを含む前記データ構造に含まれる前記第1のデータにおいて、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、
前記親ノードの符号が、参照している前記対応付けデータに対応するノードの符号となっており且つ前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記第2のデータにおいて、参照している対応付けデータに対応するノードの階層の1階層下の階層に属するノードの数及び前記最小の符号とから特定される範囲を前記第1のデータについて探索する探索処理と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、
前記探索処理と前記第1参照処理と前記第2参照処理とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ実施し、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する処理と、
が、コンピュータにより実行される圧縮方法。
(付記28)
文節木に対応する第1のデータと前記文節木の階層についての第2のデータとを有するデータ構造であって、前記第1のデータにおいて、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードと、当該ノードが所属する階層とを対応付けデータが、各ノードの符号の順番に並べられており、前記第2のデータは、前記文節木の各階層について、当該階層に属するノードの数と、当該階層に属するノードの符号のうち最小の符号とを対応付けるデータを含む前記データ構造に含まれる前記第1のデータにおいて、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する手段と、
前記親ノードの符号が、参照している前記対応付けデータに対応するノードの符号となっており且つ前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記第2のデータにおいて、参照している対応付けデータに対応するノードの階層の1階層下の階層に属するノードの数及び前記最小の符号とから特定される範囲を前記第1のデータについて探索する探索手段と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照手段と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照手段と、
前記探索手段と前記第1参照手段と前記第2参照手段とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ動作させ、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する手段と、
を有する情報処理装置。
(付記29)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの子ノードの符号のうち最大の符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する処理と、
前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記データ構造において探索する探索処理と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照処理と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照処理と、
前記探索処理と前記第1参照処理と前記第2参照処理とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ実施し、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する処理と、
が、コンピュータにより実行され、
前記探索処理においては、
前記データ構造の第1階層についての対応付けデータを参照している場合には、第2階層に属する最初の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索し、
前記データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの1つ前の対応付けデータに含まれる最大の符号の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索する
圧縮方法。
(付記30)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの子ノードの符号のうち最大の符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力文字列に含まれる第1の文字に対応する符号の対応付けデータを参照する手段と、
前記ノードで表される文字のコードが前記入力文字列において次に現れる第2の文字のコードとなっている対応付けデータを、前記データ構造において探索する探索手段と、
対応付けデータが検出された場合には、当該対応付けデータを参照する第1参照手段と、
対応付けデータが検出されない場合には、参照している前記対応付けデータの符号を出力し、前記第2の文字に対応する符号の対応付けデータを参照する第2参照手段と、
前記探索手段と前記第1参照手段と前記第2参照手段とを、前記入力文字列の最後の文字を処理するまで、前記第2の文字を前記入力文字列の文字の順に移動させつつ動作させ、前記入力文字の最後の文字を処理した後に、参照している前記対応付けデータの符号を出力する手段と、
を有し、
前記探索手段が、
前記データ構造の第1階層についての対応付けデータを参照している場合には、第2階層に属する最初の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索し、
前記データ構造の第2階層以降の階層についての対応付けデータを参照している場合には、参照している対応付けデータの1つ前の対応付けデータに含まれる最大の符号の対応付けデータから、参照している対応付けデータに含まれる最大の符号の対応付けデータまでを探索する
情報処理装置。
(付記31)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力符号のうち第1の符号の順番の対応付けデータを特定する処理と、
特定された前記対応付けデータに含まれる文字のコードをメモリに格納する格納処理と、
特定された前記対応付けデータに含まれる親ノードの符号が前記文節木の根ノード以外のノードの符号を示している場合には、当該親ノードの符号の対応付けデータを参照する参照処理と、
特定された前記対応付けデータに含まれる親ノードの符号が前記文節木の根ノードの符号を示している場合には、前記メモリに格納されている文字のコードを逆順に出力する出力処理と、
前記格納処理と前記参照処理と前記出力処理とを、前記入力符号のうち前記第1の符号より後ろの各符号について順番に実施する処理と、
が、コンピュータにより実行される伸張方法。
(付記32)
文節木に対応するデータ構造であって、前記文節木の各ノードについて、当該ノードの親ノードの符号と、当該ノードで表される文字のコードとを対応付ける対応付けデータが、各ノードの符号の順番に並べられたデータ構造において、入力符号のうち第1の符号の順番の対応付けデータを特定する手段と、
特定された前記対応付けデータに含まれる文字のコードをメモリに格納する格納処理手段と、
特定された前記対応付けデータに含まれる親ノードの符号が前記文節木の根ノード以外のノードの符号を示している場合には、当該親ノードの符号の対応付けデータを参照する参照手段と、
特定された前記対応付けデータに含まれる親ノードの符号が前記文節木の根ノードの符号を示している場合には、前記メモリに格納されている文字のコードを逆順に出力する出力手段と、
前記格納処理手段と前記参照手段と前記出力手段とを、前記入力符号のうち前記第1の符号より後ろの各符号について順番に動作させる手段と、
を有する情報処理装置。
(付記33)
文節木に対応する第1のデータと、
前記文節木の各ノードに対応する文字又は文字列についての第2のデータと、
前記文節木の階層についての第3のデータと、
を有し且つデータ格納部に格納されているデータ構造であって、
前記第1のデータにおいて、
前記文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられており、
前記第2のデータは、
前記文節木の各階層の各ノードについて当該ノードに対応する文字又は文字列を当該ノードの符号の順に含み、
前記第3のデータは、
前記文節木の各階層について、当該階層に属するノードの符号のうち最小の符号と、前記第2のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む
前記データ構造に含まれる前記第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する処理と、
特定された前記エントリに含まれる階層番号に従って前記第3のデータにおいて前記最小の符号と前記オフセット値とを特定する特定処理と、
前記第2のデータから、特定された前記オフセット値に対して、特定された前記エントリの符号と特定された前記最小の符号との差に前記階層番号を乗じた値を加算することで得られる配置位置から前記階層番号分の文字又は文字列を読み出す読み出し処理と、
前記入力符号のうち前記第1の符号の後ろの第2の符号以降の各符号について、前記第1のデータにおけるエントリを特定し、前記特定処理と前記読み出し処理とを実施する処理と、
が、コンピュータにより実行される伸張方法。
(付記34)
文節木に対応する第1のデータと、
前記文節木の各ノードに対応する文字又は文字列についての第2のデータと、
前記文節木の階層についての第3のデータと、
を有し且つデータ格納部に格納されているデータ構造であって、
前記第1のデータにおいて、
前記文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられており、
前記第2のデータは、
前記文節木の各階層の各ノードについて当該ノードに対応する文字又は文字列を当該ノードの符号の順に含み、
前記第3のデータは、
前記文節木の各階層について、当該階層に属するノードの符号のうち最小の符号と、前記第2のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む
前記データ構造に含まれる前記第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する手段と、
特定された前記エントリに含まれる階層番号に従って前記第3のデータにおいて前記最小の符号と前記オフセット値とを特定する特定手段と、
前記第2のデータから、特定された前記オフセット値に対して、特定された前記エントリの符号と特定された前記最小の符号との差に前記階層番号を乗じた値を加算することで得られる配置位置から前記階層番号分の文字又は文字列を読み出す読み出し手段と、
前記入力符号のうち前記第1の符号の後ろの第2の符号以降の各符号について、前記第1のデータにおけるエントリを特定し、前記特定手段と前記読み出し手段とを動作させる手段と、
を有する情報処理装置。
(付記35)
文節木に対応する第1のデータと、
前記文節木の各ノードに対応する文字又は文字列についての第2のデータと、
前記文節木の階層についての第3のデータと、
を有し且つデータ格納部に格納されているデータ構造であって、
前記第1のデータにおいて、
前記文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられており、
前記第2のデータは、
前記文節木の第2の階層以降の各階層の各ノードについて当該ノードに対応する文字列を当該ノードの符号の順に含み、
前記第3のデータは、
前記文節木の第2の階層以降の各階層について、当該階層に属するノードの符号のうち最小の符号と、前記第2のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む
前記データ構造に含まれる前記第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する処理と、
特定された前記エントリが第1の階層におけるエントリであれば、特定された前記エントリの符号に対応する文字を出力する出力処理と、
特定された前記エントリが第2の階層以降のエントリであれば、特定された前記エントリに含まれる階層番号に従って前記第3のデータにおいて前記最小の符号と前記オフセット値とを特定する特定処理と、
前記第2のデータにおいて、特定された前記オフセット値に対して、特定された前記エントリの符号と特定された前記最小の符号との差に前記階層番号を乗じた値を加算することで得られる配置位置から前記階層番号分の文字又は文字列を読み出す読み出し処理と、
前記入力符号のうち前記第1の符号の後ろの第2の符号以降の各符号について、前記第1のデータにおけるエントリを特定し、前記出力処理と前記特定処理と前記読み出し処理とを実施する処理と、
が、コンピュータにより実行される伸張方法。
(付記36)
文節木に対応する第1のデータと、
前記文節木の各ノードに対応する文字又は文字列についての第2のデータと、
前記文節木の階層についての第3のデータと、
を有し且つデータ格納部に格納されているデータ構造であって、
前記第1のデータにおいて、
前記文節木の各ノードについて、当該ノードが所属する階層の階層番号を含むエントリが、各ノードの符号の順番に並べられており、
前記第2のデータは、
前記文節木の第2の階層以降の各階層の各ノードについて当該ノードに対応する文字列を当該ノードの符号の順に含み、
前記第3のデータは、
前記文節木の第2の階層以降の各階層について、当該階層に属するノードの符号のうち最小の符号と、前記第2のデータにおいて当該最小の第2の符号に対応する文字又は文字列の配置位置の、先頭からのオフセット値とを対応付けるデータを含む
前記データ構造に含まれる前記第1のデータにおいて、入力符号のうち第1の符号の順番のエントリを特定する手段と、
特定された前記エントリが第1の階層におけるエントリであれば、特定された前記エントリの符号に対応する文字を出力する出力手段と、
特定された前記エントリが第2の階層以降のエントリであれば、特定された前記エントリに含まれる階層番号に従って前記第3のデータにおいて前記最小の符号と前記オフセット値とを特定する特定手段と、
前記第2のデータにおいて、特定された前記オフセット値に対して、特定された前記エントリの符号と特定された前記最小の符号との差に前記階層番号を乗じた値を加算することで得られる配置位置から前記階層番号分の文字又は文字列を読み出す読み出し手段と、
前記入力符号のうち前記第1の符号の後ろの第2の符号以降の各符号について、前記第1のデータにおけるエントリを特定し、前記出力手段と前記特定手段と前記読み出し手段とを動作させる処理と、
を有する情報処理装置。
100 情報処理装置
110 文節木生成部
120 圧縮マップ生成部
130 データ格納部
140 圧縮処理部
150 伸張処理部
160 入出力部

Claims (12)

  1. 分節木のデータ構造であって、前記分節木を構成する複数のノードそれぞれが、
    特定の文字または文字列に対応する符号を保持する1の領域と
    前記特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と
    前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は前記出現回数を、前記出現回数が前記特定の閾値を超えた場合前記特定の文字または文字列と前記特定の文字または文字列の次に前記入力文字列において出現した文字とからなる文字列に対応して生成される符号を、前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現順番に応じて保持する3の領域と
    有することを特徴とする文節木のデータ構造。
  2. 特定の文字または文字列に対応する符号を保持する1の領域と、前記特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は前記出現回数を、前記出現回数が前記特定の閾値を超えた場合前記特定の文字または文字列と前記特定の文字または文字列の次に前記入力文字列において出現した文字とからなる文字列に対応して生成される符号を、前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現順番に応じて保持する3の領域とを含むデータブロックを、前記複数の文字それぞれについて生成し、
    前記入力文字列において着目する文字または文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字または文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数が今回前記特定の閾値を超えることになることを検出すると、前記第3の領域において当該出現順番のデータとして、前記着目する文字または文字列と前記次に出現した文字とからなる第2の文字列に対応して生成された符号を格納し、
    前記第2の文字列についてのデータブロックを生成する
    処理をコンピュータに実行させるためのプログラム。
  3. 前記入力文字列において前記着目する文字または文字列についてのデータブロックの第2の領域において、前記入力文字列において前記着目する文字または文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数を増分しても前記特定の閾値を超えないことを検出すると、前記次に出現した文字を、着目する文字に設定する
    処理をさらに前記コンピュータに実行させるための請求項記載のプログラム。
  4. 前記入力文字列において前記着目する文字または文字列についてのデータブロックの第2の領域において、前記入力文字列において前記着目する文字又は文字列の次に出現した文字についての出現順番が保持されており且つ3の領域において当該出現順番のデータとして前記着目する文字または文字列と前記次に出現した文字とからなる第2の文字列に対応する符号が保持されていることを検出すると、当該第2の文字列を、着目する文字列に設定する
    処理をさらに前記コンピュータに実行させるための請求項2又は3記載のプログラム。
  5. 前記第3の領域が、所定出現順番までの領域に限定されており、
    前記データブロックが、前記第3の領域の拡張領域を示すデータを保持する第4の領域をさらに含む、
    請求項2乃至4のいずれか1つ記載のプログラム。
  6. 前記入力文字列について生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字または文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造における第1階層の各データブロックについては最上位階層を表すデータと当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードとを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造における第2階層以降の各データブロックについては当該データブロックの親データブロックの第1の領域に保持されている第2の符号と当該データブロックで追加された文字のコードとを対応付ける第2の対応付けデータとを含むデータを生成する生成処理
    をさらに前記コンピュータに実行させるための請求項2乃至5のいずれか1つ記載のプログラム。
  7. 前記第1の対応付けデータ及び前記第2の対応付けデータにおいて、
    当該データブロックについて第3の領域において保持されている最も大きい第2の符号さらに対応付けられている
    請求項記載のプログラム。
  8. 特定の文字または文字列に対応する符号を保持する1の領域と、前記特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は前記出現回数を、前記出現回数が前記特定の閾値を超えた場合前記特定の文字または文字列と前記特定の文字または文字列の次に前記入力文字列において出現した文字とからなる文字列に対応して生成される符号を、前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現順番に応じて保持する3の領域とを含むデータブロックを、前記複数の文字それぞれについてと、当該データブロックが生成され前記入力文字列内の文字または文字列の次に前記特定の閾値以上の回数出現する文字とについて生成する第1生成処理と、
    前記第1生成処理により生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字または文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造の第1階層の各データブロックについては最上位階層を表すデータ又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードと階層番号とを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造の第2階層以降の各データブロックについては当該データブロックの親データブロックの第1の領域に保持されている第2の符号又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックで追加された文字のコードと階層番号とを対応付ける第2の対応付けデータとを含むデータを生成する第2生成処理と、
    前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層に属する各データブロックの第1の領域に保持されている第2の符号に対応する文字列のコードを含む第1のデータを生成する第3生成処理と、
    前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層について当該階層内のデータブロック数と当該階層内のデータブロックの第1の領域に保持されている最小の第2の符号と前記第1のデータにおいて当該最小の第2の符号に対応する字列の配置位置の、先頭からのオフセット値とを対応付ける階層情報を生成する第4成処理と、
    をコンピュータに実行させるためのプログラム。
  9. 特定の文字または文字列に対応する符号を保持する1の領域と、前記特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は前記出現回数を、前記出現回数が前記特定の閾値を超えた場合前記特定の文字または文字列と前記特定の文字または文字列の次に前記入力文字列において出現した文字とからなる文字列に対応して生成される符号を、前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現順番に応じて保持する3の領域とを含むデータブロックを、前記複数の文字それぞれについて生成し、
    前記入力文字列において着目する文字または文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字または文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数が今回前記特定の閾値を超えることになることを検出すると、前記第3の領域において当該出現順番のデータとして、前記着目する文字または文字列と前記次に出現した文字とからなる第2の文字列に対応して生成された符号を格納し、
    前記第2の文字列についてのデータブロックを生成する
    処理をコンピュータが実行する情報処理方法。
  10. 特定の文字または文字列に対応する符号を保持する1の領域と、前記特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は前記出現回数を、前記出現回数が前記特定の閾値を超えた場合前記特定の文字または文字列と前記特定の文字または文字列の次に前記入力文字列において出現した文字とからなる文字列に対応して生成される符号を、前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現順番に応じて保持する3の領域とを含むデータブロックを、前記複数の文字それぞれについて生成する手段と、
    前記入力文字列において着目する文字または文字列についてのデータブロックの第2の領域において前記入力文字列において前記着目する文字または文字列の次に出現した文字についての出現順番が保持されており且つ第3の領域において当該出現順番のデータとして出現回数が保持されており且つ当該出現回数が今回前記特定の閾値を超えることになることを検出すると、前記第3の領域において当該出現順番のデータとして、前記着目する文字または文字列と前記次に出現した文字とからなる第2の文字列に対応して生成された符号を格納する手段と、
    前記第2の文字列についてのデータブロックを生成する手段と、
    を有する情報処理装置。
  11. 特定の文字または文字列に対応する符号を保持する1の領域と、前記特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は前記出現回数を、前記出現回数が前記特定の閾値を超えた場合前記特定の文字または文字列と前記特定の文字または文字列の次に前記入力文字列において出現した文字とからなる文字列に対応して生成される符号を、前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現順番に応じて保持する3の領域とを含むデータブロックを、前記複数の文字それぞれと、当該データブロックが生成され前記入力文字列内の文字または文字列の次に前記特定の閾値以上の回数出現する文字とについて生成する第1生成処理と、
    前記第1生成処理により生成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字または文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造の第1階層の各データブロックについては最上位階層を表すデータ又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードと階層番号とを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造の第2階層以降の各データブロックについては当該データブロックの親データブロックの第1の領域に保持されている第2の符号又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックで追加された文字のコードと階層番号とを対応付ける第2の対応付けデータとを含むデータを生成する第2生成処理と、
    前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層に属する各データブロックの第1の領域に保持されている第2の符号に対応する文字列のコードを含む第1のデータを生成する第3生成処理と、
    前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層について当該階層内のデータブロック数と当該階層内のデータブロックの第1の領域に保持されている最小の第2の符号と前記第1のデータにおいて当該最小の第2の符号に対応する字列の配置位置の、先頭からのオフセット値とを対応付ける階層情報を生成する第4成処理と、
    をコンピュータが実行する情報処理方法。
  12. 特定の文字または文字列に対応する符号を保持する1の領域と、前記特定の文字または文字列の次に入力文字列において出現する文字の出現順番を複数の文字それぞれについて保持する2の領域と前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現回数が特定の閾値を超えていない場合は前記出現回数を、前記出現回数が前記特定の閾値を超えた場合前記特定の文字または文字列と前記特定の文字または文字列の次に前記入力文字列において出現した文字とからなる文字列に対応して生成される符号を、前記特定の文字または文字列の次に前記入力文字列において出現した文字の出現順番に応じて保持する3の領域とを含むデータブロックを、前記複数の文字それぞれと、当該データブロックが生成され前記入力文字列内の文字または文字列の次に前記特定の閾値以上の回数出現する文字とについて生成する手段と、
    成された複数のデータブロックから、当該複数のデータブロックの各データブロックについて当該データブロックの第1の領域に保持されている符号及び第3の領域に保持されている符号を当該符号に対応する文字または文字列のコードに基づき第2の符号に付与し直した状態における複数のデータブロックで表される木構造の第1階層の各データブロックについては最上位階層を表すデータ又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックの第1の領域に保持されている第2の符号に対応する文字のコードと階層番号とを対応付ける第1の対応付けデータと、前記状態における複数のデータブロックで表される木構造の第2階層以降の各データブロックについては当該データブロックの親データブロックの第1の領域に保持されている第2の符号又は当該データブロックについて第3の領域に保持されている最も大きい第2の符号と当該データブロックで追加された文字のコードと階層番号とを対応付ける第2の対応付けデータとを含むデータを生成する手段と、
    前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層に属する各データブロックの第1の領域に保持されている第2の符号に対応する文字列のコードを含む第1のデータを生成する手段と、
    前記状態における複数のデータブロックで表される木構造の第2階層以降の各階層について当該階層内のデータブロック数と当該階層内のデータブロックの第1の領域に保持されている最小の第2の符号と前記第1のデータにおいて当該最小の第2の符号に対応する字列の配置位置の、先頭からのオフセット値とを対応付ける階層情報を生成する手段と、
    を有する情報処理装置。
JP2012145224A 2012-06-28 2012-06-28 符号処理のためのプログラム及びデータ構造 Active JP5966673B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2012145224A JP5966673B2 (ja) 2012-06-28 2012-06-28 符号処理のためのプログラム及びデータ構造
US13/899,878 US9223809B2 (en) 2012-06-28 2013-05-22 Code processing technique
EP15174629.4A EP2947778B1 (en) 2012-06-28 2013-06-10 Code processing technique
EP13171211.9A EP2680445B1 (en) 2012-06-28 2013-06-10 Code processing technique
CN201310269060.9A CN103532565B (zh) 2012-06-28 2013-06-28 码处理技术

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012145224A JP5966673B2 (ja) 2012-06-28 2012-06-28 符号処理のためのプログラム及びデータ構造

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2015238737A Division JP6296044B2 (ja) 2015-12-07 2015-12-07 符号処理のためのプログラム及びデータ構造

Publications (2)

Publication Number Publication Date
JP2014011538A JP2014011538A (ja) 2014-01-20
JP5966673B2 true JP5966673B2 (ja) 2016-08-10

Family

ID=48703132

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012145224A Active JP5966673B2 (ja) 2012-06-28 2012-06-28 符号処理のためのプログラム及びデータ構造

Country Status (4)

Country Link
US (1) US9223809B2 (ja)
EP (2) EP2947778B1 (ja)
JP (1) JP5966673B2 (ja)
CN (1) CN103532565B (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9432342B1 (en) 2011-03-08 2016-08-30 Ciphercloud, Inc. System and method to anonymize data transmitted to a destination computing device
US9852311B1 (en) 2011-03-08 2017-12-26 Ciphercloud, Inc. System and method to anonymize data transmitted to a destination computing device
US9338220B1 (en) 2011-03-08 2016-05-10 Ciphercloud, Inc. System and method to anonymize data transmitted to a destination computing device
US9300637B1 (en) * 2011-03-08 2016-03-29 Ciphercloud, Inc. System and method to anonymize data transmitted to a destination computing device
US11228566B1 (en) 2011-03-08 2022-01-18 Ciphercloud, Inc. System and method to anonymize data transmitted to a destination computing device
US9667741B1 (en) 2011-03-08 2017-05-30 Ciphercloud, Inc. System and method to anonymize data transmitted to a destination computing device
US9413526B1 (en) 2011-03-08 2016-08-09 Ciphercloud, Inc. System and method to anonymize data transmitted to a destination computing device
US11575987B2 (en) * 2017-05-30 2023-02-07 Northeastern University Underwater ultrasonic communication system and method
CN110263043A (zh) * 2019-06-24 2019-09-20 苏州睿威博科技有限公司 数据存储方法、数据查询方法、装置及存储介质
CN110502611B (zh) * 2019-08-01 2022-04-12 武汉虹信科技发展有限责任公司 字符串检索方法和装置
CN111431537A (zh) * 2020-03-06 2020-07-17 平安科技(深圳)有限公司 数据压缩方法、装置及计算机可读存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748953A (en) * 1989-06-14 1998-05-05 Hitachi, Ltd. Document search method wherein stored documents and search queries comprise segmented text data of spaced, nonconsecutive text elements and words segmented by predetermined symbols
US5254990A (en) * 1990-02-26 1993-10-19 Fujitsu Limited Method and apparatus for compression and decompression of data
JP2590287B2 (ja) * 1990-03-13 1997-03-12 富士通株式会社 データ圧縮方法およびデータ圧縮装置
JP2000151419A (ja) * 1998-11-05 2000-05-30 Asahi Chem Ind Co Ltd データ圧縮方法およびデータ圧縮装置
DE10337825A1 (de) * 2002-11-15 2004-06-03 Siemens Ag Verfahren zur Erzeugung eines Bitstroms aus einem Indizierungsbaum
JP4456554B2 (ja) * 2005-10-31 2010-04-28 富士通株式会社 データ圧縮方法及び圧縮データ送信方法
JP5523144B2 (ja) * 2010-02-25 2014-06-18 キヤノン株式会社 情報処理装置及びその制御方法及びプログラム及び記憶媒体
JP5544998B2 (ja) * 2010-04-12 2014-07-09 富士通株式会社 テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム

Also Published As

Publication number Publication date
EP2947778B1 (en) 2017-06-07
EP2947778A1 (en) 2015-11-25
EP2680445B1 (en) 2018-12-26
JP2014011538A (ja) 2014-01-20
US20140006457A1 (en) 2014-01-02
EP2680445A2 (en) 2014-01-01
EP2680445A3 (en) 2015-01-07
CN103532565A (zh) 2014-01-22
US9223809B2 (en) 2015-12-29
CN103532565B (zh) 2016-12-28

Similar Documents

Publication Publication Date Title
JP5966673B2 (ja) 符号処理のためのプログラム及びデータ構造
CN111460311A (zh) 基于字典树的搜索处理方法、装置、设备和存储介质
CN104283567B (zh) 一种名称数据的压缩、解压缩方法及设备
KR101655835B1 (ko) 심볼 공간 기반의 패턴 압축을 위한 다층 시스템
CN107924410A (zh) 用于支持分层数据对象的高效路径导航的与分层数据对象的二进制编码相关的技术
CN107967219A (zh) 一种基于tcam的大规模字符串高速查找方法
US20130226885A1 (en) Path-decomposed trie data structures
CN108287877B (zh) 一种rib渲染压缩文件fpga压缩/解压缩系统及硬件解压方法
US8947272B2 (en) Decoding encoded data
CN110263043A (zh) 数据存储方法、数据查询方法、装置及存储介质
CN102184205A (zh) 基于可扩展精度混沌哈希的多模式串匹配算法
CN101727499B (zh) 一种存储单词库、及搜索单词的方法及系统
JP6296044B2 (ja) 符号処理のためのプログラム及びデータ構造
JP5544998B2 (ja) テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム
CN112256821A (zh) 中文地址补全的方法、装置、设备及存储介质
Baron et al. Antisequential suffix sorting for BWT-based data compression
CN113495901B (zh) 一种面向可变长数据块的快速检索方法
CN111737482B (zh) 一种适用于数据挖掘的全景可视化图谱生成方法及装置
JPH0936747A (ja) データ圧縮方法及びデータ圧縮装置
JP2001022766A (ja) 多次元データベースの高速処理方法および装置
CN109284393A (zh) 一种针对家谱人物属性名称的融合方法
JP5696132B2 (ja) 部分的木構造に応じた適応型再構成装置及び方法及びプログラム
JP5245908B2 (ja) 検索方法及び装置
JP5808361B2 (ja) 文字列圧縮及び復元システム並びに方法
Cao et al. Frequent statistics of link-layer bit stream data based on AC-IM algorithm

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150319

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150916

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151006

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151207

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: 20160607

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160620

R150 Certificate of patent or registration of utility model

Ref document number: 5966673

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150