JPWO2013179348A1 - インデックス生成プログラム及び検索プログラム - Google Patents

インデックス生成プログラム及び検索プログラム Download PDF

Info

Publication number
JPWO2013179348A1
JPWO2013179348A1 JP2014518093A JP2014518093A JPWO2013179348A1 JP WO2013179348 A1 JPWO2013179348 A1 JP WO2013179348A1 JP 2014518093 A JP2014518093 A JP 2014518093A JP 2014518093 A JP2014518093 A JP 2014518093A JP WO2013179348 A1 JPWO2013179348 A1 JP WO2013179348A1
Authority
JP
Japan
Prior art keywords
document
file
search
block
information
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.)
Granted
Application number
JP2014518093A
Other languages
English (en)
Other versions
JP5880699B2 (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
Publication of JPWO2013179348A1 publication Critical patent/JPWO2013179348A1/ja
Application granted granted Critical
Publication of JP5880699B2 publication Critical patent/JP5880699B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/185Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures

Landscapes

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

Abstract

【課題】一側面において、文書データに対する文字列検索の対象絞り込みにおける絞り込みノイズを抑制することを目的とする。【解決手段】 一態様によれば、コンピュータが、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイルタ内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、分割して得られたデータごとに、各データが所定の文字情報を含むか否かを示すインデックス情報を生成する。

Description

本発明は、文書データの検索技術に関する。
小説、学術書、辞書などの複数ジャンルの書籍が、電子的に情報が保存された電子書籍の形態で販売されている。複数の文書データに対する検索が行なわれる場合に、文字情報が複数の文書データのいずれに含まれるかの対応関係を、文字情報の種類ごとに示すインデックス情報を用いる技術がある。例えば、予め生成されたインデックス情報によって、検索文字列中のある文字情報Cを含むことが示される文書データを検索文字列に基づく文字列検索の検索対象とする一方で、他の文書データを文字列検索の対象から除く制御が行なわれる。それは、他の文書データには前述の文字情報Cを含まないことがインデックス情報に示されているため、検索文字列の文字列検索を行なわなくとも、他の文書データに検索文字列が含まれないことが明らかなためである。
また、インデックス情報を、文字情報がファイル中のどの文書要素(章、節、項などの単位)に存在するかを示すビットを文書要素単位で割り当てたビット列とする技術が知られている(例えば、特許文献1)。
特開平8−314966号公報
小説、学術書、辞書などの電子書籍は、例えば、HTML(Hyper Text Markup Language)などのマークアップ言語で記述されている。HTMLで記述されたた文書データは、文書データ内のタグ情報などにより文書を構成する文書要素に区切られる。例えば、あるタグについて開始タグから終了タグまでのデータが1つの文書要素である。ある文書要素に対して、その文書要素内に含まれる別の開始タグから終了タグまでのデータは、先述のある文書要素の子要素となる。このように、開始タグと終了タグとによる組に示される範囲の包含関係に応じて、文書要素間の階層関係が示される。
文書データのファイルを、ファイル内に含まれるある階層の文書要素ごとにブロック分割したとしても、分割して得られる各ブロックは互いにデータサイズが同じとは限らない。各ブロックでデータサイズが異なると、それぞれのブロックに含まれる文字情報の種類の数も異なる傾向にある。例えば、章立てされた学術書において、ある章だけ長い場合には、その章に対応するブロックだけ、文字情報の種類が多くなってしまうことがある。そういった場合には、インデックス情報において、特定のブロックが際立って多くの種類の文字情報の存在が示されることとなる。
また、圧縮されたインデックス情報を用いる技術があるが、インデックス情報の圧縮により、多くの種類の文字情報の存在が示されるブロックについて、インデックス情報を用いた文字列検索の対象の絞込みにおいて、ノイズが発生しやすくなる。圧縮されたインデックス情報とは、文字情報が複数の文書データのいずれに含まれるかの対応関係を示す情報が、複数の文字情報について重畳されたインデックス情報である。すなわち、圧縮されたインデックス情報においては、複数の文字情報のうちのいずれかを含むか否かを示す情報が各ブロックと対応付けられる。すると、複数の文字情報についての存否情報が重畳されるので、インデックス情報自体のデータサイズが抑制される。一方で、ファイル絞り込みにおいて、インデックス情報で重畳された他の文字情報の存在もインデックス情報から抽出されてしまうため、絞込みノイズが発生する。圧縮率を高くする(重畳する文字情報の数を多くする)と、ノイズの発生確率が高くなる(絞込みノイズが発生しやすい)という関係がある。しかしながら、ブロック同士でブロック内に含まれる文字情報の種類の数が異なるので、各ブロックで圧縮率が共通であってもブロックによってノイズの発生確率はまちまちである。すると、文字情報の種類が多いブロックの方が絞り込みノイズを発生しやすくなってしまう。
前述のように、特定の階層の文書要素の境目でファイル内のデータをブロックに分割するにしても、各々の文書要素のデータサイズが異なることに起因して、それぞれのブロックにおける絞り込みノイズの発生しやすさが異なる。
しかしながら、単純にブロックのデータサイズが均一になるように文書データのファイルを分割すると、文書要素の境目以外、もしくは、下位の文書要素(部・章・節・目と章立てされた文書の目など)の境目で分割されることがある。
例えば、第1章に相当するファイルを、第1節と第2節の一部を含む第1のブロックと、第2節の一部と第3節を含む第2のブロックとに分割したとする。例えば、学術書においては、同じ節に含まれる項同士は関連する内容を含むことが多い。そのため、第2節内の各項に特徴的な用語に含まれる文字情報は、第1のブロックと第2のブロックの双方に存在することがある。この場合においては、節単位での境目でブロック分割をすると(例えば、第1節、第2節および第3節で、それぞれ第1のブロック、第2のブロック及び第3のブロック)、第2節に特徴的な用語に含まれる文字情報が第2のブロックのみに存在することとなり得る(その特徴的な用語が第1節および第3節の双方に存在していない場合)。
学術書などの階層的な構造を有する文書においては、章内の各節に共通して用いられる用語、節内の各項に共通して用いられる用語、項内の各目に共通して用いられる用語などが存在しがちである。
一方、辞書においては、各項目で内容が独立しているため、同じ節に含まれる項同士で関連する内容を含むことは少ない。そのため、第2節のある項において特徴的な用語であっても、第2節内の他の項においては、用いられないことがある。すると、第1節と第2節の一部を含む第1のブロックと、第2節の一部と第3節を含む第2のブロックとに分割したとしても、先述の第2節のある項に特徴的な用語に含まれる文字情報は、第1のブロックまたは第2のブロックのいずれかにしか含まれないことがある。
上記の通り、学術書のように、同じ上位要素に含まれ、内容が関連する子要素同士を同じブロックに含めることで、文字列検索対象の絞り込みノイズの抑制が見込まれる。一方、辞書のように、同じ上位要素(例えば、章など)の子要素を同じブロックに含めても絞込みノイズが抑制されにくい場合もある。そのような場合には、各ブロックのデータサイズが平準化されることで絞り込みノイズの抑制が見込まれることもある。
本開示の一側面において、文書データに対する文字列検索の対象絞り込みにおける絞り込みノイズを抑制することを目的とする。
一態様によれば、生成プログラムは、コンピュータに、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、処理を実行させる。
一態様によれば、コンピュータに、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、処理を実行させる生成方法が用いられる。
一態様によれば、生成装置は、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかを切り換え、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割する分割部と、分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する生成部と、を含むことを特徴とする。
一態様によれば、検索プログラムは、コンピュータに、検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、処理を実行させる。
一態様によれば、コンピュータに、検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、処理を実行させる検索方法が用いられる。
一態様によれば、検索装置は、検索文字列を受け付ける受付部と、前記受付部が受け付けた前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を記憶する記憶部と、
前記記憶部に記憶された前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定する絞込部と、特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう検索部と、を含む。
本発明の一側面によれば、文書データに対する文字列検索の対象絞り込みにおける絞り込みノイズを抑制することができる。
図1A及びBは、インデックス情報の例と、インデックス情報に基づき生成されるビット列例とを示す。 図2Aは、文書データの階層構造例を示す。 図2Bは、文書データの階層構造例を示す。 図3は、コンピュータ1の機能ブロックの例を示す。 図4は、生成部13の機能ブロックの例を示す。 図5は、ブロック番号とブロック読出し位置との対応関係を示す。 図6は、絞込部15の機能ブロックの例を示す。 図7は、コンピュータ1のハードウェア構成の例を示す。 図8は、コンピュータ1で動作するソフトウェアの構成例を示す。 図9は、インデックス生成の処理手順例を示す。 図10Aは、文書構造解析処理の処理手順例を示す。 図10Bは、文書構造解析処理の処理手順例を示す。 図11は、文書構造テーブルの例を示す。 図12Aは、ファイル分割処理の処理手順例を示す。 図12Bは、ファイル分割処理の処理手順例を示す。 図13は、全文検索処理の処理手順例を示す。 図14は、インデックス参照処理の処理手順を示す。 図15は、検索結果を格納するテーブルの例を示す。
詳細を説明する前に、インデックス情報を用いた文字列検索の対象ファイルの絞り込みについて説明する。
図1Aは、検索対象のファイル群F1〜Fnに基づくインデックス情報I1を示す。インデックス情報I1の最上段に示されるファイル番号は、検索対象のファイル群F1〜Fnそれぞれに対応する番号である。インデックス情報において、文字情報群C1〜Cmのそれぞれが、ファイル群F1〜Fnにおける存否に関するビット列と対応付けられる。
文字情報群C1〜Cmに含まれる文字情報Cjは、例えば、1文字もしくは複数の文字の組み合わせによる文字列である。もしくは、文字情報Cjは、文字情報に対応するバイナリコードの一部分でもよい。文字情報群C1〜Cmは、使用が想定される文字(たとえばJISコードが割り当てられている文字)の全通りの組み合わせでもよい。例えば、ファイル群F1〜FnのうちのあるファイルFi(ファイル番号はi)が、「人生はクローズアップで見れば悲劇 ロングショットで見れば喜劇」という文字列を含むファイルであるとする。その場合、ファイルFiは、「人」、「生」、「は」、・・・、「劇」という文字情報を含むファイルであり、「人生」、「生は」、「はク」、・・・、「喜劇」という文字情報を含むファイルでもある。本実施形態においては、文字情報群C1〜Cmのそれぞれは2文字の文字情報である場合を例示する。
文字情報Cjがファイル群F1〜Fnのいずれに含まれるかは、1〜nのそれぞれの数iについて、文字情報CjとファイルFiとに対応する記憶領域に、文字情報CjがファイルFiに含まれるか否かに関する情報が記憶されることで示される。例えば、インデックス情報I1において、ファイルFiに文字情報Cjが含まれるか否かに関する存否情報の格納先は、文字情報Cjに対応するバイナリコードをハッシュ関数に代入して得られるアドレスPjと、ファイル番号iにより示される。文字情報に対応するバイナリコードとは、例えば、文字情報「喜劇」に対応するバイナリコード(JISに基づく文字コード)であれば、0x346E3760(0xは16進数表記を意味する)である。
1つの文字情報Cjに対して1つのアドレスPjが割り当てられる場合には、文字情報Cjの存否情報は、ファイルFiに文字情報Cjが存在すれば「1」の値のビットで示され、ファイルFiに文字情報Cjが存在しなければ、「0」の値のビットで示される。一方、複数の文字情報(例えば、文字情報Cjと文字情報Ck)が1つのアドレスPjに割り当てられている場合もある。その場合には、存否情報は、ファイルFiに文字情報Cj及び文字情報Ckのうちの少なくとも1つが存在すれば「1」の値のビットで示され、ファイルFiに文字情報Cj及び文字情報Ckのいずれも存在しなければ、「0」の値のビットで示される。ちなみに、存否情報がどのように示されるかは適宜変更されてよく、値が「1」で不存在が示され、値が「0」で存在が示されてもよい。さらには、複数ビットにより存否が示されてもよい。図1Aに示すインデックス情報においては、文字情報を含む旨は「1」の値のビットで示されている。
例えば、アドレスPjに対応する文字情報が「喜劇」のみである場合には、インデックス情報I1のアドレスPjに示されるビット列により、「喜劇」がファイル番号2,3,iのファイルそれぞれに含まれることが明らかになる。また、例えば、1つのアドレスPkに「劇王」と「見れ」との双方が対応する場合には、インデックス情報I1のアドレスPkに示されるビット列は、ファイル群F1〜Fnのそれぞれについて、「劇王」と「見れ」との少なくとも一方を含むか、「劇王」と「見れ」とのいずれも含まないか、のいずれかを示す。例えば、ファイル番号i,n−1のファイルは、「劇王」と「見れ」の少なくとも一方を含むことが示され、ファイル番号1,2,3、j、kなどのファイルは、「劇王」と「見れ」とのいずれも含まないことが示される。
図1Aに示すように、ファイルFiは、「喜劇」以外の文字情報も含むため、「喜劇」だけでなく、「人生」、「生は」、・・・など、検索文字列中の他の文字情報に対応する位置のビットも「1」の値を示す。また、図1Aでは省略されているが、ファイル群F1〜Fnのそれぞれについても、各ファイルに含まれる文字情報に対応する位置のビットが「1」の値を示す。
ファイル群F1〜Fnに対して検索を行なう場合に、図1Aに示すインデックス情報I1を用いて文字列検索対象のファイルの絞り込みが行なわれる。例えば「喜劇王」という検索文字列を含む検索要求を受け付けたとする。検索文字列の「喜劇王」には、「喜劇」という文字情報と「劇王」という文字情報とが含まれている。この場合、文字列検索対象となるファイルは、例えば、「喜劇」に基づき算出されるアドレス(図1AではPj)に示されるビット列と、「劇王」に基づき算出されるアドレス(図1AではPk)に示されるビット列とにより絞り込まれる。例えば、アドレスPjに対応するビット列と、アドレスPkに対応するビット列との論理積演算結果であるビット列A1は、図1Bに示す通りとなる。
図1Bに示すビット列A1において、「1」となるビットに対応するファイル(図1Bにおいては、ファイル番号iのファイル)が、文字列検索対象のファイルとなる。図1Aの例においては、アドレスPkに複数の文字情報(例えば、「見れ」及び「劇王」)が対応する。ファイルFiは、「劇王」は含まないが、「見れ」を含む。そのため、「見れ」及び「劇王」に対応するポインタPkに対応するビット列における、ファイルFiのビットも「1」となってしまう。そのようなインデックス情報I1を用いて、文字情報「喜劇」および「劇王」で検索対象のファイルを絞り込むと、ファイルFiに「劇王」が含まれないにも関わらず、「喜劇」と「劇王」の双方を含むファイルと判断され、検索対象のファイルとなる。
半角文字を用いた場合も同様である。例えば、ファイルFiが「Life is a tragedy when seen in close−up, but a comedy in long−shot.」という文字列を含むとする。すると、例えば、インデックス情報において、文字情報「come」に基づき算出されたアドレスPjと、ファイル番号iに示される位置のビットが「1」を示す。また、例えば、文字情報「medy」に基づき算出されたアドレスPkと、ファイル番号iに示される位置のビットが「1」を示す。検索文字列が「comedian」であると、例えば、検索対象のファイルが、インデックス情報に基づいて、「come」および「dian」の双方を含むファイルに絞り込まれるとする。その際に、たまたま文字情報「dian」に基づき算出したアドレスが、文字情報「medy」に基づいて算出したアドレスPkと同じであると、ファイルFiは「dian」を含まないにも関わらず、「comedian」の検索対象のファイルとなる。
上述のように、異なる複数の文字情報に対応するアドレスが重複することにより、ファイル絞り込みにノイズが生じうる。これは、ファイルFiに含まれない文字情報(「劇王」、「dian」など)と、ファイルFiに含まれる文字情報(「見れ」、「medy」など)とで、存否情報の格納位置を示すポインタが重複しているためである。ファイルFiに含まれる文字情報(「見れ」、「medy」など)の存在により、ビットが「1」の状態になるため、ファイルFiに含まれない文字情報(「劇王」、「dian」など)が存在しないことがインデックス情報に示されなくなってしまう。ちなみに、対応するポインタが重複する複数の文字情報の双方を含まない場合には、ビットが「0」の状態になるため、インデックス情報、複数の文字情報のどちらに対しても不存在が明らかとなる。
つまり、ファイル内に含まれる文字情報のポインタと、ファイル内に含まれない文字情報のポインタとが重複しやすいファイルほど、絞込みノイズを生じやすい。学術書などの電子書籍を例にあげると、本編のファイルよりも、索引や目次などのファイルの方が、多くの文字種類を含みやすく、同じ電子書籍内のファイルであっても、ファイルに含まれる文字情報の種類数には、差があることがある。また、本編のファイル同士でも、データサイズが大きいファイルと小さいファイルとでは、ファイルに含まれる文字情報の種類に差が出やすい。ファイル内に含まれる文字情報の種類の数が異なるファイル同士では、一方のファイル(ファイル内の文字種類が多い)の方が、アドレスの重複により、文字情報の不存在が示されなくなる事態が、他方のファイル(ファイル内の文字種類の数が少ない)に比べて発生しやすくなる。これは、学術書だけでなく、新書などにおいても同様の特徴を有している。
上述の理由により、ファイル群F1〜Fnのインデックス情報が全体的に疎な行列になると、多くの種類の文字情報を含むファイルに、文字情報同士のポインタ重複による絞り込みノイズが発生しやすくなる。先述の通り、多くの文字種類を含むファイルの一例として、ファイルサイズが他のファイルよりも大きいファイルが挙げられる。ファイルサイズが大きいファイルが絞り込みノイズになると、他のファイルよりも無駄な文字列検索の処理量が大きくなる。
インデックス情報は、ファイル単位ではなく、ファイルを分割して得られるブロックごとに、文字情報を含むか否かに関する情報を対応づけてもよい。すると、絞込みノイズとなって文字列検索が行なわれる際に読み出すデータ量が抑制される。
ところで、文書データによって文書構造が大きく異なることがある。例えば、辞書などは、特定の階層の文書要素(例えば、節や項などに対応する文書要素)が羅列される文書構造を有している。この場合、文書要素のそれぞれは、独立した意味内容を有しており、例えば、隣り合う文書要素同士で共通の用語が含まれないことが多い(共通でない用語が多く含まれる)。一方、学術書などは、文書要素同士が階層的な関係を有する文書構造であり、共通の親要素を有する子要素同士は共通する用語が用いられやすい。さらに、小説などは、例えば、1階層のみで文書要素の数は少ない傾向にある。小説においては、本編を通して共通の用語が用いられやすい。
先述の通り、辞書などにおいては、特定の文書要素の羅列が含まれがちである。文書要素の羅列とは、独立した別個の事象についての情報が、何か共通の形式で表現される場合に用いられることが多い。例えば、辞書の形式であれば、各項目について単語が対応しており、列挙される各項目は、単語と、その単語に関する情報(意味・用法など)であるいう共通の形式で表現される。この場合、例えば、「あ」を先頭の文字である単語群を親要素とする子要素は、「あしか」や「足柄山」などである。
例えば、ファイルを分割して得られるブロックごとに文字情報を含む否かに関する情報を対応付けてインデックス情報を生成するとする。先述の通り、辞書などの文書要素の羅列を含む文書構造において、子要素同士は、必ずしも共通の用語が含まれるわけではない。
図2Aは、HTML(Hyper Text Markup Language)などのマークアップ言語により記述された文書データの階層構造の例を示す。あるファイルの<body>タグと、<h1>タグや<h2>タグなどの見出しタグとの関係が図2Aの通りとすると、<h1>タグで識別される要素を共通の親要素とする子要素が多数含まれている。この場合には、先述の通り、1つ目の<h1>タグを親要素とする子要素(<h2>タグで識別される要素)同士で、用いる用語の共通性は薄いと考えられる。そのため、<h1>タグで識別される親要素単位での分割を試みなくとも、<h2>タグで識別される子要素単位での分割が行なわれればよい。例えば、図2Aに示す(A)のようにブロックAA−1とブロックAA−2のように分割してもよい。
一方、学術書などは、先述の通り、共通の親要素を有する子要素同士で共通の用語を含みやすい。例えば、チャップリンに関する考察が述べられた文書があるとすると、当然全文書に渡って、「映画」や「喜劇」などの単語が含まれることになる。一方、映画の特徴が述べられる箇所(章、節、項など)においては、「登場」、「作風」、「物語」などの単語や、思想を表す単語が用いられ、生涯について述べられる箇所においては、「結婚」や「移住」などの単語が用いられがちである。映画の特徴が述べられる箇所にも、例えば、役柄について述べられる箇所や音楽の特徴を述べられる箇所に細分される。また、生涯について述べられる箇所についても、例えば、生い立ちについて述べられる箇所やスキャンダルについて述べられる箇所に細分される。
例えば、ブロック分割により、映画の特徴が述べられる箇所(親要素1)のうちの音楽的な特徴が述べられる箇所(子要素1−2)と、生涯について述べられる箇所(親要素2)と、を含むブロックが得られるとする。すると、そのブロックには、子要素1−2に、「登場」、「作風」、「物語」や、思想を表す単語などの親要素1に特徴的な単語と、「結婚」や「移住」などの親要素2に特徴的な単語との双方が含まれてしまいがちである。例えば、このように分割されたブロックに対応するインデックス情報に基づいて文字列検索の対象ファイルの絞り込みを行なうとすると、「作風」という検索文字列について親要素1も親要素2も絞り込まれてしまうことになる。
一方、親要素1で1ブロック、親要素2で1ブロックとした場合には、親要素1のブロックは、「結婚」や「移住」などの親要素2に特徴的な単語を含まないかもしれないし、親要素2のブロックは、「登場」、「作風」、「物語」などの親要素1に特徴的な単語を含まないかもしれない。親要素の2のブロックが、親要素1に特徴的な単語を含まないのであれば、「作風」などの検索文字列で文字列検索の対象を絞りこむと、親要素2のブロックまでも絞り込まれずに済む。
図2Bは文書データの階層構造の例を示す。図2Bに示す(A)、(B)、(C)のそれぞれは、ファイルのブロック分割例を示す。分割例(A)では、<h1>タグに対応する階層の要素で分割され、ブロックBA−1及びブロックBA−2が得られている。一方の分割例(B)においては、<h3>タグに対応する階層の要素で分割され、ブロックBB−1及びブロックBB−2が得られている。一方の分割例(C)においては、<h3>タグに対応する階層の要素で分割され、ブロックBC−1及びブロックBC−2が得られている。分割例(B)のように分割された場合には、<h1>タグに識別される要素のうち1つ目の要素において特徴的な用語が検索文字列に含まれていると、その要素の一部の子要素がブロックBB−2に含まれるので、ブロックBB−2も文字列検索の対象になる。同様に、分割例(C)のように分割されると、ブロックBC−1も、<h1>タグに識別される要素のうち1つ目の要素において特徴的な用語が検索文字列に含まれる場合には、文字列検索の対象となる。
上述するように、インデックス情報生成においてブロック分割する場合に、データサイズの大きいブロックを含まないことと、一部の文書構造を有する文書データについては上位階層の単位に併せて分割することとが、文字列検索の対象の効率的な絞り込みに寄与する。すなわち、文書構造に応じてブロック分割位置を決める判断基準の優先度の制御により、生成されるインデックス情報によるファイル絞り込みのノイズを抑制する。
ちなみに、複数の子要素を含む親要素が1つしかないなど、小説などの文書構造においては、ブロック分割しても、分割されたブロック同士で、共通の単語を用いられることが考えられる。しかしながら、ブロック分割しておくことで、ブロック同士で共通でない単語の検索が行なわれる場合にも、文字列検索による読出し量が抑制される。
図2Aに示す文書データの階層構造を、1つの要素に所定数以上の子要素が存在する例として用いた。例えば、広辞苑第五版(1998)においては、頭文字が「し」の単語数は15921、頭文字が「か」の単語数が13895である。また、「ぬ」、「る」、「を」、「ん」などを頭文字とする単語は少ないが、頭文字が「ぬ」の単語数は662、頭文字が「る」の単語数は444、頭文字が「を」の単語数は6、頭文字が「ん」の単語数は8である。「を」や「ん」を除くと、それぞれの頭文字を親要素として、それぞれの子要素が444以上存在している。
一方、例えば、Hadoop第2版(Tom White著、2011)においては、第12章と第15章において、第8節まで存在している程度である。この例においては、1つの親要素に対して子要素の数は8以下である。
上述の例であれば、文書構造を判断するのに用いる所定数は、例えば、「10」でも「100」でもよい。所定数が「10」だとすると、1つの要素に10以上の子要素が存在する場合に、その子要素の階層でブロック分割を行なうように制御される。
同様の階層構造の違いは、データベースにおいても存在する。データベースにおいてもレコード単位やページ単位に対して、それぞれの文字情報の存否を示すインデックス情報が検索に用いられる。レコード単位やページ単位でなく、複数のレコードまたは複数のページを含むように区切られたブロック単位に対して、それぞれの文字情報の存否を示すインデックス情報が検索に用いられてもよい。
データベースにおいても電子書籍と同様に階層構造に特徴がある。管理情報やログ情報などを蓄積するデータベースは、各事象の記録であるレコードを追加していくため、レコード単位でデータが羅列される。一方、各事象により、記録するデータのパターンが変更される場合には、それぞれの事象の記録において必要とされる情報が異なる。
例えば、顧客情報のデータベースであれば、各顧客に関して、ID、会社名、部署、担当者、住所、電話番号などの項目に対応する情報が格納されたデータベースがある。この様なデータベースは、顧客情報である各レコードが列挙される形式であり、電子辞書における辞書と類似の階層構造を有している。
例えば、製薬の治験データを格納するデータベースにおいては、1回の投与ごとに、投与の履歴情報が格納される。履歴情報には、投与時刻、投与薬剤、治験者の状態(体温など)、副作用症状などの情報を含むレコードが生成される。しかしながら、治験者の特性(治験者自身が有する疾患など)に応じて、治験者の状態を表す情報が格納される項目を設ける、もしくは、副作用に関する情報が格納される項目を設けるなど、治験者に応じてデータ構造が異なる。このように事象の特性に応じて階層が決定されるので、電子辞書における学術書に類似の階層構造を有している。また、データは、副作用が発生しなければ少量のデータで済むが、副作用が発生した場合にはデータ量が多くなる。
上述のように、データベースにおいても階層構造の特徴が異なる。そのため、電子書籍と同様に、ブロック分割を階層構造の特徴に応じて行なうことにより、文字列検索対象の絞り込みのノイズが発生することが抑制される。
図3は、第1の実施形態におけるコンピュータ1の機能ブロックの例を示す。コンピュータ1は、処理部11および記憶部12を含む。処理部11は、インデックス情報を生成し、生成したインデックス情報を用いた検索を行なう。記憶部12は、処理部11の処理に用いられる情報(例えば、検索対象となるファイル群F1〜Fnやインデックス情報など)を記憶する。
処理部11は、生成部13を含む。生成部13は、インデックス情報を生成し、記憶部12に記憶する。
図4は、生成部13の機能ブロックの例を示す。生成部13は、制御部131、読出し部132、解析部133および判定部134を含む。制御部131は、ファイルF1からファイルFnを順に指定し、指定したファイルについて、読出し部132、解析部133及び判定部134にそれぞれの処理を実行させる。読出し部132は、ファイル群F1〜Fnのうち、制御部131により指定されたファイルFiを記憶部12から読み出す。解析部133は、読出し部132が読みだしたファイルごとにファイル内の文書構造を解析する。制御部131は、解析部133の解析結果に基づいて、ファイルの分割を行なう。判定部134は、制御部131により分割されたブロック(分割されない場合はファイルそのものに相当する)ごとに、設定された文字情報群C1〜Cmのうちの各文字情報Cjについて、Cjを含むか否かを判定する。判定部134の判定結果が、文字情報Cjを含む旨を示す場合に、制御部131は、文字情報Cj及びブロックBiのファイル番号iに基づいてアドレスを算出し、算出したアドレスに示される記憶場所に、文字情報Cjを含む旨を示す情報を格納する。
図5は、ブロック番号とブロックの読み出し位置と対応関係を格納するテーブルT1の例を示す。制御部131は、分割して得られたブロックのそれぞれに番号を割り当て、ブロックの読み出し位置と、ブロック番号とを対応付けてテーブルT1に格納する。テーブルT1の情報は、後述の文字列検索部16により参照される。
図3に示す通り、処理部11は、さらに、検索制御部14、絞込部15および文字列検索部16を含む。検索制御部14は、絞込部15と文字列検索部16とを制御することにより、検索要求に応じた検索処理を行なう。絞込部15は、生成部13により生成されるインデックス情報を用いて、検索対象ファイルの絞り込みを行なう。例えば、検索制御部14が、受け付けた検索要求に含まれる検索文字列から文字情報Caを抽出して、抽出された文字情報Caを絞込部15に通知する。絞込部15は、ブロック群B1〜Bpのうち、検索制御部14に通知された文字情報Caを含まないファイルを除いたブロックのブロック番号を検索制御部14に通知する。文字列検索部16は、絞込部15により絞り込まれたブロックについて、テーブルT1に格納された読み出し位置からブロックのデータを読み出し、検索制御部14が受け付けた検索要求に基づく文字列検索を行なう。
図6は、絞込部15の機能ブロックの例を示す。絞込部15は、参照部151および判定部152を含む。参照部151は、記憶部12に記憶されたインデックス情報のうち、検索制御部14から通知された文字情報Caに対応する部分を読み出す。文字情報Caに対応する部分を示すアドレスは、文字情報Caに応じて算出される。例えば、参照部151は、文字情報Caに基づいてアドレスを算出し、そのアドレスに対応するビット列を読み出す。判定部152は、参照部151が読み出したビット列に基づいて、文字情報Caを含まないブロックを判定し、ブロック群B1〜Bpのなかで文字情報Caを含まないブロックを除いてブロック番号を文字列検索部16に通知する。
検索制御部14は、検索文字列から複数の文字情報(例えば文字情報Ca、文字情報Cb)を抽出してもよい。すると、参照部151は、複数の文字情報Ca,Cbのそれぞれについて、インデックス情報の対応するビット列を読み出す。また、判定部152は、文字情報Caに対応するビット列に含まれる存否情報と、文字情報Cbに対応するビット列に含まれる存否情報との論理積(AND)を算出し、その算出結果に基づいて各ファイルにおける文字情報Ca,Cbの存否を判定する。文字情報Ca,Cbのいずれかが含まれないと判断されたファイルのファイル番号は、文字列検索部16に通知しない。
図7は、コンピュータ1のハードウェア構成例を示す。図3、4及び6に示す各機能ブロックは、例えば、図7に示すハードウェア構成により実現される。コンピュータ1は、例えば、プロセッサ301、RAM(Random Access Memory)302、ROM(Read Only Memory)303、ドライブ装置304、記憶媒体305、入力インターフェース(I/F)306、入力デバイス307、出力インターフェース(I/F)308、出力デバイス309、通信インターフェース(I/F)310などを含む。それぞれのハードウェアはバス311を介して接続されている。通信I/F310はネットワーク4を介した通信の制御を行なう。入力インターフェース306は、入力デバイス307と接続されており、入力デバイス307から受信した入力信号をプロセッサ301に伝達する。出力インターフェース308は、出力デバイス309と接続されており、出力デバイス309に、プロセッサ301の指示に応じた出力を実行させる。
RAM302は読み書き可能なメモリ装置であって、例えば、SRAM(Static RAM)やDRAM(Dynamic RAM)などの半導体メモリ、またはRAMでなくてもフラッシュメモリなどが用いられる。ROM303は、PROM(Programmable ROM)なども含む。ドライブ装置304は、記憶媒体305に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体305は、ドライブ装置304によって書き込まれた情報を記憶する。記憶媒体305は、例えば、ハードディスク、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ1は、複数種類の記憶媒体それぞれについて、ドライブ装置304及び記憶媒体305を設ける。
入力デバイス307は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ1の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス309は、コンピュータ1の制御に応じて情報を出力する装置である。出力デバイス309は、例えば、ディスプレイなどの画像出力装置(表示デバイス)や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス307及び出力デバイス309として用いられる。
また、記憶媒体305に記憶される情報は、ネットワーク4を介して接続されたコンピュータ2に制御される記憶装置3に記憶されてもよい。その場合には、記憶装置3に記憶された情報を、プロセッサ301が通信インターフェース310を介して取得することで、読出し部132や文字列検索部16などによるブロックの読み出しが行なわれる。
プロセッサ301は、ROM303や記憶媒体305に記憶されたプログラムをRAM302に読み出し、読み出されたプログラムの手順に従って処理部11の処理を行なう。その際にRAM302はプロセッサ301のワークエリアとして用いられる。記憶部12の機能は、ROM303および記憶媒体305がプログラムやファイル群F1〜Fnを記憶し、RAM302がプロセッサ301のワークエリアとして用いられることによって実現される。プロセッサ301が読み出すプログラムについては、図8を用いて説明する。
図8は、コンピュータ1で動作するソフトウェアの構成例を示す。コンピュータ1において、図7に示すハードウェア群21の制御を行なうOS22(オペレーションシステム)が動作する。OS22に従った手順でプロセッサ301が動作して、ハードウェア21の制御・管理が行なわれることにより、アプリケーションプログラムやミドルウェアによる処理がハードウェア21により実行される。さらに、コンピュータ1において、例えば、インデックス生成プログラム23aや検索処理プログラム23bなどが、RAM302に読み出されてプロセッサ301により実行される。また、プロセッサ301がインデックス生成プログラム23aに基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア21を制御して)生成部13の機能が実現される。さらに、プロセッサ301が検索処理プログラム23bに基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア21を制御して)検索制御部14、絞込部15および文字列検索部16の機能が実現される。図8にはインデックス生成プログラム23aと検索処理プログラム23bとが別のプログラムとして示されているが、両プログラムを併せて1つのプログラムとしてもよい。
図9は、インデックス生成の処理手順例を示す。インデックス生成プログラム23aが起動される(S100)と、制御部131は、前処理を行なう(S101)。S101の前処理は、例えば、検索対象ファイル群F1〜Fnのファイルパスのリストや文字情報群C1〜Cmを記憶部12に読み出す処理などである。制御部131は、インデックス情報の生成が要求されるか否かを判断し(S102)、インデックス情報の生成が要求されるまで繰り返し判断を行なう(S102:NO)。インデックス情報の生成が要求される(S102:YES)と、制御部131は、インデックス情報を記憶する記憶領域を確保する(S103)。例えば、S103において確保された記憶領域内の各ビットは「0」にセットしておく。
読出し部132は、ファイルパスのリストを参照し、検索対象ファイル群F1〜Fnを読み出し、解析部133は、読み出されたファイルのそれぞれについて文書構造を解析する処理を行なう(S104)。制御部131は、解析部133の文書構造の解析結果に応じて、ファイルを分割し、分割により得られたブロックについて、ブロック番号とブロックの読み出し位置を示す情報とを図5に示すテーブルT1に格納する(S105)。S104及びS105の詳細な処理については後述する。
制御部131は、図5に示すテーブルT1から、ブロック番号iを選択し、選択したブロック番号iのブロックBiを読出し部132に読み出させる(S106)。例えば、S106において、制御部131は、テーブルT1内のレコードをブロック番号順に選択する。次に、判定部134は、文字情報C1〜Cmのうちの1つの文字情報Cjを選択する(S107)。例えば、S107において、記憶部12が保持する文字情報C1〜Cmのリストから、判定部134が文字情報を順に選択してもよいし、所定の数値範囲内で文字コードをインクリメントすることにより、文字情報を順に生成してもよい。判定部134は、ブロックBiが文字情報Cjを含むか否か判定する(S108)。ブロックBiが文字情報Cjを含むと判定した場合(S108:YES)は、制御部131は、ブロック番号iと文字情報Cjに基づいてアドレスを算出する。制御部131は、算出したアドレスに対応する位置のビットを「1」に更新する(S109)。すなわち、制御部131は、算出したアドレスに対応する位置のビットと、「1」との論理和(OR)演算の結果を、算出したアドレスに対応する位置に格納する。例えば、文字情報Cjのバイナリコードを所定のハッシュ関数に代入して得られる値に対応するビット列のi番目のビットを「1」とする。制御部131によりビットの更新が行なわれると、判定部134はS110の処理を行なう。判定部134によりブロックBiが文字情報Cjを含まないと判定された場合(S108:NO)は、判定部134は、S110の処理を行なう。文字情報C1〜Cmのなかで、未選択の文字情報が存在する場合には、判定部134は、再度S107の処理を行なう(S110)。文字情報C1〜Cmのなかで未選択の文字情報が存在しない場合には、S111の処理が行なわれる。S111では、ブロック群B1〜Bpのなかで未選択のファイルがあれば、読出し部132がS106の処理を再度行なう。また、ブロック群B1〜Bpのなかで未選択のファイルがなければ、S112の処理が行なわれる。
制御部131は、ファイル群F1〜Fnのインデックス情報の生成処理が完了した旨の通知を行なう(S112)。S112において、制御部131は、さらに、S103で確保した領域内の情報をインデックスファイルとして保存する。S112の処理後、終了指示を受けていたか否か判定する(S113)。終了指示を受けていた場合(S113:YES)は、処理部11は、インデックス生成プログラム23aを終了する(S114)。終了指示を受けていない場合(S113:NO)には、S102の処理を再度行なう。
次にS104の文書構造解析処理について説明する。図10A及び図10Bは、文書構造解析処理の処理手順例を示す。文書構造解析処理では、各ファイルについて、ファイル内に含まれる各文書要素が有する子要素の数の計数を行なう。
文書構造解析処理が行われる(S200)と、制御部131はファイルF1〜Fnから順にファイルを選択し、読出し部132は選択されたファイルFiを読み出す(S201)。解析部133は、ファイルFiから順にタグ情報を読み出す(S202)。解析部133は、S202で読み出したタグ情報が</body>タグであるかを判定する(S203)。S202で読み出したタグ情報が</body>タグである場合(S203:YES)には、解析部133は、ファイルFiについて作成した文書構造テーブルを記憶部12に格納する(S204)。解析部133は、文書構造解析処理が行われていないファイルがあれば、S201の処理を行ない、文書構造解析処理が行われていないファイルがなければ、文書構造解析処理を終了し(S206)、S105の処理を行なう(S205)。
S202で読み出したタグ情報が</body>タグでない場合(S203:NO)には、S202で読み出したタグ情報が文書構造の階層を示すタグ情報であるか否かを判定する(S207)。文書構造の階層を示すタグ情報とは、例えば、<body>、<h1>、<h2>…などである。S202で読み出したタグ情報が、階層を示すタグ情報でない場合(S207:NO)には、再度S202の処理が行われる。
S202で読み出したタグ情報が階層を示すタグ情報である場合(S207:YES)には、解析部133は、読み出したタグ情報が開始を示すタグ情報であるか否かを判定する(S208)。開始を示すタグ情報とは、例えば、<body>タグでいえば、<body>が開始を示し、</body>が終了である。例えば、<h1>については、<h1>が開始を示し、</h1>は終了を示す。S202で読み出したタグ情報が開始を示すタグでない場合(S208:NO)には、解析部133は、後述する子要素数計数の終了フラグをセットする(S214)。
S202で読み出したタグ情報が開始を示すタグである(S208:YES)場合に、解析部133は、文書構造テーブルT2にレコードを生成する(S209)。各ファイルについての初回には、解析部133は、文書構造テーブルT2の格納領域を確保する。S209において、解析部133は、新しいタグIDを生成して、生成したタグIDを文書構造テーブルのタグID項目に格納する。例えば、タグIDは前回に生成したIDの値をインクリメントして生成される。
図11は、文書構造テーブルT2を示す。文書構造テーブルT2は、タグID,階層数、子要素数及びフラグの項目を含む。タグIDの項目には、文書内に含まれるタグ情報に割り当てられるIDが格納される。階層数は、タグ情報が示す階層の数が格納される。子要素数は、タグ情報が有する子要素の数が格納される。また、フラグは、文書構造テーブルに格納されたタグ情報についての子要素の数の計数が終了したか否かを示すフラグである。文書構造テーブルT2は、ファイルF1〜Fnのそれぞれについて生成される。
解析部133は、文書構造テーブルT2にレコードを生成すると、生成したレコードの階層数の項目に、読み出しタグ情報に示す階層数を格納する(S210)。読み出したタグ情報が、例えば、<body>であれば階層数は0であり、<h1>であれば階層数は1であり、<h2>であれば階層数は2であり、<h3>であれば階層数は3である。次に、解析部133は、階層数を計数する(S211〜S213)。解析部133は、読み出したタグ情報の階層数から1引いた数をjとして、S212の処理を行なう。S212の処理を行なうと、jから1を引いた数をjとして、さらにS212の処理を繰り返す。この処理は、jが0になるまで繰り返し行なう。S212において、解析部133は、文書構造テーブルT2のレコードのうち、階層数がjのレコードを、S209で生成したレコードからタグIDが小さくなる方向に探索して抽出する。解析部133は、抽出したレコードの子要素数の項目の値をインクリメントして生成する。S211〜S213の処理を終えると、解析部133は、再度S202の処理を行なう。
次にS105のファイル分割処理について説明する。図12A及び図12Bは、ファイル分割処理の処理手順例を示す。ファイル分割処理において、判定部134は、各ファイルから読み出したデータが所定のデータサイズを超えるか否かを判定する。
ファイル分割処理が開始される(S300)と、制御部131は、ファイルF1〜Fnのいずれかを選択する(S301)。すなわち、1〜nのうちの1つを選択する。制御部131は、S301で選択したファイルに対応する文書構造テーブルT2を読み出す(S302)。次に、判定部134は、読み出した文書構造テーブルT2に子要素数が所定数以上であるレコードを抽出する(S303)。文書構造テーブルT2に子要素数が所定数以上であるレコードが存在する場合(S303:YES)に、子要素数が所定数以上であるレコードのうちの階層数がもっとも小さいレコードの階層数を選択する(S304)。また、所定数以上の子要素が存在しない場合(S303:NO)には、階層数に0を選択する(S305)。
次に、判定部134は、ファイルFiから、選択された階層数を示す要素を読み出す。さらに、判定部134は、読み出した要素のデータ量を計数する(S306)。例えば、判定部134は、選択された階層数が階層数の項目に格納されたレコードを、文書構造テーブルT2から順に抽出する。S306で、判定部134は、抽出したレコードに示されるタグ情報から、対応する終了タグまでのデータをファイルFiから読み出す。
次に、判定部134は、S306で読み出したデータ量が第1の所定値よりも小さいか否かを判定する(S307)。S306で読み出したデータ量が第1の所定値よりも小さい場合(S307:YES)は、ファイルFi内に読み出していないデータがあるか否かを判定する(S308)。
ファイルFi内に読み出していないデータがある場合(S308:YES)に、判定部134は、積算値SにS306で計数したデータ量を加算する(S309)。各ファイルにおいて、積算値は0である。判定部134は、積算値が第2の所定値よりも大きいか否かを判定する(S310)。積算値が第2の所定値よりも大きくない場合(S310:NO)には、判定部134は、S306の処理を再度行なう。積算値が第2の所定値よりも大きい場合(S310:YES)に、S306でデータを読み出した際の読出し終了位置を、図5に示すテーブルT1に格納する(S311)。例えば、ファイルFiからデータ読み出しを開始して、1回目に積算値が第2の所定値を超えた場合には、ファイルFiの2番目のブロックの読出し位置としてテーブルT1に読出し位置を記憶する。さらに、判定部134は、積算値をクリアする(S312)。さらに、S312の処理を終えると、判定部134は、S306の処理を再度行なう。
第2の所定値は、例えば、第1の所定値よりも小さい値を用いる。先述の通り、上位の階層の要素でブロック分割できた方が、絞込みノイズが発生しにくいと考えられるので、データサイズが多少大きくなっても、上位階層の要素でブロック分割するメリットがあるためである。
S306で読み出したデータ量が第1の所定値よりも小さくない場合(S307:NO)は、S306のデータ読出しの直前の読み出し位置をテーブルT1に記憶する(S317)。さらに、判定部134は、データを読み出す単位を決定する階層数をインクリメントする(S318)。これにより、判定部134は、より細かい単位でファイルをブロック単位に分割できる。次に、判定部134は、S318で決定された階層数に基づいて、ファイルFiからデータを読出し、データ量を計数する(S319)。また、判定部317は、S319で読み出したデータ量が第1の所定値より小さいか否かを判定する(S320)。S319で読み出したデータ量が第1の所定値より小さくない場合(S320:NO)には、判定部134は、再度S318を行なう。
S319で読み出したデータ量が第1の所定値より小さい場合(S320:YES)には、判定部134は、S318で選択された階層数の1つ上の階層(階層数−1)のデータ(直前のS306読み出したデータなど)がS318で選択された階層数ですべて読み出された否かを判定する(S321)。S321ですべて読み出したと判定された場合(S321:YES)には、判定部134は、S309の処理を行なう(S322)。判定部134は、S310と同様の判定を行ない(S323)、S323でYESと判定される(S323:YES)と、S311及びS312と同様の処理を行なって(S324及びS325)、再度、S319の処理を行なう。S323でNOと判定された場合(S323:NO)に、判定部134は、S319の処理を行なう。
S321でまだ読み出されていないと判定された(S321:NO)場合には、判定部134はS311及びS312と同様の処理を行なう(S326及びS327)。次に、判定部134は、選択する階層数をデクリメントする(S328)。判定部134は、選択される階層数が0、または、S304で選択された階層数であるか否かは判定する(S329)。S329の判定において、選択される階層数が0、または、S304で選択された階層数である場合(S329:YES)には、判定部134は、S306の処理を再度行なう。S329の判定において、いずれも満たされない場合(S329:NO)には、判定部134は、S319の処理を再度行なう。
ファイルFi内に読み出していないデータがなくなった場合(S308:NO)には、判定部134は、積算値をクリアする(S313)。ファイルFiがファイルFnでなければ、生成部13は、S301から再度処理を行なう(S314)。ファイルFiがファイルFnである場合には、ファイルF1〜Fnを分割して得られたブロックの総数をpとする(S315)。さらに、生成部13は、S106の処理を行なう(S316)。
ちなみに、例えば、S307でNOと判定した場合や、S310でYESと判定した場合には、読出し位置を、直線に句点を読み出した読出し位置まで戻すこととしてもよい。すると、ブロックに分割された場合の境目が分の途中となることが回避される。さらに、例えば、読出し位置が、直前の改行まで戻されることとしてもよい。
図13は、全文検索の処理手順例を示す。検索処理プログラム23が起動される(S400)と、検索制御部14は、前処理を行なう(S401)。S401の前処理は、図5に示すテーブルT1の読出しや、インデックス情報の読出しである。検索制御部14は、検索要求を受けたか否かを判断し(S402)、検索要求を受けるまでS402の判断を繰り返す(S402:NO)。検索要求を受けた場合(S402:YES)には、インデックス参照処理が実行される(S403)。
図14は、インデックス情報の参照処理手順の例を示す。S403が実行される(S500)と、検索制御部14は、検索要求に含まれる検索文字列を取り出し、文字情報C1〜Cmのうちの検索文字列に含まれる文字情報Ca,Cb,・・・を抽出する(S501)。
絞込部15は、検索制御部14が文字情報Ca,Cb,・・・を抽出すると、ブロック群B1〜Bpのそれぞれについて、抽出された文字情報Ca,Cb,・・・のいずれか1つでも含まないブロックであるかどうかを判断する。具体的には、まず、抽出された文字情報のうちの1つを選択する(S502)。参照部151は、選択された文字情報に基づいてアドレスを算出し、算出されたアドレスに示される位置に格納された情報を読み出す(S503)。S503において、参照部151は、S109と同様の演算によりアドレスを算出する。その際に、例えば、参照部151は、選択された文字情報のバイナリコードを所定のハッシュ関数に代入して得られる値に対応するビット列を読み出す。絞込部15は、抽出された文字情報Ca,Cb,・・・のなかに未選択の文字情報がある場合には、S502の処理を再度行ない、抽出された文字情報Ca,Cb,・・・に未選択の文字情報がない場合には、インデックス参照処理を終了する(S504,S505)。
インデックス参照処理が終了すると、絞込部15は、検索対象のブロックのブロック番号を抽出する(S404)。S404において、例えば、判定部152は、文字情報Ca,Cb,・・・のそれぞれについて参照部151により読み出されたビット列同士の論理積(AND)を算出する。判定部152は、算出されたビット列において「1」であるビットが何番目であるかを示す番号を生成する。例えば、判定部152は、算出されたビット列において、x番目のビットとy番目のビットが「1」であれば、x,yを生成する。
検索制御部14は、判定部152により生成された番号x,y,・・・のいずれかである番号iを選択する(S405)。文字列検索部16は、選択された番号iがブロック番号であるブロックBiを読み出す(S406)。文字列検索部16は、図5に示すテーブルT1においてブロック番号iと対応づけられた読出し位置からブロックを読み出す。文字列検索部16は、読み出したブロックBiを検索文字列で検索する(S407)。例えば、文字列検索部16は、ブロックBi内に検索文字列と一致する文字列を検出した場合には、一致した文字列のブロックBi内の位置を示す情報を生成し、ブロックBiのブロック番号iと関連付けて記憶部12に記憶する(図15参照)。例えば、検索文字列と照合を行なったデータの量をカウントするカウンタを予め設けておき、文字列の一致を検出した際のカウンタの値を、ファイル内の位置を示す情報とする。
図15は、検索結果を格納する テーブルの例を示す。図15に示すテーブルT2は、検索文字列と一致する文字列が存在した位置を示すレコードを含む。検索文字列と一致する文字列の位置は、例えば、文字列が含まれるブロックの番号と、各ブロックの文字情報を読み出すたびにインクリメントされるカウンタの値とで示される。カウンタの値は、例えば、一致検出時に読出される。
S407の処理後、検索制御部14は、判定部152により生成された番号x,y,・・・のなかで未選択の番号があればS405の処理を行なう(S408)。検索制御部14は、判定部152により生成された番号x,y,・・・のなかに未選択の番号がない場合には、S409の処理を行なう。
検索制御部14は、検索結果の出力処理を行なう(S409)。例えば、S407の処理で図15に示すテーブルT2に格納された情報に示される位置の近傍の文字列を抽出して、抽出した文字列を、ブロック番号に対応するファイルのファイル名などと併せて表示デバイスに表示させるなどの処理を行なう。
S409処理後に、処理部11は、終了の指示があったか否かを判断する(S410)。終了の指示がない場合(S410:NO)には、検索制御部14はS402の処理を行なう。終了の指示があった場合(S410:YES)には、処理部11は、検索処理プログラム22bを終了させる(S411)。
1 コンピュータ
2 コンピュータ
3 記憶装置
4 ネットワーク
11 処理部
12 記憶部
13 生成部
14 検索制御部
15 絞込部
16 文字列検索部
131 制御部
132 読出し部
133 解析部
134 判定部
151 参照部
152 判定部

Claims (8)

  1. コンピュータに、
    文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、
    前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、
    分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、
    処理を実行させることを特徴とする生成プログラム。
  2. 前記コンピュータに、
    前記文書要素又は前記文書要素よりも上位の文書要素の階層の文書要素のデータサイズが所定値よりも大きい場合には、さらに1階層下位の文書要素ごとに前記制御を実行させる、
    処理を実行させることを特徴とする請求項1に記載の生成プログラム。
  3. 前記文書ファイルに含まれる各文書要素は、前記文書ファイルに含まれるタグの開始タグから終了タグの範囲に含まれる文字情報群である、
    ことを特徴とする請求項1または請求項2に記載の生成プログラム。
  4. コンピュータに、
    文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、
    前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、
    分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、
    処理を実行させることを特徴とする生成方法。
  5. 文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかを切り換え、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割する分割部と、
    分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する生成部と、
    を含むことを特徴とする生成装置。
  6. コンピュータに、
    検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、
    前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、
    特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、
    処理を実行させることを特徴とする検索プログラム。
  7. コンピュータに、
    検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、
    前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、
    特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、
    処理を実行させることを特徴とする検索方法。
  8. 検索文字列を受け付ける受付部と、
    前記受付部が受け付けた前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を記憶する記憶部と、
    前記記憶部に記憶された前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定する絞込部と、
    特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう検索部と、
    を含むことを特徴とする検索装置。
JP2014518093A 2012-05-31 2012-05-31 インデックス生成プログラム及び検索プログラム Active JP5880699B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/003592 WO2013179348A1 (ja) 2012-05-31 2012-05-31 インデックス生成プログラム及び検索プログラム

Publications (2)

Publication Number Publication Date
JPWO2013179348A1 true JPWO2013179348A1 (ja) 2016-01-14
JP5880699B2 JP5880699B2 (ja) 2016-03-09

Family

ID=49672607

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014518093A Active JP5880699B2 (ja) 2012-05-31 2012-05-31 インデックス生成プログラム及び検索プログラム

Country Status (5)

Country Link
US (1) US20150088944A1 (ja)
EP (1) EP2857986A4 (ja)
JP (1) JP5880699B2 (ja)
CN (1) CN104380286A (ja)
WO (1) WO2013179348A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6209098B2 (ja) * 2014-02-07 2017-10-04 富士通株式会社 データ管理プログラム、データ管理方法、及びデータ管理システム
US10394870B2 (en) * 2014-06-30 2019-08-27 Hitachi, Ltd. Search method
CN105844726B (zh) * 2016-03-18 2018-04-17 吉林大学 一种手写签名签到管理***
EP3608800A4 (en) * 2017-04-06 2020-04-01 Fujitsu Limited INDEX GENERATION PROGRAM, INDEX GENERATION DEVICE, INDEX GENERATION METHOD, SEARCH PROGRAM, SEARCH DEVICE, AND SEARCH METHOD
JP6911877B2 (ja) * 2018-02-19 2021-07-28 日本電信電話株式会社 情報管理装置、情報管理方法及び情報管理プログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06290217A (ja) * 1993-03-31 1994-10-18 Ricoh Co Ltd 文書検索方式
JPH08147311A (ja) * 1994-11-17 1996-06-07 Hitachi Ltd 構造化文書検索方法及び装置
JPH08314966A (ja) * 1995-05-19 1996-11-29 Toshiba Corp 文書検索装置のインデックス作成方法及び文書検索装置
JPH08329116A (ja) * 1995-06-05 1996-12-13 Hitachi Ltd 構造化文書検索方法

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5438657A (en) * 1992-04-24 1995-08-01 Casio Computer Co., Ltd. Document processing apparatus for extracting a format from one document and using the extracted format to automatically edit another document
JP2758826B2 (ja) * 1994-03-02 1998-05-28 株式会社リコー 文書検索装置
JP3520554B2 (ja) * 1994-03-11 2004-04-19 ヤマハ株式会社 ディジタルデータ再生方法及び装置
JPH08241325A (ja) * 1995-03-03 1996-09-17 Matsushita Electric Ind Co Ltd 電子辞書及びその製造方法並びにインデックス圧縮・伸長装置
JP3160201B2 (ja) * 1996-03-25 2001-04-25 インターナショナル・ビジネス・マシーンズ・コーポレ−ション 情報検索方法、情報検索装置
US5774715A (en) * 1996-03-27 1998-06-30 Sun Microsystems, Inc. File system level compression using holes
CA2242158C (en) * 1997-07-01 2004-06-01 Hitachi, Ltd. Method and apparatus for searching and displaying structured document
US6704753B1 (en) * 1998-01-29 2004-03-09 International Business Machines Corporation Method of storage management in document databases
US20020129006A1 (en) * 2001-02-16 2002-09-12 David Emmett System and method for modifying a document format
US7248737B2 (en) * 2001-10-02 2007-07-24 Siemens Corporate Research, Inc. Page decomposition using local orthogonal transforms and a map optimization
JP4322031B2 (ja) * 2003-03-27 2009-08-26 株式会社日立製作所 記憶装置
US7366837B2 (en) * 2003-11-24 2008-04-29 Network Appliance, Inc. Data placement technique for striping data containers across volumes of a storage system cluster
JP4314204B2 (ja) * 2005-03-11 2009-08-12 株式会社東芝 文書管理方法、システム及びプログラム
US7797310B2 (en) * 2006-10-16 2010-09-14 Oracle International Corporation Technique to estimate the cost of streaming evaluation of XPaths
US8412677B2 (en) * 2008-11-26 2013-04-02 Commvault Systems, Inc. Systems and methods for byte-level or quasi byte-level single instancing
CN102741838B (zh) * 2009-10-02 2017-05-03 A·穆苏卢里 块分割、识别与索引视觉元素及搜索文档的***与方法
JP5083367B2 (ja) * 2010-04-27 2012-11-28 カシオ計算機株式会社 検索装置、検索方法、ならびに、コンピュータプログラム
US9501661B2 (en) * 2014-06-10 2016-11-22 Salesforce.Com, Inc. Systems and methods for implementing an encrypted search index

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06290217A (ja) * 1993-03-31 1994-10-18 Ricoh Co Ltd 文書検索方式
JPH08147311A (ja) * 1994-11-17 1996-06-07 Hitachi Ltd 構造化文書検索方法及び装置
JPH08314966A (ja) * 1995-05-19 1996-11-29 Toshiba Corp 文書検索装置のインデックス作成方法及び文書検索装置
JPH08329116A (ja) * 1995-06-05 1996-12-13 Hitachi Ltd 構造化文書検索方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6015052912; 栗田 裕人、外4名: '大規模XMLデータに対する分散問合せ処理の効率化' 情報処理学会研究報告 第2006巻,第33号, 20060322, p.23-30, 社団法人情報処理学会 *

Also Published As

Publication number Publication date
US20150088944A1 (en) 2015-03-26
EP2857986A1 (en) 2015-04-08
CN104380286A (zh) 2015-02-25
EP2857986A4 (en) 2015-10-14
WO2013179348A1 (ja) 2013-12-05
JP5880699B2 (ja) 2016-03-09

Similar Documents

Publication Publication Date Title
JP5880699B2 (ja) インデックス生成プログラム及び検索プログラム
JP6002159B2 (ja) 電子文書の検索方法及び電子文書検索のグラフィカル表示方法
JP5512489B2 (ja) ファイル管理装置及びファイル管理方法
JP5229226B2 (ja) 情報共有システム、情報共有方法、および情報共有プログラム
US20170177180A1 (en) Dynamic Highlighting of Text in Electronic Documents
JP2005285127A5 (ja)
JP2010009469A (ja) ファイル管理装置
JP5836893B2 (ja) ファイル管理装置、ファイル管理方法、及びプログラム
WO2014006851A1 (ja) 匿名化装置、匿名化システム、匿名化方法、及び、プログラム記録媒体
JP6163854B2 (ja) 検索制御装置、検索制御方法、生成装置および生成方法
JP6028392B2 (ja) 生成プログラム、生成方法、生成装置、検索プログラム、検索方法および検索装置
JP4900475B2 (ja) 電子文書管理装置及び電子文書管理プログラム
JP5950522B2 (ja) 文書リストの表示のための装置、方法及びプログラム
JP6753190B2 (ja) 文書検索装置及びプログラム
CN117290302B (zh) 目录分离方法、装置、计算机设备和存储介质
KR101545216B1 (ko) 데이터 모델링 방법 및 장치
CN112988668B (zh) 基于PostgreSQL的流式文档处理方法、装置以及装置的应用方法
JP5903171B2 (ja) データ加工システムおよびデータ加工方法
JP6028393B2 (ja) 照合プログラム、照合方法および照合装置
JP2022150482A (ja) データ検索装置、データ検索方法及びデータ検索プログラム
JP2024018742A (ja) 効率的な文書閲覧のための仮想フォルダに関する生成方法、コンピュータシステム、コンピュータ装置、及びコンピュータプログラム
JP2022126229A (ja) 将来事象推定システム、および将来事象推定方法
KR20160013482A (ko) 큐브 매트릭스 컨텐츠 생성방법 및 이를 응용한 문서작성 지원시스템
JP2015162170A (ja) 情報処理装置、及び制御方法
JP5662300B2 (ja) 階層型項目選択装置及び方法及びプログラム

Legal Events

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160118

R150 Certificate of patent or registration of utility model

Ref document number: 5880699

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150