JP5544998B2 - テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム - Google Patents

テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム Download PDF

Info

Publication number
JP5544998B2
JP5544998B2 JP2010091311A JP2010091311A JP5544998B2 JP 5544998 B2 JP5544998 B2 JP 5544998B2 JP 2010091311 A JP2010091311 A JP 2010091311A JP 2010091311 A JP2010091311 A JP 2010091311A JP 5544998 B2 JP5544998 B2 JP 5544998B2
Authority
JP
Japan
Prior art keywords
node
character
text
determination position
child
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.)
Expired - Fee Related
Application number
JP2010091311A
Other languages
English (en)
Other versions
JP2011221845A (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 JP2010091311A priority Critical patent/JP5544998B2/ja
Publication of JP2011221845A publication Critical patent/JP2011221845A/ja
Application granted granted Critical
Publication of JP5544998B2 publication Critical patent/JP5544998B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Machine Translation (AREA)
  • Document Processing Apparatus (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明はテキストデータを処理するテキスト処理装置、テキスト処理方法、およびテキスト処理プログラムに関する。
コンピュータシステムにおいて、テキストデータを処理対象とした情報処理を行う場合がある。例えば、テキストデータを対象とした情報検索が行われる。
近年、情報通信技術の用途の拡大に伴い、処理されるテキストデータの量が増加傾向にある。そこで、テキストデータを処理対象とした情報処理を効率化するためのさまざまな技術が考えられている。例えば、小容量のメモリを用いて、高速にデータソート処理を行うデータソート処理方法が考えられている。また、指定された項目に沿ったデータ集合の分割を効率よく行うことができるデータ集合分割方法も考えられている。
ところで、テキストデータを検索する場合、蓄積されたテキストデータの中から、検索キーワードに合致する文字列を効率的よく検出することで、処理の高速化が図れる。例えば、圧縮パターン照合技術がある。圧縮パターン照合では、テキストデータを圧縮して保存しておき、圧縮されたテキストを解凍せずにパターン照合が行われる。
圧縮パターン照合では、テキストデータを圧縮したまま検索できるように、入力されたテキストの中に含まれる部分文字列を、その部分文字列を一意に特定可能な符号に符号化する。テキストデータに含まれる部分文字列を符号化することで、元のテキストデータよりもデータ量を減少させることができる。
テキストの中の特定の文字列を符号化する際、出現頻度が高い部分文字列、または長い部分文字列を符号化すれば圧縮率が向上する。このような圧縮率の向上技術としてSTVF(Suffix Tree based Variable-length-to-Fixed-length code)符号化技術が考えられている。
STVF符号化技術では、頻度情報に基づいて刈り込んだ接尾辞木を文節木として、VF(Variable-length-to-Fixed-length code)符号化が行われる。
特開2007−11784号公報 特開2007−11548号公報
Takuya Kida, "Suffix Tree Based VF-Coding for Compressed Pattern Matching" Hokkaido University, TCS Research Reports, TCS-TR-A-08-36, Division of Computer Science, 18 November 2008 Takuya Kida, "Suffix Tree Based VF-Coding for Compressed Pattern Matching," dcc, Proceedings of the 2009 Data Compression Conference, 16-18 March 2009, pp.449
しかし、STVF符号化による文節木の作成には時間がかかるという問題がある。すなわち、STVF符号化における接尾辞木の作成には、テキストデータ全体を解析することになるため処理に時間がかかる。しかも、接尾辞木の作成は、テキストデータの量が多いほど時間が多くかかる。
本発明はこのような点に鑑みてなされたものであり、テキストデータの高圧縮率での符号化に利用可能な文節木を効率的に作成することができるテキスト処理装置、テキスト処理方法、およびテキスト処理プログラムを提供することを目的とする。
上記課題を解決するために、文字選択手段、ノード追加手段、および頻度カウント手段、を有するテキスト処理装置が提供される。文字選択手段は、テキストデータ内の文字列から順に文字を選択する。ノード追加手段は、テキストデータに出現し得る文字に対応する複数のノードがルートのノードの子として木構造で予め関連付けられ、各ノードに対してテキストデータに出現し得る文字に対応する子のノードを追加可能であり、各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与された文節木を記憶する文節木記憶手段を参照する。そしてノード追加手段は、ルートのノードから判断位置を開始し、判断位置のノードに対して文字選択手段で選択された文字に対応する子のノードが存在する場合、該子のノードに判断位置を移動する。またノード追加手段は、判断位置のノードに対して選択された文字に対応する子のノードが存在せず、かつ判断位置のノードに付与された選択された文字の出現回数が所定の閾値に達していない場合、ルートのノードに対する選択された文字に対応する子のノードに判断位置を移動する。さらにノード追加手段は、判断位置のノードに対して選択された文字に対応する子のノードが存在せず、かつ判断位置のノードに付与された選択された文字の出現回数が所定の閾値に達している場合、判断位置のノードに対して、新たな識別子を付与した、選択された文字に対応する子のノードを追加すると共に、追加した該子のノードに判断位置を移動する。頻度カウント手段は、文節木記憶手段を参照し、判断位置のノードに対して選択された文字に対応するノードが存在しない場合、判断位置のノードの付与された選択された文字の出現回数をカウントアップする。
また、上記テキスト処理装置が実行する処理と同様の処理をコンピュータが実行するテキスト処理方法が提供される。さらに、上記テキスト処理装置が実行する処理と同様の処理をコンピュータに実行させるテキスト処理プログラムが提供される。
上記テキスト処理装置、テキスト処理方法、およびテキスト処理プログラムによれば、テキストデータの高圧縮率での符号化に利用可能な文節木を効率的に作成することができる。
実施の形態の概要を示す図である。 システム構成の一例を示す図である。 本実施の形態に用いるサーバのハードウェアの一構成例を示す図である。 要約トライのノード構造体の一例を示す図である。 要約トライの例を示す図である。 サーバの機能を示すブロック図である。 テキスト符号化部の詳細機能を示すブロック図である。 テキスト符号化処理の手順を示すフローチャートである。 要約トライ作成およびテキスト圧縮処理の手順を示すフローチャートである。 要約トライ作成およびテキスト圧縮処理の手順を示すフローチャートである。 初期状態の要約トライと圧縮済テキストの例を示す図である。 1文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 2文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 3文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 4文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 5文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 6文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 7文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 8文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 9文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 10文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。 位置「i」の値が文字数「n」より大きくなった後の要約トライと圧縮済テキストの例を示す図である。 第3の実施の形態に係るサーバの機能を示す図である。 第3の実施の形態に係るテキスト符号化部の詳細機能を示すブロック図である。 第3の実施の形態に係るテキスト符号化処理の手順を示すフローチャートである。 圧縮処理の詳細手順を示すフローチャートである。 第4の実施の形態に係るテキスト符号化部の機能を示すブロック図である。 閾値テーブル記憶部のデータ構造の一例を示す図である。 第4の実施の形態に係るテキスト符号化処理の手順を示すフローチャートである。
以下、本実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、実施の形態の概要を示す図である。テキスト処理装置1は、文字選択手段1a、ノード追加手段1b、頻度カウント手段1c、識別子出力手段1dを有する。
また、文節木記憶手段2は、文節木2aを記憶する。文節木2aは、テキストデータ3に出現し得る文字に対応する複数のノードがルート(根)のノードの子として木構造で予め関連付けられている。また文節木2aは、各ノードに対して前記テキストデータに出現し得る文字に対応する子のノードを追加可能である。さらに文節木2aの各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与されている。
図1の例では、各ノードを丸印で表し、ノードを示す丸印の中に、該当ノードの識別子が示されている。また、文節木2aは、ノード間を接続する矢印により、木構造におけるノード間の関係を示している。繋げられた2つのノードのうち、ルートのノードに近い方のノードが親のノード、ルートのノードから遠い方のノードが子のノードである。ノードを接続する矢印の横に、子のノードに対応する文字が示されている。
ルートのノードには、例えば初期状態から、テキストデータ3に含まれ得る各文字に対応する子のノードが設けられる。図1の例では、テキストデータ3に「a,b,c,d」の4つの文字を含まれ得るものとし、識別子「0」のルートのノードには、識別子「1」〜「4」の4つの子のノードが設けられている。
文字選択手段1aは、テキストデータ3内の文字列から順に文字を選択する。図1の例では、テキストデータ3に「abcabcdabc」という文字列が含まれている。例えば文字選択手段1aは、「abcabcdabc」の左から順に文字を1文字ずつ選択する。
ノード追加手段1bは、文節木記憶手段2を参照する。そしてノード追加手段1bは、ルートのノードから判断位置を開始する。ノード追加手段1bは、判断位置のノードに対して文字選択手段1aで選択された文字に対応する子のノードが存在する場合、該子のノードに判断位置を移動する。
またノード追加手段1bは、判断位置のノードに対して選択された文字に対応する子のノードが存在しない場合、判断位置のノードに付与された選択された文字の出現回数が所定の閾値に達しているか否かを判断する。判断位置のノードに付与された選択された文字の出現回数が所定の閾値に達していない場合、ノード追加手段1bは、ルートのノードに対する選択された文字に対応する子のノードに判断位置を移動する。他方、判断位置のノードに付与された選択された文字の出現回数が所定の閾値に達している場合、ノード追加手段1bは、判断位置のノードに対して、新たな識別子を付与した、選択された文字に対応する子のノードを追加する。このときノード追加手段1bは、追加した子のノードに判断位置を移動する。
例えば、ノード追加手段1bは、子のノードの追加を、文節木2aのノードの数が所定数に達するまで行う。換言すると、ノード追加手段1bは、ノードの数が所定数を超えると、子のノードの追加を行わないようにすることができる。
なお、文節木2aに追加されたノードは、ルートのノードから該当ノードまで辿ったときの経路上の各ノードに対応する文字の配列で示される部分文字列(文節)に対応する。すなわち、追加したノードの識別子が、そのノードに対応する文字列を表す符号となる。
頻度カウント手段1cは、文節木記憶手段2を参照する。そして頻度カウント手段1cは、判断位置のノードに対して選択された文字に対応するノードが存在しない場合、判断位置のノードの付与された選択された文字の出現回数をカウントアップする。例えば、頻度カウント手段1cは、判断位置のノードに付与された選択された文字の出現回数を「1」だけ増加させる。なお頻度カウント手段1cは、判断位置のノードに対して選択された文字に対応するノードが存在する場合についても、判断位置のノードの付与された選択された文字の出現回数をカウントアップするようにしてもよい。
また頻度カウント手段1cは、判断位置のノードに対して選択された文字に対応するノードが存在しない場合、ノード追加手段1bによる処理に先立って、出現回数をカウントアップすることができる。この場合、ノード追加手段1bは、カウントアップ後の出現回数について、閾値に達しているか否かを判断する。
識別子出力手段1dは、文節木記憶手段2を参照する。そして識別子出力手段1dは、判断位置のノードに対して選択された文字に対応する子のノードが存在しない場合、判断位置のノードに付与された識別子を出力する。また識別子出力手段1dは、テキストデータ3内の文字列の最後の文字が選択されたことにより判断位置が移動されると、移動後の判断位置のノードに付与された識別子も出力するようにしてもよい。ここで、識別子出力手段1dで出力された各識別子が、テキストデータ3内の部分文字列ごとの符号となる。そして、テキストデータ3内のすべての文字列に対応して識別子出力手段1dから出力された識別子の列が、テキストデータ3を符号化した符号語列4となる。識別子出力手段1dは、例えば、符号語列4を記憶装置に格納することができる。また、識別子出力手段1dは、符号語列4を、生成された符号から順次、ネットワークを介して送出することもできる。
このようなテキスト処理装置1によれば、文字選択手段1aによりテキストデータ3内の文字列から順に選択される。すると、頻度カウント手段1cにより、判断位置のノードに付与された選択された文字の出現回数がカウントアップされる。
そして、判断位置のノードに対して選択された文字に対応する子のノードが存在する場合、ノード追加手段1bにより、判断位置が、判断位置のノードの選択された文字に対応する子のノードに変更される。これにより、選択された文字に対応する子のノードが存在する限り、文節木のルートから葉に向かって判断位置のノードが遷移する。
また判断位置のノードに対して選択された文字に対応する子のノードが存在せず、かつ判断位置のノードに付与された選択された文字の出現回数が閾値に達した場合、ノード追加手段1bにより文節木2aへのノードの追加が行われる。すなわち、ノード追加手段1bにより、判断位置のノードに対する選択された文字に対応する子のノードが、文節木2aに追加される。この場合、ノード追加手段1bにより、判断位置が追加された子のノードに移動される。
また、判断位置のノードに対して選択された文字に対応する子のノードが存在せず、かつ判断位置のノードに付与された選択された文字の出現回数が閾値に達しない場合、ノード追加手段1bにより、判断位置が移動される。すなわち、ノード追加手段1bにより、文節木2aのルートのノードに対する選択された文字に対応する子のノードに、判断位置が移動される。これにより、選択された文字に対応する子のノードが存在しなければ、以後、ルートのノードに戻って、選択した文字を先頭とする部分文字列による文節木との照合が行われる。
さらに、判断位置のノードに対して選択された文字に対応する子のノードが存在しない場合、識別子出力手段1dにより、判断位置のノードに付与された識別子が出力される。そのため、テキストデータ3内のすべての文字が選択されることで、識別子出力手段1dからは、テキストデータ3全体を符号化した符号語列4が出力される。これにより、文節木2aの構築処理と並行してテキストデータ3を符号化することが可能となっている。
このように、テキストデータ3内の文字を選択していくことで、出現頻度が所定値以上の文字列に対応するノードで構成される文節木2aが生成される。また文節木2aを符号化辞書として利用して、テキストデータ3が符号化され、符号語列4が出力される。
生成される文節木2aは、出現頻度が高い部分文字列に対応するノードで構成されるため、文節木2aを用いた符号化により、高圧縮率での符号化が可能である。
さらに、テキスト処理装置1による文節木2aの構築は、STVF符号化と比較すると、テキストデータ3全体からの接尾辞木の構築処理が必要ないため、短時間で行うことができる。しかも、文節木2aの構築と並行してテキストデータ3の符号化が可能であるため、テキストデータ3の符号化についても効率的に行うことができる。例えばテキスト処理装置1による符号化は、STVF符号化技術より20倍ほど高速に符号化が可能である(符号化に要する時間が20分の1)。
また、テキスト処理装置1によるテキストデータ3の符号化は、STVF符号化と異なり、逐次処理が可能である。すなわち、STVF符号化を用いた場合、テキストデータ3に基づいて接尾辞木を構築後、その接尾辞木の刈り込み(頻度の高い文字列に対応するノードのみを残す処理)が行われ、文節木が生成される(1パス目の処理)。そして、STVF符号化では、生成された文節木を用いて、テキストデータ3が符号化される(2パス目の処理)。このようにSTVF符号化では、2パスのアルゴリズムであるため、1パス目の処理が完了するまで、テキストデータの符号化は開始できず、逐次処理が困難であった。
他方、テキスト処理装置1では、テキストデータ3の先頭から順番に文字を選択し、その文字から文節木2aの構築とテキストデータ3の符号化を実行することができる。そして、テキストデータ3内の各文字は、1回ずつ処理対象として選択すればよい。そのため、1文字ずつの逐次処理が可能となる。逐次処理が可能であるため、例えば、ネットワーク上を転送されるテキストデータ3を、通信遅延を最小限に抑えて、テキストデータ3内の部分文字列を逐次的に符号化して、生成された符号を随時転送することができる。
なお、逐次処理よりも圧縮率の向上を優先する場合、文節木2aを構築後、その文節木2aを用いてテキストデータ3の先頭の文字から順に再度選択し、符号化処理を行ってもよい。これによりテキストデータ3の圧縮率を高めることができる。
また文節木2aは、符号語列4の高速な圧縮パターン照合を実現するための有利な性質を備えている。圧縮パターン照合とは、圧縮されたテキストに対して、解凍せずにパターン照合を行う技術である。高速な圧縮パターン照合に有利な圧縮技術の性質としては、VF符号化、静的な符号化辞書、より高い圧縮率が挙げられる。文節木2aが高い圧縮率を備えていることは、前述の通りである。また、テキスト処理装置1で生成される文節木2aは、符号として用いる各ノードの識別子のビット数を固定長とすることで、VF符号化が可能となる。符号が固定長であれば、符号間の区切りが明確であり、照合すべき文字列と符号語列4とを照合する際の処理負荷が少なくて済む。また文節木2aに対するノードが所定数に達した時点で文節木2aへのノードの追加を終了することで、それ以後の文節木2aは静的な符号化辞書として利用できる。
このように、テキスト処理装置1では、高速な圧縮パターン照合に適した文節木2aが作成できる。
〔第2の実施の形態〕
第2の実施の形態は、圧縮パターン照合による検索を行うシステムに対して、第1の実施の形態に係るテキスト符号化技術を適用したものである。
図2は、システム構成の一例を示す図である。図2の例では、サーバ100に対して複数のクライアント201,202がネットワーク10を介して接続されている。サーバ100は、クライアント201,202から入力されたテキスト文書を符号化により圧縮し、保持する。また、サーバ100は、クライアント201,202からのテキスト検索の要求に応答して、圧縮して保持したテキスト文書から検索要求(検索クエリ)に合致する文字を検索する。さらにサーバ100は、クライアント201,202からの解凍要求に応答して、圧縮したテキスト文書を元の状態に解凍する。
クライアント201,202は、ユーザが使用するコンピュータである。ユーザは、クライアント201,202を操作して、クライアント201,202からサーバ100へテキスト文書を送信することができる。またユーザは、クライアント201,202を操作して、クライアント201,202からサーバ100へ、検索要求や解凍要求を送信することができる。
図3は、本実施の形態に用いるサーバのハードウェアの一構成例を示す図である。サーバ100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス108を介してRAM(Random Access Memory)102と複数の周辺機器が接続されている。
RAM102は、サーバ100の主記憶装置として使用される。RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。
バス108に接続されている周辺機器としては、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、および通信インタフェース107がある。
HDD103は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、サーバ100の二次記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
グラフィック処理装置104には、モニタ11が接続されている。グラフィック処理装置104は、CPU101からの命令に従って、画像をモニタ11の画面に表示させる。モニタ11としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号をCPU101に送信する。なお、マウス13は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク14に記録されたデータの読み取りを行う。光ディスク14は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク14には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
通信インタフェース107は、ネットワーク10に接続されている。通信インタフェース107は、ネットワーク10を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図3にはサーバ100のハードウェア構成を示したが、クライアント201,202も同様のハードウェア構成で実現することができる。
次に、要約トライのデータ構造について説明する。要約トライは、トライ木(Trie)と呼ばれる順序付き木構造を有する。要約トライは、ノード(節点)を表すノード構造体がポインタで繋がれている。
図4は、要約トライのノード構造体の一例を示す図である。ノード構造体20には、ノードID21、ラベル22、子ノードのカウンタリスト23、および子ノードへのポインタリスト24が設けられている。
ノードID21は、ノード構造体20を識別するための識別子である。ノードID21には、ノード構造体20の作成順に、1ずつインクリメントされた1以上の整数が代入される。ノードID21は、圧縮符号として使用される。
ラベル22は、ノード構造体20に対応する文字である。子ノードのノード構造体20が、親ノードのノード構造体の配下に、対応する文字に応じた所定の配列で接続される場合、その配列上の順番により各ノード構造体に対応する文字が特定できる。この場合、ノード構造体20がラベル22を有していなくてもよい。
子ノードのカウンタリスト23には、処理対象のテキストデータに存在し得る文字の種類に応じたカウンタが設けられている。例えばテキストデータに存在し得る文字がアルファベットであれば、アルファベットの文字数分のカウンタが用意される。また、テキストデータに所定のコード体系による1バイト文字が存在し得る場合、256個のカウンタが用意される。子ノードのカウンタリスト23に含まれる各カウンタは、子ノードに対応付けられている。子ノードに対応するカウンタには、ルートノードからノード構造体20のノードに到達するまでの各ノードの文字列の次に、その子ノードに対応する文字が出現した回数が設定される。なお、各カウンタの初期値は「0」である。
子ノードへのポインタリスト24には、処理対象のテキストデータに存在し得る文字の種類に応じたポインタが設けられている。例えばテキストデータに存在し得る文字がアルファベットであれば、アルファベットの文字数分のポインタが用意される。また、テキストデータに所定のコード体系による1バイト文字が存在し得る場合、256個のポインタが用意される。子ノードへのポインタリスト24に含まれる各ポインタは、子ノードに対応付けられている。子ノードに対応するポインタには、子ノードのノード構造体を一意に特定する情報が設定される。各ポインタの初期値は「NULL」である。
このようなノード構造体のノードを繋げることで、順序付き木構造(トライ)である要約トライが作成される。
図5は、要約トライの例を示す図である。図5の例では、テキストデータに存在し得る文字を「a,b,c,d」とし、これらの文字を含む集合Σ(Σ={a,b,c,d})を定義している。この場合、Σに含まれる要素数(|Σ|)は、「4」となる。
要約トライ30は、複数のノード31〜37で構成されている。各ノード31〜37は、図4に示したようなノード構造体を有する。各ノード31〜37における子ノードのカウンタリストには、a,b,c,dそれぞれに対応するカウンタが設けられている。各ノード31〜37における子ノードへのポインタリストには、a,b,c,dそれぞれに対応するポインタが設けられている。
ノード31はルートノードであり、ノードIDは「0」である。ルートノードであるノード31のラベルには「root」と設定されている。ノード32は文字「a」に対応するノードであり、ラベルには「a」と設定されている。ノード32のノードIDは「1」である。ノード33は文字「b」に対応するノードであり、ラベルには「b」と設定されている。ノード33のノードIDは「2」である。ノード34は文字「c」に対応するノードであり、ラベルには「c」と設定されている。ノード34のノードIDは「3」である。ノード35は文字「d」に対応するノードであり、ラベルには「d」と設定されている。ノード35のノードIDは「4」である。ノード36は文字「b」に対応するノードであり、ラベルには「b」と設定されている。ノード36のノードIDは「5」である。ノード37は文字「c」に対応するノードであり、ラベルには「c」と設定されている。ノード37のノードIDは「6」である。
ノード31に設けられた子ノードのカウンタリスト内のカウンタの値は、すべて「0」である。また、ノード31に設けられた子ノードへのポインタリストには、子ノードである4つのノード32〜35へのポインタが設定されている。
なお図5では、ポインタとそのポインタが指し示すノードとを、矢印で接続している。また「NULL」ポインタを、図中「・」で示している。
ノード32に設けられた子ノードのカウンタリスト内の各カウンタのうち、文字「b」に対応するカウンタのみ「2」が設定され、その他のカウンタの値は「0」である。図5の例では、カウンタの値が「2」に達すると、該当カウンタに対応する文字の子ノードが作成されるものとする。そこで、ノード32の子ノードとして、文字「b」に対応するノード36が作成されている。ノード32の文字「b」に対応するポインタは、ノード36を指し示している。
ノード33〜35には、値が「2」に達したカウンタがないため、子ノードも作成されていない。ノード36は、文字「c」に対応するカウンタが「2」となり、文字「c」に対応する子ノードとしてノード37が作成されている。
このような要約トライ30を用いて文字列の符号化が可能となる。例えば、「a,b,c」の文字列は、ルートのノード31からノード37までの経路に対応する。そこで、文字列「a,b,c」をノード37のノードID「6」に符号化することができる。
第2の実施の形態では、テキストデータの文字を1文字ずつ読み込み、順次、要約トライ30の作成と文字列の符号化を行う。このように、要約トライの作成と文字列の符号化のストリーム処理を可能とすることで、テキストデータ符号化処理の効率化が可能となる。
図6は、サーバの機能を示すブロック図である。サーバ100は、符号化辞書記憶部110、圧縮済テキスト記憶部120、テキスト符号化部130、検索部140、および解凍部150を有する。なお図6の例では、クライアント201から未圧縮テキスト40が入力され、クライアント202から検索クエリ41または解凍要求43が入力されるものとする。
符号化辞書記憶部110は、符号化辞書として使用する要約トライを記憶する。例えば、RAM102またはHDD103の記憶領域の一部が符号化辞書記憶部110として使用される。
圧縮済テキスト記憶部120は、符号化によりデータ量が圧縮されたテキストデータ(圧縮済テキスト)を記憶する。例えば、RAM102またはHDD103の記憶領域の一部が圧縮済テキスト記憶部120として使用される。
テキスト符号化部130は、クライアント201から入力された未圧縮テキスト40内の文字列を符号化し、データ量を圧縮する。なおテキスト符号化部130は、文字列を符号化する際に、要約トライ形式の符号化辞書を作成する。テキスト符号化部130は、作成した要約トライを、符号化辞書記憶部110に格納する。またテキスト符号化部130は、データ量が圧縮された圧縮済テキストを、圧縮済テキスト記憶部120に格納する。
検索部140は、クライアント202から入力された検索クエリに応答し、圧縮済テキスト記憶部120内の圧縮済テキストを参照し、検索クエリで指定される文字列に合致する文字列の未圧縮テキスト40上での位置を特定する。なお、圧縮済テキストに対する検索には、例えば可変長情報源を固定長に符号化するVF符号化技術で符号化されたVF符号のパターン照合技術を用いることができる。なお圧縮されたテキストに対するパターン照合では、圧縮されたテキストを解凍せずにパターン照合を行うことができる。例えばSIGMA検索アルゴリズム、KMP(Knuth-Morris-Pratt)アルゴリズム、AC(Aho-Corasick)アルゴリズムなどを用いたパターン照合が可能である。検索部140は、検索結果42をクライアント202に送信する。検索結果42には、例えば、検索でヒットした文字列の未圧縮テキスト40内での位置(何文字目から何文字目か)が示される。
解凍部150は、クライアント202から入力された解凍要求に応答し、圧縮済テキスト記憶部120内の圧縮済テキストを解凍する。そして解凍部150は、解凍した解凍済テキスト44をクライアント202に送信する。
次にテキスト符号化部130の詳細について説明する。
図7は、テキスト符号化部の詳細機能を示すブロック図である。テキスト符号化部130は、頻度閾値記憶部131、最大符号数記憶部132、文字選択部133、ノード作成部134、頻度カウント部135、および符号出力部136を有する。
頻度閾値記憶部131は、文字列の出現頻度の閾値を記憶する。例えば、RAM102やHDD103の記憶領域の一部が、頻度閾値記憶部131として使用される。出現頻度が閾値を超えた文字列については、対応するノードが作成される。
最大符号数記憶部132には、要約トライに含まれる符号の最大数を示す最大符号数を記憶する。例えば、RAM102やHDD103の記憶領域の一部が、最大符号数記憶部132として使用される。要約トライの符号数が最大符号数に達すると、それ以降予約トライは更新されない。
文字選択部133は、入力された未圧縮テキスト40内の先頭から、文字を1文字ずつ選択する。文字選択部133は、選択した文字をノード作成部134、頻度カウント部135、および符号出力部136に渡す。なお、文字選択部133は、入力された未圧縮テキスト40を、例えばRAM102内に一時的に格納しておき、RAM102内から1文字ずつ文字を選択することができる。
ノード作成部134は、文字選択部133から文字を取得するごとに、要約トライに対するノードの作成の要否を判断する。なお、ノード作成部134は、要約トライに含まれるノードのうち、判断位置となるノードを示す情報(ノードポインタ)を管理している。そして、ノード作成部134は、判断位置のノードのノード構造体と取得した文字とを比較することで、ノードの作成の要否を判断する。ノードの作成が必要と判断した場合、ノード作成部134は、新たなノード構造体を作成し、そのノード構造体を符号化辞書記憶部110に格納されている要約トライに追加する。
頻度カウント部135は、文字選択部133から文字を取得すると、要約トライ内の判断位置のノードに設けられているカウンタを更新する。例えば、文字選択部133から取得した文字までの符号化されていない部分文字列に対応するノードがまだ作成されていない場合、頻度カウント部135は、その文字に対応するカウンタの値をカウントアップする。
符号出力部136は、文字選択部133から文字を取得するごとに、符号化されていない部分文字列に対応する符号の出力の要否を判断する。そして符号出力部136は、符号を出力する場合、要約トライ内のノードのノードIDを符号として圧縮済テキスト記憶部120に格納する。例えば、判断位置となるノードが要約トライの葉であり、文字選択部133が選択した文字に対応するノードが、判断位置となるノードの子ノードとして新たに作成されない場合、符号出力部136は符号を出力する。この場合、符号出力部136は、文字選択部133から取得した文字の直前の文字までの符号化されていない部分文字列を、判断位置となるノードのノードIDに符号化する。そして符号出力部136は、符号を圧縮済テキスト記憶部120に格納する。
次に、テキスト符号化処理の手順について詳細に説明する。なお、テキスト符号化処理の入力は、未圧縮テキスト40、閾値、および最大符号数である。
ここで未圧縮テキスト40に含まれる文字数を「n」(nは1以上の整数)とする。そして、未圧縮テキスト40内の文字列を、配列を用いてT=T[1],・・・,T[n]と定義する。
また、閾値の値は、頻度閾値記憶部131から読み出され、変数「α」に設定される。さらに、最大符号数の値は、最大符号数記憶部132から読み出され、変数「K」に設定される。
テキスト符号化処理の出力は、要約トライと圧縮済テキストである。ここで要約トライを「D」とする。要約トライ「D」の構造は、図5に示したように、複数のノード構造体をポインタで関連付けたものである。また圧縮済テキストを「C=Compress(T)」とする。圧縮済テキスト「C」は、符号化により生成された符号が、生成順に並べられた情報である。
テキスト符号化処理では、要約トライ「D」中の判断位置のノードを示すノードポインタ「P」が用いられる。例えばノードポインタ「P」には、判断位置のノードのノードIDが設定される。
また、要約トライの現在の大きさを「k」とする。要約トライ「D」の大きさ「k」は、その要約トライ「D」に含まれる符号数である。なお図5の例のように、要約トライのルートノードのノードIDを「0」とし、その他のノードに対して「1」から順にノードIDを付与した場合、要約トライ「D」に含まれる符号数はノードIDの最大値と等しくなる。
テキストデータ中の現在の処理対象の文字の位置を「i」とする。位置iは、0以上の整数を採ることができる。文字の位置は、テキスト中の先頭からの該当文字の順番で表される。配列「T」のインデックスに、処理対象の文字の順番を示す位置「i」を設定することで、処理対象の文字が抽出できる。
図8は、テキスト符号化処理の手順を示すフローチャートである。以下、図8に示す処理をステップ番号に沿って説明する。
[ステップS11]テキスト符号化部130内の各要素は、それぞれ情報の初期化を行う。例えば文字選択部133は、文字の位置「i」の値を「0」に初期化する。
ノード作成部134は、符号化辞書記憶部110内の要約トライ「D」を初期化する。初期化された要約トライ「D」は、すべてのアルファベットがカウント「0」で登録された状態を表している。例えばノード作成部134は、ルートノードのノード構造体を作成し、ルートノードのノード構造体の配下に、集合Σに含まれる各要素に対応する子ノードのノード構造体を繋げる。この際、ノード作成部134は、各ノードに含まれるカウンタの値はすべて「0」とする。またノード作成部134は、ルートノード以外の各ノードのポインタの値は「NULL」とする。初期状態の符号数は集合Σ内の要素数であり、その要素数が、要約トライの大きさ「k」に設定される。
さらにノード作成部134は、ノードポインタ「P」を初期化する。ノードポインタ「P」の初期値では、要約トライ「D」のルートノードが指し示され、「P=root(D)」と表される。
符号出力部136は、圧縮済テキスト記憶部120内の圧縮済テキストを初期化する。初期化された圧縮済テキストには、空文字列が設定され、「C=ε」と表される。εは空文字列を意味する。
[ステップS12]文字選択部133は、位置「i」の値をインクリメントする(i=i+1)。これにより、未圧縮テキスト40内の1文字目が処理対象となる。
[ステップS13]ノード作成部134は、位置「i」の値が、文字数「n」より大きいか否かを判断する。位置「i」の値が文字数「n」より大きければ、処理がステップS20に進められる。位置「i」の値が文字数「n」以下であれば、処理がステップS14に進められる。
[ステップS14]位置「i」の値が文字数「n」以下であれば、ノード作成部134、頻度カウント部135、および符号出力部136が連携し、要約トライ作成およびテキスト圧縮処理を実行する。この処理の詳細は後述する(図9参照)。
[ステップS15]文字選択部133は、位置「i」の値をインクリメントする(i=i+1)。これにより、未圧縮テキスト40内の次の文字が処理対象となる。
[ステップS16]ノード作成部134は、要約トライ「D」の大きさ「k」が、最大符号数「K」未満か否かを判断する。要約トライ「D」の大きさ「k」が最大符号数「K」未満であれば、処理がステップS13に進められる。要約トライ「D」の大きさ「k」が最大符号数「K」以上であれば、処理がステップS17に進められる。
[ステップS17]ノード作成部134は、位置「i」の値が、文字数「n」より大きいか否かを判断する。位置「i」の値が文字数「n」より大きければ、処理がステップS20に進められる。位置「i」の値が文字数「n」以下であれば、処理がステップS18に進められる。
[ステップS18]位置「i」の値が文字数「n」以下であれば、符号出力部136は、テキスト圧縮処理を実行する。この処理の詳細は後述する(図10参照)。
[ステップS19]文字選択部133は、位置「i」の値をインクリメントする(i=i+1)。これにより、未圧縮テキスト40内の次の文字が処理対象となる。その後、処理がステップS17に進められる。
[ステップS20]位置「i」の値が文字数「n」より大きくなると、符号出力部136は、ノードポインタ「P」が示すノードの符号を、圧縮済テキスト「C」の末尾に書き出す。その後、処理が終了する。
次に、要約トライ作成およびテキスト圧縮処理(ステップS14)の詳細について説明する。
図9は、要約トライ作成およびテキスト圧縮処理の手順を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。
[ステップS21]ノード作成部134は、ノードポインタ「P」で示されるノードの子ノードの中に、処理対象の文字「T[i]」に対応する子ノードが存在するか否かを判断する。具体的には、ノード作成部134は、文字選択部133からT[i]に対応する文字を取得する。次にノード作成部134は、ノードポインタ「P」で示されるノードのノード構造体を参照し、取得した文字に対応するポインタの内容を確認する。該当ポインタが「NULL」以外の有効な値であれば、取得した文字に対応する子ノードが存在する。
子ノードが存在する場合、処理がステップS22に進められる。子ノードが存在しない場合、処理がステップS23に進められる。
[ステップS22]子ノードが存在する場合、ノード作成部134は、現在のノードポインタ「P」で指定されているノードの文字「T[i]」に対応する子ノードを、新たにノードポインタ「P」の指定先とする。その後、要約トライ作成およびテキスト圧縮処理が終了し、図8のステップS15に処理が進められる。
[ステップS23]子ノードが存在しない場合、頻度カウント部135は、現在のノードポインタ「P」で指定されているノード内の、取得した文字に対応するカウンタの値を1増加させる。ノードポインタ「P」で示されるノードにおける文字「T[i]」の出現頻度を表すカウンタの値は、「count(P,T[i])」と表記できる。
[ステップS24]ノード作成部134は、現在のノードポインタ「P」で指定されているノード内の、取得した文字に対応するカウンタ(count(P,T[i]))の値が、閾値「α」と等しいか否かを判断する。カウンタの値が閾値「α」と等しい場合、処理がステップS25に進められる。等しくなければ、処理がステップS28に進められる。
[ステップS25]カウンタの値が閾値「α」と等しい場合、ノード作成部134は、現在のノードポインタ「P」で指定されているノードの配下に、文字「T[i]」に対応する子ノードを作成する。具体的には、ノード作成部134は、新たなノードIDを付与したノード構造体を生成する。例えばノード作成部134は、最後に作成したノードのノードIDを記憶しておき、そのノードIDに1を加算した値を、作成したノードのノードIDとする。作成されたノードのラベルは、文字「T[i]」である。また作成されたノード構造体内の各カウンタおよび各ポインタには初期値が設定される。そしてノード作成部134は、現在のノードポインタ「P」で指定されているノードにおける文字「T[i]」に対応するポインタに、新たに作成したノードを指し示す値を設定する。
[ステップS26]ノード作成部134は、ノードポインタ「P」の指定先を、ステップS25で新たに作成した子ノードとする。
[ステップS27]ノード作成部134は、要約トライ「D」の大きさ「k」の値をインクリメントする。その後、要約トライ作成およびテキスト圧縮処理が終了し、図8のステップS15に処理が進められる。
[ステップS28]ステップS24でカウンタの値が閾値「α」と等しくないと判断された場合、符号出力部136は、ノードポインタ「P」で指定されたノードの符号を、圧縮済テキスト「C」の末尾に書き出す。
[ステップS29]ノード作成部134は、ノードポインタ「P」の指定先を、ルートノードの子ノードのうちの、文字「T[i]」に対応するルートノードの子ノードとする。その後、要約トライ作成およびテキスト圧縮処理が終了し、図8のステップS15に処理が進められる。
次に、テキスト圧縮処理(ステップS18)の詳細について説明する。
図10は、要約トライ作成およびテキスト圧縮処理の手順を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。
[ステップS31]符号出力部136は、ノードポインタ「P」で示されるノードの子ノードの中に、処理対象の文字「T[i]」に対応する子ノードが存在するか否かを判断する。子ノードが存在する場合、処理がステップS32に進められる。子ノードが存在しない場合、処理がステップS33に進められる。
[ステップS32]子ノードが存在する場合、符号出力部136は、現在のノードポインタ「P」で指定されているノードの文字「T[i]」に対応する子ノードを、新たにノードポインタ「P」の指定先とする。その後、テキスト圧縮処理が終了し、図8のステップS19に処理が進められる。
[ステップS33]子ノードが存在しない場合、符号出力部136は、ノードポインタ「P」で指定されたノードの符号を、圧縮済テキスト「C」の末尾に書き出す。
[ステップS34]符号出力部136は、ノードポインタ「P」の指定先を、ルートノードの子ノードのうちの、文字「T[i]」に対応する子ノードとする。その後、要約トライ作成およびテキスト圧縮処理が終了し、図8のステップS19に処理が進められる。
このようにして、要約トライ「D」と圧縮済テキスト「C」とが作成される。ここで、カウンタの値が閾値「α」に達した場合にのみ要約トライ「D」に対して子ノードを追加するため、出現頻度の高い文字列に対応するノードのみ作成することができる。
しかも要約トライ「D」の大きさ「k」が最大符号数「K」以上となると、要約トライ「D」は更新されずテキスト圧縮処理による圧縮済テキスト「C」の作成のみが継続される。すなわち、要約トライ「D」の大きさが最大符号数を超えたら、要約トライ「D」のノードカウンタが閾値「α」を超えても、新たなノードは作られない。これにより、要約トライ「D」の大きさは所定値以下に抑制される。
次に、具体的な要約トライと圧縮済テキストとの生成例について説明する。
図11は、初期状態の要約トライと圧縮済テキストの例を示す図である。図11の例では、未圧縮テキスト40に含まれ得る文字が「a,b,c,d」の4文字であるものとする。すなわち、集合Σ={a,b,c,d}であり、アルファベットサイズ(|Σ|)=4である。入力された未圧縮テキスト40内の文字列を”abcabcdabc”とする。すなわち、配列T=”abcabcdabc”となる。また、閾値「α=2」、最大符号数「K=256」であるものとする。最大符号数が「256(2の8乗)」であるということは、符号が1バイトの固定長であることを示す。
初期化フェーズにおいて、初期状態の要約トライ50が作成される。作成された要約トライ50は、5つのノード51〜55を有する。ノード51は、ルートノードである。ノード52〜55は、それぞれ文字「a,b,c,d」に対応するノード51の子ノードである。ノード51には、子ノードであるノード52〜55それぞれへのポインタが設定されている。
初期状態では、各ノード51〜55内のカウンタの値はすべて「0」である。また初期状態では、ノードポインタ「P」はノード51を指し示している(P=root(D))。なお図11の例では、ノードポインタ「P」で指し示されるノードに、「P」の文字が書かれた旗の図形を付与している。
圧縮済テキスト60には、初期化処理により空文字列(ε)が設定される。また処理対象の文字の位置「i」には、「0」が設定される。
図11に示した状態から位置「i」がインクリメントされ、i=1とされる。そして、未圧縮テキスト40内の先頭の文字「a」が処理対象として選択される。
図12は、1文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。初期状態においてノードポインタ「P」で指定されていたルートのノード51には、すべての文字に対応する子ノードが存在する。そこで、1文字目の文字「a」に応じて、ノードポインタ「P」の指定先が、ノード51の子ノードのうちの「a」に対応するノード52に変更される。この際、圧縮済テキスト60への符号の書き出しは行われない。
図12に示した状態から位置「i」がインクリメントされ、i=2とされる。そして、未圧縮テキスト40内の2文字目の文字「b」が処理対象として選択される。
図13は、2文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。ノード52には、文字「b」に対応する子ノードが存在しない。そこで、ノード52内の文字「b」に対応するカウンタが「1」にカウントアップされている(count(1,b)=1)。このとき、count(1,b)<αである。そこで、圧縮済テキスト60」の末尾に、ノード52に対応する符号「1」が書き出される。その結果、圧縮済テキスト60は「C=1」となる。そして、ノードポインタ「P」の指定先が、ノード51の子ノードのうちの「b」に対応するノード53に変更される。
図13に示した状態から位置「i」がインクリメントされ、i=3とされる。そして、未圧縮テキスト40内の3文字目の文字「c」が処理対象として選択される。
図14は、3文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。ノード53には、文字「c」に対応する子ノードが存在しない。そこで、ノード53内の文字「c」に対応するカウンタが「1」にカウントアップされている(count(2,c)=1)。このとき、count(2,c)<αである。そこで、圧縮済テキスト60の末尾に、ノード53に対応する符号「2」が書き出される。その結果、圧縮済テキスト60は「C=12」となる。そして、ノードポインタ「P」の指定先が、ノード51の子ノードのうちの「c」に対応するノード54に変更される。
図14に示した状態から位置「i」がインクリメントされ、i=4とされる。そして、未圧縮テキスト40内の4文字目の文字「a」が処理対象として選択される。
図15は、4文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。ノード54には、文字「a」に対応する子ノードが存在しない。そこで、ノード54内の文字「a」に対応するカウンタが「1」にカウントアップされている(count(3,a)=1)。このとき、count(3,a)<αである。そこで、圧縮済テキスト60の末尾に、ノード54に対応する符号「3」が書き出される。その結果、圧縮済テキスト60は「C=123」となる。そして、ノードポインタ「P」の指定先が、ノード51の子ノードのうちの「a」に対応するノード52に変更される。
図15に示した状態から位置「i」がインクリメントされ、i=5とされる。そして、未圧縮テキスト40内の5文字目の文字「b」が処理対象として選択される。
図16は、5文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。ノード52には、文字「b」に対応する子ノードが存在しない。そこで、ノード52内の文字「b」に対応するカウンタが「2」にカウントアップされている(count(1,b)=2)。このとき、count(1,b)=αである。そこで、ノード52の文字「b」に対応する子ノードとしてノード56が作成される。この際、ノード52の文字「b」に対応するポインタには、ノード56を示す値が設定される。新たに作成されたノード56には、ノードID「5」が付与され、ラベル「b」が設定される。ノード56内のカウンタとポインタとには、初期値が設定される。そして、ノードポインタ「P」の指定先が、新たに作成したノード56に変更される。この際、圧縮済テキスト60への符号の書き出しは行われない。
図16に示した状態から位置「i」がインクリメントされ、i=6とされる。そして、未圧縮テキスト40内の6文字目の文字「c」が処理対象として選択される。
図17は、6文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。ノード56には、文字「c」に対応する子ノードが存在しない。そこで、ノード56内の文字「c」に対応するカウンタが「1」にカウントアップされている(count(5,c)=1)。このとき、count(5,c)<αである。そこで、圧縮済テキスト60の末尾に、ノード56に対応する符号「5」が書き出される。その結果、圧縮済テキスト60は「C=1235」となる。そして、ノードポインタ「P」の指定先が、ノード51の子ノードのうちの「c」に対応するノード54に変更される。
図17に示した状態から位置「i」がインクリメントされ、i=7とされる。そして、未圧縮テキスト40内の7文字目の文字「d」が処理対象として選択される。
図18は、7文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。図17の状態のままではノード54には、文字「d」に対応する子ノードが存在しない。そこで、ノード54内の文字「d」に対応するカウンタが「1」にカウントアップされている(count(3,d)=1)。このとき、count(3,d)<αである。そこで、圧縮済テキスト60の末尾に、ノード54に対応する符号「3」が書き出される。その結果、圧縮済テキスト60は「C=12353」となる。そして、ノードポインタ「P」の指定先が、ノード51の子ノードのうちの「d」に対応するノード55に変更される。
図18に示した状態から位置「i」がインクリメントされ、i=8とされる。そして、未圧縮テキスト40内の8文字目の文字「a」が処理対象として選択される。
図19は、8文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。ノード55には、文字「a」に対応する子ノードが存在しない。そこで、ノード55内の文字「a」に対応するカウンタが「1」にカウントアップされている(count(4,a)=1)。このとき、count(4,a)<αである。そこで、圧縮済テキスト60の末尾に、ノード55に対応する符号「4」が書き出される。その結果、圧縮済テキスト60は「C=123534」となる。そして、ノードポインタ「P」の指定先が、ノード51の子ノードのうちの「a」に対応するノード52に変更される。
図19に示した状態から位置「i」がインクリメントされ、i=9とされる。そして、未圧縮テキスト40内の9文字目の文字「b」が処理対象として選択される。
図20は、9文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。ノード52には、文字「b」に対応する子ノードが存在する。そこで、9文字目の文字「b」に応じて、ノードポインタ「P」の指定先が、ノード52の子ノードのうちの「b」に対応するノード56に変更される。この際、圧縮済テキスト60への符号の書き出しは行われない。
図20に示した状態から位置「i」がインクリメントされ、i=10とされる。そして、未圧縮テキスト40内の10文字目の文字「c」が処理対象として選択される。
図21は、10文字目を処理した後の要約トライと圧縮済テキストの例を示す図である。図20の状態のままではノード56には、文字「c」に対応する子ノードが存在しない。そこで、ノード56内の文字「c」に対応するカウンタが「2」にカウントアップされている(count(5,c)=2)。このとき、count(5,c)=αである。そこで、ノード52の文字「c」に対応する子ノードとしてノード57が作成される。この際、ノード56の文字「c」に対応するポインタには、ノード57を示す値が設定される。新たに作成されたノード57には、ノードID「6」が付与され、ラベル「c」が設定される。ノード57内のカウンタとポインタとには、初期値が設定される。そして、ノードポインタ「P」の指定先が、新たに作成したノード57に変更される。この際、圧縮済テキスト60への符号の書き出しは行われない。
図21に示した状態から位置「i」がインクリメントされ、i=11とされる。テキストには11文字目は存在しない。そのため位置「i」の値が文字数「n」より大きくなる。
図22は、位置「i」の値が文字数「n」より大きくなった後の要約トライと圧縮済テキストの例を示す図である。位置「i」の値が文字数「n」より大きくなると、要約トライ50の構築処理は終了する。そして、ノードポインタ「P」で示されるノード57の符号が圧縮済テキスト60に書き出される。その結果、圧縮済テキスト60は「C=1235346」となる。
このようにして、未圧縮テキストデータに基づいて、要約トライ50と圧縮済テキスト60とが作成される。第2の実施の形態に示したテキスト符号化技術を用いると、STVFのような接尾辞木の作成が不要となる。接尾辞木は、すべてのテキストデータを読み込んで作成されるため、構築に時間がかかる。そのため第2の実施の形態に示したテキスト符号化技術は、接尾辞木を作成せずに済むことにより、STVFより20倍ほど高速に符号化を行うことができる。
しかも、第2の実施の形態に示したテキスト符号化技術では、テキスト内の文字を先頭から1文字ずつ読み込んで、逐次処理(ストリーム処理)が可能である。逐次処理ができれば、例えば、コンピュータ間の通信における送信データの符号化に利用できる。すなわち、STVFのようにすべてのテキストデータから接尾辞木を構築し、その接尾辞木から文節木を作成後にテキストデータの符号化を行う場合、送信データの全体を読み込むまで、符号化されたデータを作成できない。そのため、ストリーム処理が困難となる。一方、第2の実施の形態に示したテキスト符号化技術では、送信データの先頭から順に符号化することができ、符号化したデータを順次送信できる。これにより、符号化による通信遅延を最小限に抑えることができる。
〔第3の実施の形態〕
第3の実施の形態は、複数の未圧縮テキストを圧縮し、文字検索の対象とすることができるようにしたものである。
図23は、第3の実施の形態に係るサーバの機能を示す図である。第3の実施の形態にかかるサーバ100aは、符号化辞書記憶部110a、圧縮済テキスト記憶部120a、テキスト符号化部130a、検索部140a、および解凍部150aを有する。
符号化辞書記憶部110aと圧縮済テキスト記憶部120aとは、それぞれ図6に示した第2の実施の形態の同名の要素と同じ機能を有する。
テキスト符号化部130aは、図6に示した第2の実施の形態のテキスト符号化部130が有する機能に加え、複数の未圧縮テキスト71,72,73を区別するための制御記号を圧縮済テキスト80に挿入する機能を有する。制御記号としては、要約トライで割り当てる符号と重複しない記号を用いる。例えば、図23の例では、圧縮済テキスト80内に、未圧縮テキスト71〜73の区切りを示す制御記号として「$」が挿入されている。
検索部140aは、図6に示した第2の実施の形態の検索部140が有する機能に加え、検索結果内に、ヒットした文字列を含む未圧縮テキストを示す情報を含める機能を有する。例えば、圧縮済テキスト80内での順番によって、ヒットした文字列を含む未圧縮テキストが示される。例えば、検索部140aは、検索でヒットした文字列の位置よりも前にある制御記号「$」の数を数え、その数に1を加算した番号を、該当文字列を含む未圧縮テキストの順番として、検索結果42に含める。
解凍部150aは、図6に示した第2の実施の形態の解凍部150が有する機能に加え、未圧縮テキストの順番を指定した解凍要求43を受け取った場合、圧縮済テキスト80内の指定された順番の符号語列を解凍する機能を有する。例えば解凍部150aは、圧縮済テキスト80を、制御記号を境界として分割し、複数の符号語列を生成する。そして解凍部150aは、圧縮済テキスト80の先頭からの符号語列の順番を数え、要求された順番の符号語列を解凍し、解凍済テキスト44とする。
図24は、第3の実施の形態に係るテキスト符号化部の詳細機能を示すブロック図である。テキスト符号化部130aは、頻度閾値記憶部131a、最大符号数記憶部132a、文字選択部133a、ノード作成部134a、頻度カウント部135a、符号出力部136a、および制御記号出力部137を有する。頻度閾値記憶部131a、最大符号数記憶部132a、文字選択部133a、ノード作成部134a、頻度カウント部135a、および符号出力部136aは、図7に示した第2の実施の形態における同名の要素と同じ機能を有している。
制御記号出力部137は、符号出力部136aが圧縮済テキスト記憶部120aに対して、1つの未圧縮テキストから生成した最後の符号(図8のステップS20で格納される符号)を出力したことを検出する。そして、制御記号出力部137は、1つの未圧縮テキストの末尾(最後の符号の後)に制御記号「$」を格納する。
次に、テキスト符号化処理の手順について詳細に説明する。なお、テキスト符号化処理の入力は、テキスト数M個(Mは1以上の整数)の未圧縮テキスト71,72,73、閾値、および最大符号数である。ここでM個の未圧縮テキスト71,72,73,・・・それぞれに含まれるテキストデータ列を、T1,・・・,TMとする。また、現在処理対象としている未圧縮テキストを識別するテキスト番号を「m」(mは1以上の整数)とする。また、テキスト間の境界を示す制御記号を「$」とする。その他の記号の意味は第2の実施の形態と同様である。
図25は、第3の実施の形態に係るテキスト符号化処理の手順を示すフローチャートである。以下、図25に示す処理をステップ番号に沿って説明する。
[ステップS41]サーバ100a内の各要素は、それぞれ情報の初期化を行う。例えば文字選択部133aは、文字の位置「i」の値を「0」に初期化する。また文字選択部133aは、テキスト番号「m」の値を「1」に初期化する。
ノード作成部134aは、符号化辞書記憶部110a内の要約トライ「D」を初期化する。さらにノード作成部134aは、ノードポインタ「P」を初期化する。符号出力部136aは、圧縮済テキスト記憶部120a内の圧縮済テキストを初期化する。初期化された圧縮済テキストには、空文字列が設定され、「C=ε」と表される。εは空文字列を意味する。
[ステップS42]文字選択部133aは、テキスト番号「m」がテキスト数「M」とより大きいか否かを判断する。テキスト番号がテキスト数より大きい場合、処理が終了する。テキスト番号がテキスト数以下であれば、処理がステップS43に進められる。
[ステップS43]文字選択部133aは、「m」番目のテキストデータ「Tm」を取得する。
[ステップS44]文字選択部133aは、位置「i」の値に「1」を設定する(i=1)。これにより、「m」番目のテキストデータ「Tm」の先頭の文字が処理対象となる。
[ステップS45]文字選択部133aは、テキストデータ「Tm」の長さ(文字数)を、文字数「n」に代入する。
[ステップS46]文字選択部133a、ノード作成部134a、頻度カウント部135a、および符号出力部136の連携した処理により、圧縮処理が行われる。この処理の詳細は後述する(図26参照)。
[ステップS47]制御記号出力部137は、制御記号「$」を圧縮済テキスト「C」の末尾に書き出す。
[ステップS48]ノード作成部134aは、ノードポインタ「P」を初期化する(P=root(D))。
[ステップS49]文字選択部133aは、テキスト番号「m」に1を加算する。その後、処理がステップS42に進められる。
図26は、圧縮処理の詳細手順を示すフローチャートである。以下、図26に示す処理をステップ番号に沿って説明する。
[ステップS51]ノード作成部134aは、位置「i」の値が、文字数「n」より大きいか否かを判断する。位置「i」の値が文字数「n」より大きければ、処理がステップS58に進められる。位置「i」の値が文字数「n」以下であれば、処理がステップS52に進められる。
[ステップS52]位置「i」の値が文字数「n」以下であれば、ノード作成部134a、頻度カウント部135a、および符号出力部136aが連携し、要約トライ作成およびテキスト圧縮処理を実行する。この処理の詳細は、図9に示した第2の実施の形態における要約トライ作成およびテキスト圧縮処理と同様である。
[ステップS53]文字選択部133aは、位置「i」の値をインクリメントする(i=i+1)。これにより、テキスト番号「m」の未圧縮テキスト内の次の文字が処理対象となる。
[ステップS54]ノード作成部134aは、要約トライ「D」の大きさ「k」が、最大符号数「K」未満か否かを判断する。要約トライ「D」の大きさ「k」が最大符号数「K」未満であれば、処理がステップS51に進められる。要約トライ「D」の大きさ「k」が最大符号数「K」以上であれば、処理がステップS55に進められる。
[ステップS55]ノード作成部134aは、位置「i」の値が、文字数「n」より大きいか否かを判断する。位置「i」の値が文字数「n」より大きければ、処理がステップS58に進められる。位置「i」の値が文字数「n」以下であれば、処理がステップS56に進められる。
[ステップS56]位置「i」の値が文字数「n」以下であれば、符号出力部136aは、テキスト圧縮処理を実行する。この処理の詳細は、図10に示した第2の実施の形態におけるテキスト圧縮処理と同様である。
[ステップS57]文字選択部133aは、位置「i」の値をインクリメントする(i=i+1)。これにより、テキスト番号「m」の未圧縮テキスト内の次の文字が処理対象となる。その後、処理がステップS55に進められる。
[ステップS58]位置「i」の値が文字数「n」より大きくなると、符号出力部136は、ノードポインタ「P」が示すノードの符号を、圧縮済テキスト「C」の末尾に書き出す。その後、圧縮処理が終了し、処理が図25のステップS47に進められる。
このようにして、符号化された個々のテキストデータの間に制御記号を挿入することができる。この制御記号により、圧縮済テキスト内の符号語列を、符号の生成元となった未圧縮テキストごとに分割することができる。そして、圧縮済テキスト内の分割された符号語列の順番により、各符号語列の生成元となった未圧縮テキストを判別できる。
〔第4の実施の形態〕
第4の実施の形態は、要約トライに含まれるノードの閾値「α」を動的に変更可能としたものである。要約トライを用いた符号化では、閾値「α」のとり方によって圧縮率が大きく異なる。閾値「α」が大きすぎると、要約トライがなかなか成長せず、長い文字列に符号を割り当てることができない。逆に閾値「α」が小さすぎると、要約トライが早く成長しすぎ、後方のデータを読む前に最大サイズを超えてしまう。そこで第4の実施の形態では、閾値テーブルを用いて、最初のうちは閾値「α」の値を小さく保ち、読み込むデータ量が増えるのに伴い閾値「α」を徐々に大きくしていく。
図27は、第4の実施の形態に係るテキスト符号化部の機能を示すブロック図である。テキスト符号化部130bは、未圧縮テキスト40を符号化し、要約トライと圧縮済テキストとを生成する。要約トライは、符号化辞書として符号化辞書記憶部110bに格納される。圧縮済テキストは、圧縮済テキスト記憶部120bに格納される。符号化辞書記憶部110bは、要約トライ形式の符号化辞書を記憶する。圧縮済テキスト記憶部120bは、圧縮済テキストを記憶する。
テキスト符号化部130bは、頻度閾値記憶部131b、最大符号数記憶部132b、文字選択部133b、ノード作成部134b、頻度カウント部135b、符号出力部136b、閾値テーブル記憶部138、および閾値設定部139を有する。頻度閾値記憶部131b、最大符号数記憶部132b、文字選択部133b、ノード作成部134b、頻度カウント部135b、および符号出力部136bは、図7に示した第2の実施の形態における同名の要素と同じ機能を有している。
閾値テーブル記憶部138は、符号化された文字数と閾値との対応関係を示す閾値テーブルを記憶する。例えば、RAM102またはHDD103の記憶領域の一部が、閾値テーブル記憶部138として使用される。
閾値設定部139は、文字選択部133bが選択してノード作成部134bに渡した文字数に応じて、頻度閾値記憶部131b内の閾値を設定する。その際、閾値設定部139は、閾値テーブル記憶部138を参照し、設定する閾値を決定する。
図28は、閾値テーブル記憶部のデータ構造の一例を示す図である。閾値テーブル記憶部138には、閾値テーブル138aが格納されている。閾値テーブル138aには、文字数と閾値との欄が設けられている。閾値テーブル138a内の横方向に並べられた情報が互いに関連付けられている。
文字数の欄には、符号化された文字の数を示す数値の範囲が設定されている。図28の例では、文字のデータ量を示すバイト数によって、文字数が示されている。例えば1バイト文字であれば、バイト数の数値が、そのまま文字数となる。また2バイト文字であれば、バイト数の数値の半分の値が、文字数となる。
閾値の欄には、対応する文字数の範囲内の文字が符号化されたときの閾値が設定されている。例えば、符号化された文字のデータ量が1バイトから1Kバイト範囲内であれば、閾値「α」として10が設定される。また符号化された文字のデータ量が1Kバイトから100Kバイト範囲内であれば、閾値「α」として100が設定される。なお、文字のデータ量が「1〜1K」と「1K〜100K」の境界の値「1K」となった場合、例えば値が大きい方の閾値(この例では「100」)が設定される。
図29は、第4の実施の形態に係るテキスト符号化処理の手順を示すフローチャートである。以下、図29に示す処理をステップ番号に沿って説明する。
[ステップS61]テキスト符号化部130b内の各要素は、それぞれ情報の初期化を行う。例えば文字選択部133bは、文字の位置「i」の値を「0」に初期化する。ノード作成部134bは、符号化辞書記憶部110b内の要約トライ「D」を初期化する。さらにノード作成部134bは、ノードポインタ「P」を初期化する。符号出力部136bは、圧縮済テキスト記憶部120b内の圧縮済テキストを初期化する。
[ステップS62]文字選択部133bは、位置「i」の値をインクリメントする(i=i+1)。これにより、未圧縮テキスト40内の1文字目が処理対象となる。
[ステップS63]ノード作成部134bは、位置「i」の値が、文字数「n」より大きいか否かを判断する。位置「i」の値が文字数「n」より大きければ、処理がステップS71に進められる。位置「i」の値が文字数「n」以下であれば、処理がステップS64に進められる。
[ステップS64]閾値設定部139は、閾値テーブル138aと位置「i」に基づいて閾値「α」を求める。例えば閾値設定部139は、未圧縮テキスト40に含まれる文字が1バイト文字であれば、位置「i」の値を、符号化した文字数に応じたバイト数として取得する。次に閾値設定部139は、取得したバイト数を含む範囲を、閾値テーブル138aの文字数の欄から選択する。さらに閾値設定部139は、選択した範囲に対応する閾値を、閾値テーブル138aから取得する。そして閾値設定部139は、取得した閾値を頻度閾値記憶部131bに格納する。
[ステップS65]位置「i」の値が文字数「n」以下であれば、ノード作成部134b、頻度カウント部135b、および符号出力部136bが連携し、要約トライ作成およびテキスト圧縮処理を実行する。この処理の詳細は、図9に示した第2の実施の形態の処理と同様である。
[ステップS66]文字選択部133bは、位置「i」の値をインクリメントする(i=i+1)。これにより、未圧縮テキスト40内の次の文字が処理対象となる。
[ステップS67]ノード作成部134bは、要約トライ「D」の大きさ「k」が、最大符号数「K」未満か否かを判断する。要約トライ「D」の大きさ「k」が最大符号数「K」未満であれば、処理がステップS63に進められる。要約トライ「D」の大きさ「k」が最大符号数「K」以上であれば、処理がステップS68に進められる。
[ステップS68]ノード作成部134bは、位置「i」の値が、文字数「n」より大きいか否かを判断する。位置「i」の値が文字数「n」より大きければ、処理がステップS71に進められる。位置「i」の値が文字数「n」以下であれば、処理がステップS69に進められる。
[ステップS69]位置「i」の値が文字数「n」以下であれば、符号出力部136bは、テキスト圧縮処理を実行する。この処理の詳細は、図10に示した第2の実施の形態の処理と同様である。
[ステップS70]文字選択部133bは、位置「i」の値をインクリメントする(i=i+1)。これにより、未圧縮テキスト40内の次の文字が処理対象となる。その後、処理がステップS68に進められる。
[ステップS71]位置「i」の値が文字数「n」より大きくなると、符号出力部136bは、ノードポインタ「P」が示すノードの符号を、圧縮済テキスト「C」の末尾に書き出す。その後、処理が終了する。
このようにして、閾値「α」を動的に変更することができる。これにより、システムを運用していくうちに符号化された文字数が徐々に増加していっても、符号化された文字数に応じた適切な閾値「α」が設定される。例えば、閾値「α」の値を、符号化された文字数の増加に伴い徐々に大きくしていくことで、閾値「α」が大きすぎることにより、要約トライがなかなか成長しないような事態を抑止できる。また閾値「α」が小さすぎることにより、要約トライが早く成長しすぎ、後方のデータを読む前にノード数が最大符号数を超えてしまう事態の発生も抑止できる。
〔その他の応用例〕
上記の処理機能は、コンピュータによって実現することができる。その場合、サーバが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM/RWなどがある。光磁気記録媒体には、MO(Magneto-Optical disc)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
また、上記の処理機能の少なくとも一部を、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現することもできる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
以上の実施の形態に開示された技術には、以下の付記に示す技術が含まれる。
(付記1) テキストデータ内の文字列から順に文字を選択する文字選択手段と、
前記テキストデータに出現し得る文字に対応する複数のノードがルートのノードの子として木構造で予め関連付けられ、各ノードに対して前記テキストデータに出現し得る文字に対応する子のノードを追加可能であり、各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与された文節木を記憶する文節木記憶手段を参照し、前記ルートのノードから前記判断位置を開始し、前記判断位置のノードに対して前記文字選択手段で選択された文字に対応する子のノードが存在する場合、該子のノードに前記判断位置を移動し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達していない場合、前記ルートのノードに対する前記選択された文字に対応する子のノードに前記判断位置を移動し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達している場合、前記判断位置のノードに対して、新たな識別子を付与した、前記選択された文字に対応する子のノードを追加すると共に、追加した該子のノードに前記判断位置を移動するノード追加手段と、
前記文節木記憶手段を参照し、前記判断位置のノードに対して前記選択された文字に対応するノードが存在しない場合、前記判断位置のノードの付与された前記選択された文字の出現回数をカウントアップする頻度カウント手段と、
を有することを特徴とするテキスト処理装置。
(付記2) 前記文節木記憶手段を参照し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在しない場合、前記判断位置のノードに付与された識別子を出力する識別子出力手段をさらに有することを特徴とする付記1記載のテキスト処理装置。
(付記3) 前記識別子出力手段は、前記テキストデータ内の文字列の最後の文字が選択されたことにより前記判断位置が移動されると、移動後の前記判断位置のノードに付与された識別子を出力することを特徴とする付記2記載のテキスト処理装置。
(付記4) 前記ノード追加手段は、子のノードの追加を、前記文節木のノードの数が所定数に達するまで行うことを特徴とする付記1乃至3のいずれかに記載のテキスト処理装置。
(付記5) 前記選択された文字の総量に応じて前記閾値を変更する閾値変更手段をさらに有することを特徴とする付記1乃至4のいずれかに記載のテキスト処理装置。
(付記6) 前記閾値変更手段は、前記選択された文字の総量が増加するほど、前記閾値の値を大きくすることを特徴とする付記5記載のテキスト処理装置。
(付記7) 移動後の前記判断位置のノードに付与された識別子を出力後、前記テキストデータ内の文字列に対応する符号の最後であることを示す制御記号を出力する制御記号出力手段をさらに有することを特徴とする付記3記載のテキスト処理装置。
(付記8) コンピュータが、
テキストデータ内の文字列から順に文字を選択し、
前記テキストデータに出現し得る文字に対応する複数のノードがルートのノードの子として木構造で予め関連付けられ、各ノードに対して前記テキストデータに出現し得る文字に対応する子のノードを追加可能であり、各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与された文節木を記憶する文節木記憶手段を参照し、
前記ルートのノードから前記判断位置を開始し、
前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在する場合、該子のノードに前記判断位置を移動し、
前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達していない場合、前記ルートのノードに対する前記選択された文字に対応する子のノードに前記判断位置を移動し、
前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達している場合、前記判断位置のノードに対して、新たな識別子を付与した、前記選択された文字に対応する子のノードを追加すると共に、追加した該子のノードに前記判断位置を移動し、
前記判断位置のノードに対して前記選択された文字に対応するノードが存在しない場合、前記判断位置のノードの付与された前記選択された文字の出現回数をカウントアップする、
ことを特徴とするテキスト処理方法。
(付記9) 前記コンピュータが、さらに、
前記文節木記憶手段を参照し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在しない場合、前記判断位置のノードに付与された識別子を出力することを特徴とする付記8記載のテキスト処理方法。
(付記10) 前記コンピュータが、さらに、
前記テキストデータ内の文字列の最後の文字が選択されたことにより前記判断位置が移動されると、移動後の前記判断位置のノードに付与された識別子を出力することを特徴とする付記9記載のテキスト処理方法。
(付記11) 子のノードの追加は、前記文節木のノードの数が所定数に達するまで行うことを特徴とする付記8乃至10のいずれかに記載のテキスト処理方法。
(付記12) 前記コンピュータが、さらに、
前記選択された文字の総量に応じて前記閾値を変更することを特徴とする付記8乃至11のいずれかに記載のテキスト処理方法。
(付記13) 前記閾値を変更する際には、前記選択された文字の総量が増加するほど、前記閾値の値を大きくすることを特徴とする付記12記載のテキスト処理方法。
(付記14) 前記コンピュータが、さらに、
移動後の前記判断位置のノードに付与された識別子を出力後、前記テキストデータ内の文字列に対応する符号の最後であることを示す制御記号を出力することを特徴とする付記10記載のテキスト処理方法。
(付記15) コンピュータに、
テキストデータ内の文字列から順に文字を選択し、
前記テキストデータに出現し得る文字に対応する複数のノードがルートのノードの子として木構造で予め関連付けられ、各ノードに対して前記テキストデータに出現し得る文字に対応する子のノードを追加可能であり、各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与された文節木を記憶する文節木記憶手段を参照し、
前記ルートのノードから前記判断位置を開始し、
前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在する場合、該子のノードに前記判断位置を移動し、
前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達していない場合、前記ルートのノードに対する前記選択された文字に対応する子のノードに前記判断位置を移動し、
前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達している場合、前記判断位置のノードに対して、新たな識別子を付与した、前記選択された文字に対応する子のノードを追加すると共に、追加した該子のノードに前記判断位置を移動し、
前記判断位置のノードに対して前記選択された文字に対応するノードが存在しない場合、前記判断位置のノードの付与された前記選択された文字の出現回数をカウントアップする、
処理を実行させることを特徴とするテキスト処理プログラム。
(付記16) 前記コンピュータが、さらに、
前記文節木記憶手段を参照し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在しない場合、前記判断位置のノードに付与された識別子を出力することを特徴とする付記15記載のテキスト処理プログラム。
(付記17) 前記コンピュータが、さらに、
前記テキストデータ内の文字列の最後の文字が選択されたことにより前記判断位置が移動されると、移動後の前記判断位置のノードに付与された識別子を出力することを特徴とする付記16記載のテキスト処理プログラム。
(付記18) 子節点の追加は、前記文節木のノードの数が所定数に達するまで行うことを特徴とする付記15乃至17のいずれかに記載のテキスト処理プログラム。
(付記19) 前記コンピュータが、さらに、
前記選択された文字の総量に応じて前記閾値を変更することを特徴とする付記15乃至18のいずれかに記載のテキスト処理プログラム。
(付記20) 前記閾値を変更する際には、前記選択された文字の総量が増加するほど、前記閾値の値を大きくすることを特徴とする付記19記載のテキスト処理プログラム。
(付記21) 前記コンピュータが、さらに、
移動後の前記判断位置のノードに付与された識別子を出力後、前記テキストデータ内の文字列に対応する符号の最後であることを示す制御記号を出力することを特徴とする付記17記載のテキスト処理プログラム。
1 テキスト処理装置
1a 文字選択手段
1b ノード追加手段
1c 頻度カウント手段
1d 識別子出力手段
2 文節木記憶手段
2a 文節木
3 テキストデータ
4 符号語列

Claims (7)

  1. テキストデータ内の文字列から順に文字を選択する文字選択手段と、
    前記テキストデータに出現し得る文字に対応する複数のノードがルートのノードの子として木構造で予め関連付けられ、各ノードに対して前記テキストデータに出現し得る文字に対応する子のノードを追加可能であり、各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与された文節木を記憶する文節木記憶手段を参照し、前記ルートのノードから前記判断位置を開始し、前記判断位置のノードに対して前記文字選択手段で選択された文字に対応する子のノードが存在する場合、該子のノードに前記判断位置を移動し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達していない場合、前記ルートのノードに対する前記選択された文字に対応する子のノードに前記判断位置を移動し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達している場合、前記判断位置のノードに対して、新たな識別子を付与した、前記選択された文字に対応する子のノードを追加すると共に、追加した該子のノードに前記判断位置を移動するノード追加手段と、
    前記文節木記憶手段を参照し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在しない場合、前記判断位置のノードの付与された前記選択された文字の出現回数をカウントアップする頻度カウント手段と、
    を有することを特徴とするテキスト処理装置。
  2. 前記文節木記憶手段を参照し、前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在しない場合、前記判断位置のノードに付与された識別子を出力する識別子出力手段をさらに有することを特徴とする請求項1記載のテキスト処理装置。
  3. 前記識別子出力手段は、前記テキストデータ内の文字列の最後の文字が選択されたことにより前記判断位置が移動されると、移動後の前記判断位置のノードに付与された識別子を出力することを特徴とする請求項2記載のテキスト処理装置。
  4. 前記ノード追加手段は、子のノードの追加を、前記文節木のノードの数が所定数に達するまで行うことを特徴とする請求項1乃至3のいずれかに記載のテキスト処理装置。
  5. 前記選択された文字の総量に応じて前記閾値を変更する閾値変更手段をさらに有することを特徴とする請求項1乃至4のいずれかに記載のテキスト処理装置。
  6. コンピュータが、
    テキストデータ内の文字列から順に文字を選択し、
    前記テキストデータに出現し得る文字に対応する複数のノードがルートのノードの子として木構造で予め関連付けられ、各ノードに対して前記テキストデータに出現し得る文字に対応する子のノードを追加可能であり、各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与された文節木を記憶する文節木記憶手段を参照し、
    前記ルートのノードから前記判断位置を開始し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在する場合、該子のノードに前記判断位置を移動し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達していない場合、前記ルートのノードに対する前記選択された文字に対応する子のノードに前記判断位置を移動し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達している場合、前記判断位置のノードに対して、新たな識別子を付与した、前記選択された文字に対応する子のノードを追加すると共に、追加した該子のノードに前記判断位置を移動し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在しない場合、前記判断位置のノードの付与された前記選択された文字の出現回数をカウントアップする、
    ことを特徴とするテキスト処理方法。
  7. コンピュータに、
    テキストデータ内の文字列から順に文字を選択し、
    前記テキストデータに出現し得る文字に対応する複数のノードがルートのノードの子として木構造で予め関連付けられ、各ノードに対して前記テキストデータに出現し得る文字に対応する子のノードを追加可能であり、各ノードに対応付けて、ノードの識別子と、各ノードが判断位置とされたときに次に出現した各文字の出現回数とが付与された文節木を記憶する文節木記憶手段を参照し、
    前記ルートのノードから前記判断位置を開始し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在する場合、該子のノードに前記判断位置を移動し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達していない場合、前記ルートのノードに対する前記選択された文字に対応する子のノードに前記判断位置を移動し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在せず、かつ前記判断位置のノードに付与された前記選択された文字の出現回数が所定の閾値に達している場合、前記判断位置のノードに対して、新たな識別子を付与した、前記選択された文字に対応する子のノードを追加すると共に、追加した該子のノードに前記判断位置を移動し、
    前記判断位置のノードに対して前記選択された文字に対応する子のノードが存在しない場合、前記判断位置のノードの付与された前記選択された文字の出現回数をカウントアップする、
    処理を実行させることを特徴とするテキスト処理プログラム。
JP2010091311A 2010-04-12 2010-04-12 テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム Expired - Fee Related JP5544998B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010091311A JP5544998B2 (ja) 2010-04-12 2010-04-12 テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010091311A JP5544998B2 (ja) 2010-04-12 2010-04-12 テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム

Publications (2)

Publication Number Publication Date
JP2011221845A JP2011221845A (ja) 2011-11-04
JP5544998B2 true JP5544998B2 (ja) 2014-07-09

Family

ID=45038744

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010091311A Expired - Fee Related JP5544998B2 (ja) 2010-04-12 2010-04-12 テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム

Country Status (1)

Country Link
JP (1) JP5544998B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5966673B2 (ja) * 2012-06-28 2016-08-10 富士通株式会社 符号処理のためのプログラム及びデータ構造
JP6028567B2 (ja) 2012-12-28 2016-11-16 富士通株式会社 データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法
JP6296044B2 (ja) * 2015-12-07 2018-03-20 富士通株式会社 符号処理のためのプログラム及びデータ構造
CN107463676B (zh) * 2017-08-04 2020-06-30 杭州安恒信息技术股份有限公司 文本数据存储方法及装置
CN110262289B (zh) * 2019-07-18 2022-04-26 潍柴动力股份有限公司 A2l文件中变量的处理方法、装置和存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06149537A (ja) * 1992-11-05 1994-05-27 Fujitsu Ltd データ圧縮方法及び復元方法
JP4479908B2 (ja) * 2005-06-30 2010-06-09 富士通株式会社 データソート処理プログラム、データソート処理方法およびデータソート処理装置

Also Published As

Publication number Publication date
JP2011221845A (ja) 2011-11-04

Similar Documents

Publication Publication Date Title
JP5895545B2 (ja) プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体
US8838551B2 (en) Multi-level database compression
US9710517B2 (en) Data record compression with progressive and/or selective decomposition
JP5831298B2 (ja) プログラム、情報処理装置およびインデックス生成方法
JP4977589B2 (ja) 固有表現抽出装置、固有表現抽出方法、及びプログラム
US10389378B2 (en) Computer product, information processing apparatus, and information search apparatus
US20160321282A1 (en) Extracting method, information processing method, computer product, extracting apparatus, and information processing apparatus
JP5544998B2 (ja) テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム
US9916314B2 (en) File extraction method, computer product, file extracting apparatus, and file extracting system
US8866647B2 (en) Computer product, information processing apparatus, and information search apparatus
JP2001345710A (ja) データ圧縮装置および方法
CN111460083A (zh) 文档标题树的构建方法、装置、电子设备及存储介质
US9720976B2 (en) Extracting method, computer product, extracting system, information generating method, and information contents
JP7140913B2 (ja) 映像配信時効の決定方法及び装置
US8947272B2 (en) Decoding encoded data
KR100442991B1 (ko) 트리구조의 동영상 색인 기술자를 이용한 검색장치 및 그 방법
KR101234795B1 (ko) 컨텐츠 브라우징 장치 및 방법
US8989507B2 (en) Bitmap compression for fast searches and updates
WO2015025467A1 (ja) 文字列検索装置、文字列検索方法および文字列検索プログラム
CN108038109A (zh) 从非结构化文本中提取特征词的方法及***、计算机程序
JPH10261969A (ja) データ圧縮方法および装置
CN109815475B (zh) 文本匹配方法、装置、计算设备及***
JP5939259B2 (ja) 照合制御プログラム、照合制御装置および照合制御方法
JP5346156B2 (ja) プログラム、転置インデックスの格納方法及び検索方法
JP2006302082A (ja) 文字列検索装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140117

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140428

R150 Certificate of patent or registration of utility model

Ref document number: 5544998

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees