JP5223380B2 - 評価方法および検索装置 - Google Patents

評価方法および検索装置 Download PDF

Info

Publication number
JP5223380B2
JP5223380B2 JP2008052584A JP2008052584A JP5223380B2 JP 5223380 B2 JP5223380 B2 JP 5223380B2 JP 2008052584 A JP2008052584 A JP 2008052584A JP 2008052584 A JP2008052584 A JP 2008052584A JP 5223380 B2 JP5223380 B2 JP 5223380B2
Authority
JP
Japan
Prior art keywords
logical
variable
calculation cost
evaluation
expression
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
JP2008052584A
Other languages
English (en)
Other versions
JP2009211312A (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 JP2008052584A priority Critical patent/JP5223380B2/ja
Publication of JP2009211312A publication Critical patent/JP2009211312A/ja
Application granted granted Critical
Publication of JP5223380B2 publication Critical patent/JP5223380B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

この発明は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法等に関するものである。
近年、XML(Extensible Markup Language)等のマークアップ言語によって文書データ(以下、XMLデータと表記する)が作成され、各種のコンピュータで利用されている。XMLは、異なるシステム間であっても、インターネット等を介して、構造化された文書や構造化されたデータの供給を容易にすることが出来るため、ますます多用されている。
そして、XMLデータの特定の照合位置を指定するものとして、検索クエリが用いられる。この検索クエリは、XMLデータのための標準クエリ言語であり、XMLデータの複雑な木構造に対して検索式を記述する能力を持つ。
また、近年では、検索クエリの論理式の評価式を簡易にすることで、検索クエリによるデータ検索処理の負荷等を軽減させる技術が考案されている(例えば、特許文献1)。この特許文献1では、検索クエリの論理式のノードの数を少なくするBDD(Binary Decision Diagrams)手法をベースとして、さらに、論理式の最終判断に影響しないノード(ドントケア条件を満たすノード)部分を削除することで、手順の簡略化を図っている。
特公平07−120365号公報
しかしながら、上述した周知技術(例えば、特許文献1)のように、BDD手法をより向上させて論理式のノードの数を減らしたとしても、論理式に含まれる各論理変数の真偽結果を計算する場合の計算コストを評価していないため、必ずしも検索処理を高速化することが出来ないという問題があった。
すなわち、周知の技術では、論理式のノードの数が少ない場合であっても、個々の論理式に含まれる論理変数の計算コストが高い場合があり、そのような場合には、真偽結果を計算する処理が重くなるので、検索処理の高速化を妨げてしまう。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、評価式の真偽結果にかかる計算コストを評価して検索クエリによる検索処理を高速化することが出来る評価方法および検索装置を提供することを目的とする。
上述した課題を解決し、目的を達成するため、この評価方法は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法であって、前記検索装置は、前記論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定ステップと、前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定ステップと、前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価ステップと、を含んだことを要件とする。
また、この評価方法は、上記の評価方法において、前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算ステップを更に含んだことを要件とする。
また、この評価方法は、上記の評価方法において、前記計算コスト判定ステップは、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを要件とする。
また、この評価方法は、上記の評価方法において、前記優先順位決定ステップは、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを要件とする。
また、この検索装置は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、前記論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定手段と、前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定手段と、前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価手段と、を備えたことを要件とする。
この評価方法によれば、検索クエリを取得した場合に、論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数(第1論理変数)と計算コストの少ない論理変数(第2論理変数)とを判定し、計算コストの少ない論理変数が計算コストの大きい論理変数よりも前になるように、検索クエリに含まれる論理変数の評価順序の優先順位を変換し、変換した検索クエリに基づいて計算コストの少ない論理変数を含む条件式から先に評価するので、検索クエリによる検索処理を高速化することが可能となる。
すなわち、第2論理変数が第1論理変数の前に配置される場合と、第2論理変数が第1論理変数の後ろに配置される場合とを比較すると、第2論理変数が第1論理変数の前に配置される方が第1論理変数の論理値が必要となる機会が少なくなるので、結果的に、計算コストの大きい論理値を算出すべき回数が減り、検索クエリによる検索処理を高速化することが出来る。
また、この評価方法によれば、計算コストの少ない論理変数の論理値のみを予め算出しておき、必要に応じて計算コストの大きい論理変数の論理値を算出するので、計算コストの大きい論理変数の論理値を算出すべき回数を減らし、検索処理の負荷を軽減させることが出来る。
また、この評価方法によれば、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定するので、論理変数の計算コストが大きいか否かを的確に判定することが出来る。
また、この評価方法によれば、逆ポーランド表記を利用することにより、検索クエリに含まれる論理変数の評価順序の優先順位を変換するので、括弧が不要となり、コンピュータが単純なスタック構造を構築するだけで演算が出来る。
以下に添付図面を参照して、この発明に係る評価方法および検索装置の好適な実施の形態を詳細に説明する。
まず、周知技術のBDD(Binary Decision Diagrams)法について説明する。このBDD法は、論理変数の入力順序(この入力順序が、論理変数の評価順序の優先順位となる)を定義することにより、検索クエリに含まれる論理式を2分木で表現し、評価する手法である。図1は、周知技術のBDD法を説明するための図である。
例えば、論理式「a and b or c and d」をそのまま2分木で表現すると、2分木20のように表現することが出来る。図1に示すように、この2分木20は、論理式の論理変数「a〜d」に対応するノード「A〜D」によって構成されている。なお、2分木20は、レベルテーブル20aおよび遷移テーブル20bによって定義される。
レベルテーブル20aは、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、ノードテーブル20aの1段目では、ノード「D」のレベルが「0」であり、ノード「D」に対応する論理変数が「d」である旨の情報が登録されている。そして、各ノードに割り当てられたレベルが、すなわち、入力順序となっている。
遷移テーブル20bは、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、遷移テーブル20bの1段目では、ノード「D」の論理値が「0」である場合に、ノード「B」に遷移する旨の情報が登録されている。
そして、論理変数a〜dの論理値が、論理値テーブル10aのように既に計算されているものとすれば、文書ID「0」の各論理変数の論理値は、「a=0 b=1 c=0 d=1」なので、2分木20より、文書ID「0」の文書データに対する論理式の評価結果は「0(偽)」となる。一方、文書ID「1」の各論理変数の論理値は、「a=1 b=1 c=1 d=0」なので、2分木20より、文書ID「1」の文書データに対する論理式の評価結果は「1(真)」となる。
しかしながら、従来の技術では、図1に示したように、予め、全ての論理変数の論理値を計算しておく必要があり、論理値の計算コストが高い場合(論理値が「1」か「0」かを計算する時間が所定時間以上となる場合)には、処理時間が大きくなるという問題があった。また、従来の技術では、論理変数のレベルを決定する際に、各論理変数の計算コストを考慮してこなかった。上述した特許文献1も、ノードの数を減らすことしか言及しておらず、最終的に残ったノードの入力順序を各論理変数の計算コストを考慮して決定してはいない。
更に、計算コストを考慮しないノードの入力順序では、例えば、次のような問題が起きてしまう。図1を参照すると、ノードCは入力順序ではノードDに続く第二番目の順序となっている。そして、ノードCの計算コストが他のノードよりも非常に大きいとする。このような条件でも、検索対象となる全ての文書について必ずノードCを評価しなければならない場合は、計算コストの観点から見れば全体的な処理コストはどのような入力順序でもあまり影響ないかもしれない。しかし、図1の場合、文書ID「1」のように論理値が、「a=1 b=1 c=1 d=0」となる場合には、ノードCを通過していないので、ノードCの論理変数を利用しておらず、論理変数「c」の論理値の計算時間が無駄となっている。そして、このようにノードCの論理変数を利用しない文書が多数ある場合は、ノードCにかけた計算時間の無駄は無視できなくなってしまう。だから、ノードCの入力順序を極力後方へもってくる方が望ましい。そうすることで、ノードCを評価する以前の段階で、最終的な真偽決定が決定されノードCの計算処理が不要となるケースを増やすことができる。
次に、本実施例1にかかる検索装置の概要および特徴について説明する。図2は、本実施例にかかる検索装置の概要および特徴を説明するための図である。本実施例1にかかる検索装置は、検索クエリの論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数(以下、第1論理変数)と計算コストの少ない論理変数(以下、第2論理変数)とを判定し、第2論理変数が第1論理変数の前になるように、検索クエリに含まれる論理変数の順序を変換し、変換した検索クエリに基づいて、計算コストの少ない論理変数を含む部分から先に評価する。
また、本実施例1にかかる検索装置は、計算コストの少ない第2論理変数の論理値のみを予め算出しておき、検索クエリの評価の過程で必要になった場合にはじめて、該当する第1論理変数の論理値を算出する。
例えば、検索装置は、図2に示すように、検索クエリの論理式「A and B or(C and D or E)and (F or G and H)」を評価する場合に、各論理変数A〜Hの論理値を計算するための時間を予測することで、各論理変数A〜Hが第1論理変数か第2論理変数かを判定する。
検索装置は、過去の経験則、あるいは論理変数の論理値が真であるか否かを判定するための条件式の種別に基づいて、論理変数A〜Hが第1論理変数か第2論理変数かを判定する。ここでは一例として、論理変数A,Cが第1論理変数に属し、その他の論理変数B,D,E,F,G,Hが第2論理変数に属するものとする。
そして、検索装置は、逆ポーランド表記などを用いることにより、変換前の検索クエリと、変換後の検索クエリとの関係を等価(変換前の検索クエリと変換後の検索クエリとの評価結果が等価)に保った状態で、第2論理変数が第1論理変数の前になるように、検索クエリに含まれる論理変数の順序を変換する。図2に示す例では、検索クエリの論理変数の順序を「B,A,D,C,E,F,G,H」から「H,G,F,E,D,C,B,A」に変換している。
図2の2分木30は、変換前の検索クエリの2分木を表し、2分木40は、変換後の検索クエリの2分木を示している。ここで、2分木30と2分木40とを比較すると、2分木30では、ノードBの論理値が「1」というだけで、計算コストの大きいノードAの論理値が必要となるが、2分木40では、ノードBの論理値が「1」だとしても、論理変数H,G,F,E,D次第で、計算コストの大きな論理値A,Cを評価しなくて済む。
このように、本実施例にかかる検索装置は、各論理変数の計算コストに基づいて、第2論理変数が第1論理変数の前になるように、検索クエリに含まれる論理変数の順序を変更することで、第1論理変数の論理値を評価する機会を減らし、必要な場合にのみ、第1論理変数の論理値を算出するので、検索クエリの評価時における計算処理負荷を軽減させることができ、検索処理を高速化することが出来る。
次に、本実施例にかかる検索装置を備えた検索システムの構成について説明する。図3は、本実施例にかかる検索システムの構成を示す図である。同図に示すように、この検索システムは、端末装置60と検索装置100とをネットワーク50で接続して構成される。
端末装置60は、入力装置(図示略)を介して利用者等から検索クエリを入力された場合に、検索クエリを検索装置に送信し、検索装置100からの検索結果を出力装置(図示略)に出力する装置である。
検索装置100は、端末装置60から検索クエリを受信した場合に、検索クエリを評価し、XMLデータから該当するデータを検索して検索結果を端末装置60に送信する装置である。以下において、本実施例3にかかる検索装置100の構成を具体的に説明する。
図4は、本実施例にかかる検索装置100の構成を示す機能ブロック図である。同図に示すように、この検索装置100は、入力部110と、出力部120と、通信制御IF部130と、入出力制御IF部140と、記憶部150と、制御部160とを備えて構成される。
入力部110は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ(出力部120)も、マウスと協働してポインティングデバイス機能を実現する。
出力部120は、各種の情報を出力する出力手段であり、モニタ(若しくはディスプレイ、タッチパネル)やスピーカなどによって構成される。通信制御IF部130は、主に端末装置60との間における通信を制御する手段である。なお、入出力制御IF部140は、入力部110、出力部120、通信制御IF部130、記憶部150、制御部160によるデータの入出力を制御する手段である。
記憶部150は、制御部160による各種処理に必要なデータおよびプログラムを記憶する記憶手段であり、特に本発明に密接に関連するものとしては、XMLデータ150aと、検索クエリ150bと、分解検索クエリ150cと、計算量見積テーブル150dと、計算量テーブル150eと、抽出結果テーブル150fと、論理値テーブル150gと、変換論理式データ150hと、論理式判定ダイアグラムデータ150iと、評価結果テーブル150jと、検索結果データ150kとを備える。
ここで、XMLデータ150aは、要素識別子「<」、「</」等により要素が区切られた階層構造を有する文書データである。図5は、XMLデータ150aのデータ構造の一例を示す図である。なお、同図に示す例では、「/busyo」で表される要素が3種類あるので、説明の便宜上、「name」要素に「第一開発部」、「ID」要素に「2222」を有する「/busyo」の要素を第1要素、「name」要素に「第一研究部」、「ID」要素に「3333」を有する「/busyo」の要素を第2要素、「name」要素に「第三開発部」、「ID」要素に「1223」を有する「/busyo」の要素を第3要素とする。
検索クエリ150bは、XMLデータ150aから照合位置のデータを取り出すためのデータである。図6は、検索クエリ150bのデータ構造の一例を示す図である。同図に示す検索クエリは、「/busyo」で表される各要素のうち、「name」の要素に「開発部」を含み、かつ「ID」の要素に「"1.*3"」(先頭の数字が1、末尾の数字が3となる数列)を含む要素を選択し、選択した要素の「name」に登録された文書データを検索対象として指定する検索クエリである。
例えば、図5に示したXMLデータ150aに対して、図6に示した検索クエリ150bが指定された場合には、第3要素、すなわち、「name」の要素に「第三開発部」、「ID」の要素に「1223」を有する「/busyo」の要素が検索クエリ150bの条件を満たすので、かかる第3要素の「name」に登録された文書データ「第三開発部」が検索対象のデータとなる。
分解検索クエリ150cは、検索クエリ150bが検索クエリ分解部160a(後述する)によって分解された結果得られるデータである。図7は、分解検索クエリ150cのデータ構造の一例を示す図である。
同図に示すように、この分解検索クエリ150cは、検索クエリ(図6参照)を論理変数および論理演算子で表した論理式「Q=q1 and q2」と、各論理変数q1,q2の評価式「q1./busyo/name="開発部"」、「q2./busyo/ID=="1.*3"」と、検索結果を送信する際の定義式「Return /bunsyo/name/test()」を有する。
ここで、論理変数q1,q2には、評価式の評価結果に応じて、「1(真)」または「0(偽)」の論理値が算出される。例えば、q1の評価式「q1./busyo/name="開発部"」によって第1要素を評価すると、「name」の要素に、開発部が含まれるので、評価結果は「1」となる。一方、q2の評価式「q2./busyo/ID=="1.*3"」によって第1要素を評価すると、「ID」の要素に、該当文書データが含まれないので、評価結果(論理値)は「0」となる。
計算量見積テーブル150dは、論理変数の論理値を評価する評価式の計算コストを管理するテーブルである。図8は、計算量見積テーブル150dのデータ構造の一例を示す図である。同図に示すように、この計算量見積テーブル150dは、評価式種別と、計算コストとを対応付けて記憶しており、例えば、評価式種別は、単純検索、正規表現、数値演算、日時計算、近傍検索を有する。また、各評価式種別に対応する計算コストの値は、管理者の経験により適宜設定・更新される。
ここで、単純検索に分類される評価式は、所定の文書データが、検索対象の要素に含まれているか否かを判定する評価式である。例えば、図7の評価式q1が単純検索の評価式に該当する。
正規表現に分類される評価式は、各種の複雑な処理を要する評価式である。数値演算に分類される評価式は、比較や四則演算、複雑な関数などを含む(単なる一致判定は含まない)評価式である。たとえば、図7の評価式q2が数値演算に該当する。
日時計算に分類される評価式は、2008年1月以降以前などのように、様々なフォーマットに対応しながら判定が必要となる評価式である。近傍検索に分類される評価式は、「情報」と「統合」の間が5文字以内などのように、文字間隔等を数える必要がある評価式である。
計算量テーブル150eは、評価式に対応する計算コストを管理するテーブルである。図9は、計算量テーブル150eのデータ構造の一例を示す図である。同図に示すように、この計算量テーブル150eは、論理式識別情報と、計算コストとを対応付けて記憶している。ここでは、評価式「q1」の計算コストが「1」、評価式「q2」の計算コストが「100」となっている。
抽出結果テーブル150fは、評価式の評価対象となる情報と、検索クエリ150bの評価結果が真であった場合に、端末装置60に返答する項目を管理するテーブルである。図10は、抽出結果テーブル150fのデータ構造の一例である。同図に示すように、この抽出結果テーブル150fは、データ種別と、第1論理変数情報と、第2論理変数情報と、返答項目とを有する。なお、データ種別「Data0〜2」は、図5に示した、第1〜3要素の情報にそれぞれ対応する。
例えば、図10の1段目では、データ種別「Data0」の第1論理変数情報(ここでは、評価式q1の文書「開発部」が存在しているか否かを示す情報)が「○(存在している)」、第2論理変数情報(ここでは、評価式q2の比較対象となる情報)が「2222」、返答項目が「第一開発部」となっている。
論理値テーブル150gは、各評価式の評価結果(初期段階では、計算コストの大きい論理変数の評価結果を除く)を管理するテーブルである。図11は、論理値テーブル150gのデータ構造の一例を示す図である。同図に示すように、この論理値テーブル150gは、データ種別と、第1論理値と、第2論理値とを有する。
ここで、第1論理値は、評価式(例えば、評価式q1)による第1論理変数の評価結果であり、第2論理値は、評価式(例えば、評価式q2)による第1論理変数の評価結果である。なお、図11に示す論理値テーブル150gは、第2論理変数の計算コストが大きい場合の論理値テーブルであるため、初期段階では、計算コストの大きい第2論理値は未評価となっている。
ただし、データ種別「Data0」および「Data2」に対応する第2論理値は、検索クエリ150bの論理式(図7参照)を評価する場合に、第2論理値の値が必要となるので、必要となった時点で、評価式q2によって論理値を求める。一方、データ種別「Data1」に対応する第2論理値は、第1論理値が「0」であるため、検索クエリの論理式より、第2論理値の値によらず、評価結果が「0」となる(第2論理値の論理値を算出しなくて良い)。
変換論理式データ150hは、論理式(図7参照)が、論理式変換部160e(後述する)によって変換されたデータである。論理式判定ダイアグラムデータ150iは、ダイアグラム生成部160f(後述する)によって生成されるデータである。
図12は、論理式判定ダイアグラムデータ150iのデータ構造の一例を示す図である。同図に示すように、この論理式判定ダイアグラムデータ150iは、レベルテーブル151、遷移テーブル152を有する。
レベルテーブル151は、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、ノードテーブル151の1段目では、ノード「q1」のレベルが「0」であり、ノード「q1」に対応する論理変数が「q1」である旨の情報が登録されている。なお、レベルテーブル151において、レベル「2」のノードが最終レベルのノードとなり、ノード「0」あるいはノード「1」が、検索クエリ150bの評価結果となる。
遷移テーブル152は、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、遷移テーブル152の1段目では、ノード「q1」の論理値が「0」である場合に、ノード「0」に遷移する旨の情報が登録されている。なお、図12に示すレベルテーブル151および遷移テーブル152によって、図12の下段に示す2分木が定義される。
評価結果テーブル150jは、各データ種別(例えば、Data0〜2)に対する評価結果を管理するテーブルである。図13は、評価結果テーブル150jのデータ構造の一例を示す図である。同図に示すように、この評価結果テーブル150jは、データ種別と評価結果とを対応付けて記憶している。
例えば、図13の1段目では、データ種別「Data0」に対する論理式の評価結果が「0(偽)」である旨の情報が登録されている。なお、図13の3段目では、データ種別「Data2」に対する論理式の評価結果が「1(真)」である旨の情報が登録されている。
検索結果データ150kは、XMLデータ150aに対する検索クエリ150bの検索結果を記憶するデータである。この検索結果データは、評価結果テーブル150j(図13参照)の評価結果が「1」となるデータ種別の返答項目が記憶される。図13を参照すると、この場合は、データ種別「Data2」の評価結果が「1」となっているので、データ種別「Data2」の返答項目(図10参照)が、検索結果データ150kに記憶される。図14は、検索結果データ150kのデータ構造の一例を示す図である。
図4の説明に戻ると、制御部160は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図4に示すように、検索クエリ分解部160aと、計算量見積部160bと、抽出結果テーブル生成部160cと、論理値算出部160dと、論理式変換部160eと、ダイアグラム生成部160fと、ダイアグラム実行部160gと、検索結果出力部160hとを備える。
このうち、検索クエリ分解部160aは、端末装置60から検索クエリを受信した場合に、受信した検索クエリを検索クエリ150bとして記憶部150に記憶すると共に、周知の手法を用いて、検索クエリ150b(図6参照)から分解検索クエリ150c(図7参照)を生成する手段である。
計算量見積部160bは、分解検索クエリ150cに含まれる各評価式(図7に示す例では、評価式q1,q2)の計算コストを判定し、計算量テーブル150e(図9参照)を生成する処理部である。具体的に、計算量見積部160bは、分解検索クエリ150cの評価式と、計算量見積テーブル150d(図8参照)とを比較することにより、評価式の計算コストを判定する。
抽出結果テーブル生成部160cは、分解検索クエリ150cに含まれる評価式に基づいて、第1〜n(n>1)論理変数および返答項目をXMLデータ150a(図5参照)から抽出し、抽出結果テーブル150fを生成する手段である。
例えば、抽出結果テーブル生成部160cは、評価式が「/busyo/name="開発部"」である場合には、「busyo」要素を親とする「name」要素に「開発部」が含まれているか否かを判定し、含まれている場合には、「○」を抽出結果テーブル150fに登録し、含まれていない場合には、「×」を抽出結果テーブル150fに登録する。
また、抽出結果テーブル生成部160cは、評価式が「/busyo/ID=="1.*3"」である場合には、「busyo」要素を親とする「ID」要素に含まれる数列をXMLデータ150aから抽出し、抽出結果テーブル150fに登録する。
論理値算出部160dは、計算コストに基づいて検索クエリ150bの各論理変数を第1論理変数あるいは第2論理変数に属するのかを判定すると共に、第2論理変数に属する論理変数の論理値のみを算出して(評価式を評価して)、論理値テーブル150g(図11参照)を生成する手段である。
具体的に、論理値算出部160dは、計算コストが100以上となる論理変数を第1論理変数に属すると判定し、計算コストが100未満となる論理変数を第2論理変数に属すると判定する。例えば、図9に示すように、論理変数q1の計算コストが「1」、論理変数q2の計算コストが「100」に設定されている場合には、論理値算出部160dは、論理変数q1を第2論理変数と判定し、論理変数q2を第1論理変数と判定する。
そして、論理値算出部160dは、第2論理変数の評価式と、抽出結果テーブル150f(図10参照)とを比較することにより、論理値を算出する。なお、論理変数q1の評価式の種別は、単純検索に属しているため、抽出結果テーブル150fの「○」が「1(真)」に対応し、「×」が「0(偽)」に対応する。
一方、論理値算出部160dは、初期の段階で、第1論理変数の論理値を算出しない。論理値算出部160dは、ダイアグラム実行部160g(後述する)からの要求に応じて、該当する第2論理変数の論理値を算出する。
論理式変換部160eは、逆ポーランド記法を用いることにより、変換前の検索クエリと、変換後の検索クエリとの関係を等価に保った状態で、第2論理変数が第1論理変数の前になるように、検索クエリの論理式に含まれる論理変数の順序を変換する手段である。論理式変換部160eは、変換後の論理式を変換論理式データ150hとして記憶部150に記憶する。
逆ポーランド記法は、括弧が不要なので、コンピュータが単純なスタック構造を構築するだけで演算が出来るという特徴があり、論理式変換部160eが逆ポーランド記法を用いることで、論理式変換にかかる処理負荷を軽減させることが出来る。
図15は、論理式変換部160eの処理を説明するための図である。なお、ここでは説明の便宜上、変換前の検索クエリの論理式を「(A&B)|(〜((〜D&C)|E)&((H&G)|F))」とする。ここで、A〜Fは、論理式の論理変数を示し、論理変数A,Cが第1論理変数に属し、論理変数B、D〜Fが第2論理変数に属しているものとする。なお、上記論理式中の「&」は論理積、「|」は論理和、「〜」は否定を示す。
まず、論理式変換部160eは、論理式を逆ポーランド表記する。例えば、論理式「(A&B)|(〜((〜D&C)|E)&((H&G)|F))」を逆ポーランド表記すると「AB&D〜C&E|〜HG&F|&|」となる。
そして、論理式変換部160eは、逆ポーランド表記した論理式の先頭(図15に示す例では、論理変数A)から、論理変数および演算子を順次読み出し、各種の処理を実行する。ここで、論理式変換部160eが論理変数を取り出した場合の処理、および演算子を読み出した場合の処理について説明する。
(論理変数を読み出した場合の処理)
論理式変換部160eが論理変数を読み出した場合には、論理変数をスタック(一時記憶部<スタック>に論理変数を登録する。かかる一時記憶部に一番最後に登録された論理変数が、一番最初に取り出される。)すると共に、論理変数に対応する評価関数値を対応付けて記憶する。なお、各論理変数に対する評価関数値は、論理変数が、第1論理変数に属する場合には「1」、第2論理変数に属する場合には「0」となる。この評価関数値は、論理式を並びかえる場合の指標となる値である。
(演算子を読み出した場合の処理)
論理式変数部160eが演算子を読み出した場合には、スタックをポップし第1項とし、さらに、スタックをポップ(スタックに登録された論理変数のうち、一番最後に登録されたものを取り出す)し第2項とする。そして、第1項を先に第2項を後に並べた場合の評価関数値(以下、第1評価関数値)と、第2項を先に第1項を後に並べた場合の評価関数値(第2評価関数値)とをそれぞれ算出する。
論理式変換部160eは、第1評価関数値と第2評価関数値とを比較して、第1評価関数値が第2評価関数値よりも小さい場合には、第1項を先に第2項を後ろに並べたものの後ろに演算子を加え、スタックする。
一方、論理式変換部160eは、第2評価関数値が第1論理関数値よりも小さい場合には、第2項を先に第1項を後ろに並べたものの後ろに演算子を加え、スタックする。なお、第1評価関数値と第2評価関数値とが等しい場合には、予め、管理者に設定された順序に各項を並べ、並べたものの後ろに演算子を加え、スタックする。
ここで、逆ポーランド表記Xから論理変数だけを取り出した列をxn−1・・・xとして、評価関数値を算出するための評価関数e(X)を定義すると、
Figure 0005223380
となる。ただし、xが第1論理変数に属する場合には、f(x)=1となり、xが第2論理変数に属する場合には、f(x)=0となる。
例えば、逆ポーランド表記の論理式「AB〜C&|〜」から、論理変数だけを取り出した列を、「A,B,C」とし、論理変数A,Cが第1論理変数、論理変数Bが第2論理変数に属する場合には、
e(AB〜C&|〜)=2×f(A)+2×f(B)+2×f(C)
=4×1+2×0+1×1
=5
となる。
次に、論理式変換部160eが逆ポーランド記法された論理式を変換する処理を具体的に説明する(ここでは、変換対象の論理式「AB&D〜C&E|〜HG&F|&|」を変換する場合について説明する)。図15に示すように、論理式変換部160eは、論理式の論理変数A、Bを読み出して、順にスタックする(ステップS10)。「A」の評価関数値は「1」、「B」の評価関数は「0」となる。
論理式変換部160eは、演算子「&」を読出し、第1項「B」、第2項「A」に対する第1評価関数値(BAの評価関数値)および第2評価関数値(ABの評価関数値)を比較すると、第1評価関数値<第2評価関数値となるので、「BA&」をスタックする。また、論理式変換部160eは、論理変数「D〜」、「C」を順次読出し、スタックする(ステップS11)。「BA&」の評価関数値は「1」、「D〜」の評価関数値は「0」、「C」の評価関数値は「1」となる。
論理式変換部160eは、演算子「&」を読出し、第1項「C」、第2項「D(D〜)」に対する第1評価関数値(CDの評価関数値「2」)および第2評価関数値(DCの評価関数値「1」)を比較すると、第2評価関数値<第1評価関数値となるので、「D〜C&」をスタックする。また、論理式変換部160eは、論理変数「E」を読み出してスタックする(ステップS12)。「D〜C&」の評価関数値は「1」、「E」の評価関数値は「0」となる。
論理式変換部160eは、演算子「|」を読出し、第1項「E」、第2項「DC(D〜C&)」に対する第1評価関数値(EDCの評価関数値「1」)および第2評価関数値(DCEの評価関数値「2」)を比較すると、第1評価関数値<第2評価関数値となるので、「ED〜C&|」をスタックする。また、否定「〜」を読み出し、第1項の最後尾に否定「〜」を付加する(ステップS13)。「ED〜C&|〜」の評価関数値は「1」となる。
論理式変換部160eは、論理変数「H」,「G」を読み出して、順にスタックする。また、論理式変換部160eは、演算子「&」を読み出し、第1項「H」、第2項「G」に対する第1評価関数値(HGの評価関数値「0」)および第2評価関数値(HGの評価関数値「0」)を比較すると、第2評価関数値=第1評価関数値となるので、例えば、「HG&」をスタックする(ステップS14)。「HG&」の評価関数値は「0」となる。
論理式変換部160eは、論理変数「F」を読み出して、スタックする。そして、論理式変換部160eは、演算子「|」を読み出し、第1項「F」、第2項「HG(HG&)」に対する第1評価関数値(FHGの評価関数値「0」)および第2評価関数値(HGFの評価関数値「0」)を比較すると、第2評価関数値=第1評価関数値となるので、例えば、「HG&F|」をスタックする(ステップS15)。「HG&F|」の評価関数値は「0」となる。
論理式変換部160eは、演算子「&」を読み出し、第1項「HGF(HG&F|)」、第2項「EDC(ED〜C&|〜)」に対する第1評価関数値(HGFEDCの評価関数値「1」)および第2評価関数値(EDCHGFの評価関数値「8」)を0比較すると、第1評価関数値<第2評価関数値となるので、「HG&F|ED〜C&|〜&」をスタックする(ステップS16)。
論理式変換部160eは、演算子「|」を読出し、第1項「HGFEDC(HG&F|ED〜C&|〜&)」、第2項「BA(BA&)」に対する第1評価関数値(HGFEDCBAの評価関数値「5」)および第2評価関数値(BAHGFEDCの評価関数値「64」)を比較すると、第1評価関数値<第2評価関数値となるので、「HG&F|ED〜C&|〜&BA&|」をスタックする(ステップS17)。「HG&F|ED〜C&|〜&BA&|」の評価関数値は、「5」となる。
論理式変換部160eは、上記ステップS10〜17を実行することによって、逆ポーランド表記の論理式「AB&D〜C&E|〜HG&F|&|」を論理式「HG&F|ED〜C&|〜&BA&|」に変換する。
このように、論理式変換部160eが、第1評価関数値と第2評価関数値との比較結果に基づいて、評価関数値の小さい方の論理変数の集合を、評価関数値の大きい方の論理変数の集合の前に出すことにより、論理式を変換するので、第1論理変数の前に第2論理変数を配置することができ、結果的に、計算コストの大きい論理変数の論理値を求めなければならない機会を減らすことが出来る。
図4の説明に戻ると、ダイアグラム生成部160fは、変換論理式データ150hに基づいて、論理式判定ダイアグラムデータを生成する手段である。ダイアグラム生成部160fは、変換論理式データ150h(逆ポーランド表記の論理式)の文字を先頭から順次読出し、読み出した文字(演算子、論理変数等)に応じて、レベルテーブル151、遷移テーブル152に各種の情報を登録する。
以下において、ダイアグラム生成部160fが、論理変数を読み出した場合の処理、否定(〜)を読み出した場合の処理、AND(&)を読み出した場合の処理、OR(|)を読み出した場合の処理、終了時の処理(最後の文字を読み出した後の処理)について順に説明する。なお、ダイアグラム生成部160fは、先頭(Top)スタック、Trueスタック、Falseスタックを保持しているものとする。
(論理変数を読み出した場合の処理)
ダイアグラム生成部160fが、論理変数を読み出した場合には、新しいノード変数を定義し、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリをレベルテーブル151(図12参照)に追加する。
また、ダイアグラム生成部160fは、定義したノード変数を先頭スタックにプッシュ(一時記憶部<スタック>にノード変数を登録する)し、定義したノード変数1つからなる集合をTrueスタック、Falseスタックにプッシュすると共に、現在のレベルに1を加算する。
(否定「〜」を読み出した場合の処理)
ダイアグラム生成部160fは、否定を読み出した場合には、新しくユニークなノード変数T,Fを定義し、Trueスタックをポップ(一時記憶部<スタック>に一番最後に登録された情報を取り出す)し、ポップした集合内の各ノード変数において、ノード変数、論理値1、遷移先ノード変数Fからなるエントリを遷移テーブル152(図12参照)に追加する。
また、ダイアグラム生成部160fは、Falseスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値0、遷移先ノード変数Tからなるエントリを遷移テーブル152に追加する。ダイアグラム生成部160fは、Trueスタックにノード変数Tからなる集合をプッシュし、Falseスタックにノード変数Fからなる集合をプッシュする。
(AND「&」を読み出した場合の処理)
ダイアグラム生成部160fは、ANDを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をAとする。そして、ダイアグラム生成部160fは、Trueスタックを2回ポップし、1回目にポップした集合をTrueスタックにプッシュする。
ダイアグラム生成部160fは、2回目にポップした集合内の各ノード変数をノード項目として、論理値1、遷移先ノード変数Aとをあわせたエントリを遷移テーブル152に追加する。また、ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数すべてからなる集合をFalseスタックにプッシュする。
(OR「|」を読み出した場合の処理)
ダイアグラム生成部160fは、ORを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をAとする。そして、ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目にポップした集合をFalseスタックにプッシュする。
ダイアグラム生成部160fは、2回目にポップした集合内の各ノード変数をノード項目として、論理値0、遷移先ノード変数Aをあわせたエントリを遷移テーブル152に追加する。また、ダイアグラム生成部160fは、Trueスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合をTrueスタックにプッシュする。
(終了時の処理)
ダイアグラム生成部160fは、新しいノード変数0,1を定義し、定義したノード変数、現在のレベル、論理変数NULLからなるエントリをレベルテーブルに追加する。また、ダイアグラム生成部160fは、Tureスタックをポップし、ポップした集合内の各ノード変数において、論理値1と遷移先ノード変数1とを合わせたエントリを遷移テーブル152に追加する。
ダイアグラム生成部160fは、Falseスタックをポップし、ポップした集合内の各ノード変数において、論理値0と遷移先ノード変数0とを合わせたエントリを遷移テーブル152に追加する。そして、ダイアグラム生成部160fは、遷移テーブル152において、遷移先項目がノード変数T,Fとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該当エントリの遷移先項目として上書きする。
次に、ダイアグラム生成部160fの処理を具体的に説明する。ここでは、一例として、変換論理式データ150hが「HG&F|ED〜C&|〜&BA&|」であるものとする。図16〜図18は、TOPスタックとTrueスタックとFalseスタックの状態変化を示す図であり、図19〜図27は、レベルテーブル151と遷移テーブル152の状態変化を示す図である。
(「H」G&F|ED〜C&|〜&BA&|)
まず、ダイアグラム生成部160fは、「H」を読み、(H<ノード>,0<レベル>,H<論理変数>)をレベルテーブル151に追加し、「H」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「0」に1を加算する。
(H「G」&F|ED〜C&|〜&BA&|)
ダイアグラム生成部160fは、「G」を読み、(G,1,G)をレベルテーブル151に追加し、「G」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「1」に1を加算する(ステップS20および図19の左側参照)。
(HG「&」F|ED〜C&|〜&BA&|)
ダイアグラム生成部160fは、「&」を読み、先頭スタック「G」をポップする。そして、ダイアグラム生成部160fは、Tureスタックを2回ポップし、1回目にポップした集合「G」をTureスタックにプッシュする。
また、ダイアグラム生成部160fは、2回目にポップした集合「H」のノード変数が「H」なので、(H<ノード>,1<論理値>,G<遷移先>)を遷移テーブル152に追加する(図19の右側参照)。ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「H,G」をFalseスタックにプッシュする(ステップS21)。
(HG&「F」|ED〜C&|〜&BA&|)
ダイアグラム生成部160fは、「F」を読み、(F,2,F)をレベルテーブル151に追加し、「F」を先頭スタック、Trueスタック、Falseスタックにプッシュする(ステップS22および図20の左側参照)。また、現在のレベル「2」に1を加算する。
(HG&F「|」ED〜C&|〜&BA&|)
ダイアグラム生成部160fは、「|」を読み、先頭スタック「F」をポップする。そして、ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目にポップした集合「F」をFalseスタックにプッシュする。
ダイアグラム生成部160fは、2回目にポップした集合「H,G」内の各ノード変数をノード項目として、論理値0と遷移先ノード変数「F」とを合わせたエントリを遷移テーブル152に追加する(図20の右側参照)。
ダイアグラム生成部160fは、Tureスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「G,F」をTrueスタックにプッシュする(ステップS23)。
(HG&F|「E」D〜C&|〜&BA&|)
ダイアグラム生成部160fは、「E」を読み、(E,3,E)をレベルテーブル151に追加し、「E」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「3」に1を加算する。
(HG&F|E「D」〜C&|〜&BA&|)
ダイアグラム生成部160fは、「D」を読み、(D,4,D)をレベルテーブル151に追加し、「D」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「4」に1を加算する(ステップS24および図21の左側参照)。
(HG&F|ED「〜」C&|〜&BA&|)
ダイアグラム生成部160fは、「〜」を読み、ユニークなノード「Dt」、「Df」を定義し、Trueスタックをポップし、ポップした集合内「D」のノード変数において、ノード変数「D」、論理値1、遷移先ノード変数「Df」からなるエントリを遷移テーブル152に追加する。
ダイアグラム生成部160fは、Falseスタックをポップし、ポップした集合内「D」のノード変数において、ノード変数「D」、論理値0、遷移先ノード変数「Dt」からなるエントリを遷移テーブル152に追加する(図21の右側参照)。また、ダイアグラム生成部160fは、Tureスタックに「Dt」をプッシュし、Falseスタックに「Df」をプッシュする(ステップS25)。
(HG&F|ED〜「C」&|〜&BA&|)
ダイアグラム生成部160fは、「C」を読み、(C,5,C)をレベルテーブル151に追加し、「C」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「5」に1を加算する(ステップS26および図22の左側参照)。
(HG&F|ED〜C「&」|〜&BA&|)
ダイアグラム生成部160fは、「&」を読み、先頭スタック「C」をポップする。そして、ダイアグラム生成部160fは、Trueスタックを2回ポップし、1回目にポップした集合「C」をTrueスタックにプッシュする。
また、ダイアグラム生成部160fは、2回目にポップした集合「Dt」のノード変数が「Dt」なので、(Dt,1,C)を遷移テーブル152に追加する(図22の右側参照)。ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「Df,C」をFalseスタックにプッシュする(ステップS27)。
(HG&F|ED〜C&「|」〜&BA&|)
ダイアグラム生成部160fは、「|」を読み、先頭スタック「D」をポップする。そして、ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目にポップした集合「Df,C」をFalseスタックにプッシュする。
ダイアグラム生成部160fは、2回目にポップした集合「E」のノード変数をノード項目として、論理値0と遷移先ノード変数「D」とを合わせたエントリを遷移テーブル152に追加する(図23の左側参照)。
ダイアグラム生成部160fは、Tureスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「E,C」をTrueスタックにプッシュする(ステップS28)。
(HG&F|ED〜C&|「〜」&BA&|)
ダイアグラム生成部160fは、「〜」を読み、ユニークなノード「Ct」、「Cf」を定義し、Trueスタックをポップし、ポップした集合内「E,C」のノード変数において、ノード変数「C」、論理値1、遷移先ノード変数「Cf」からなるエントリを遷移テーブル152に追加する。また、ノード変数「E」、論理値1、遷移先ノード変数「CF」からなるエントリを遷移テーブル152に追加する。
ダイアグラム生成部160fは、Falseスタックをポップし、ポップした集合内「Df,C」の各ノード変数において、ノード変数「C」、論理値0、遷移先ノード変数「Ct」からなるエントリを遷移テーブル152に追加すると共に、ノード変数「Df」、論理値0、遷移先ノード変数「Ct」からなるエントリを遷移テーブル152に追加する(図23の右側参照)。また、ダイアグラム生成部160fは、「Ct」をTrueスタックにプッシュし、「Cf」をFalseスタックにプッシュする(ステップS29)。
(HG&F|ED〜C&|〜「&」BA&|)
ダイアグラム生成部160fは、「&」を読み、先頭スタック「E」をポップする。そして、ダイアグラム生成部160fは、Tureスタックを2回ポップし、一回目にポップした集合「Ct」をTrueスタックにプッシュする。
また、ダイアグラム生成部160fは、2回目にポップした集合「G,F」内の各ノード変数が「G,F」なので、(G,1,E)および(F,1,E)を遷移テーブル152に追加する(図24の左側参照)。ダイアグラム生成部160fは、Falesスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「Cf,F」をFalseスタックにプッシュする(ステップS30)。
(HG&F|ED〜C&|〜&「B」A&|)
ダイアグラム生成部160fは、「B」を読み、(B,6,B)をレベルテーブル151に登録し、「B」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「6」に1を加算する。
(HG&F|ED〜C&|〜&B「A」&|)
ダイアグラム生成部160fは、「A」を読み、(A,7,A)をレベルテーブル151に登録し、「A」を先頭スタック、Trueスタック、Falseスタックにプッシュする。また、現在のレベル「7」に1を加算する。
(HG&F|ED〜C&|〜&BA「&」|)
ダイアグラム生成部160fは、「&」を読み、先頭スタック「A」をポップする。そして、ダイアグラム生成部160fは、Trueスタックを2回ポップし、1回目にポップした集合「A」をTrueスタックにプッシュする。
また、ダイアグラム生成部160fは、2回目にポップした集合「B」のノード変数が「B」なので、(B,1,A)を遷移テーブル152に追加する(図24の右側参照)。ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「B,A」をFalseスタックにプッシュする(ステップS31)。
(HG&F|ED〜C&|〜&BA&「|」)
ダイアグラム生成部160fは、「|」を読み、先頭トラック「B」をポップする。そして、ダイアグラム生成部160fは、Falseスタックを2回ポップし、1回目にポップした集合「B,A」をFalseスタックにプッシュする。
ダイアグラム生成部160fは、2回目にポップした集合「Cf,F」の各ノード変数をノード項目として、ノード変数「Cf」、論理値0、遷移先ノード変数「B」と、ノード変数「F」、論理値0、遷移先ノード変数「B」を遷移テーブル152に追加する(図25参照)。
ダイアグラム生成部160fは、Tureスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合「A,Ct」をTrueスタックにプッシュする(ステップS32)。
(終了時の処理)
ダイアグラム生成部160fは、新たしいノード変数「0」、「1」を定義し、定義したノード変数、現在のレベル、論理変数NULLからなるエントリをレベルテーブル151に追加する。そして、ダイアグラム生成部160fは、Trueスタックをポップし、ポップした集合内「A,Ct」の各ノード変数において、論理値1と遷移先ノード変数1とを合わせたエントリ(Ct,1,1,)および(A,1,1)を遷移テーブル152に追加する。
ダイアグラム生成部160fは、Falseスタックをポップし、ポップした集合内「B,A」の各ノード変数において、論理値0と遷移先ノード変数0とを合わせたエントリ(B,0,0)および(A,0,0)を遷移テーブル152に登録する(ステップS33および図26参照)。
ダイアグラム生成部160fは、遷移テーブル152(図26参照)において、遷移先がノード変数T,Fとして生成されたノード変数(例えば、Dt,Df,Ct,Cf)である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする(ステップS34および図27参照)。
例えば、ダイアグラム生成部160fは、
(E,1,Cf)、(Cf,0,B)を(E,1,B)に変換し、
(D,0,Dt)、(Dt,1,C)を(D,0,C)に変換し、
(D,1,Df)、(Df,0,Ct)を(D,1,Ct)に変換し、
(D,1,Ct)、(Ct,1,1)を(D,1,1)に変換する。
図4の説明に戻ると、ダイアグラム実行部160gは、論理値テーブル150g(図11参照)と、論理式判定ダイアグラムデータ150i(図12参照)とを比較して、論理式が「1(真)」であるか否かを判定する。
そして、ダイアグラム実行部160gは、判定結果が「1」となったデータ種別に対応する返答項目を抽出結果テーブル150f(図10参照)から検出し、検出した返答項目を検索結果データ150kとして記憶部150に記憶する。例えば、データ種別「Data3」の判定結果は「1」となるので、返答項目「第三開発部」を検索結果データ150kとして記憶する。
なお、ダイアグラム実行部160gは、論理値テーブル150gと論理式判定ダイアグラムデータ150iとを比較している途中で、論理値未算出の第1論理変数にヒットした場合には、ヒットした第1論理値変数の論理値を論理値算出部160dに要求し、該当論理値を取得する。
例えば、ダイアグラム実行部160gは、データ種別「Data0」の第1論理変数「q2」が必要になった場合には、データ種別「Data0」の第1論理変数「q2」の論理値を論理値算出部160dに要求する。論理値算出部160dは、データ種別「Data0」の第1論理変数「q2」の論理値の要求を受け付けた場合に、評価式q2「q2./busyo/ID=="1.*3"」によって「2222」(図10参照)を評価し、評価結果の論理値「この場合は0」をダイアグラム実行部160gに出力すると共に、算出した論理値を論理値テーブル150gに登録する。
検索結果出力部160hは、記憶部150に記憶された検索結果データ150kを端末装置60(図3参照)に送信する手段である。端末装置60は、検索結果データ150kを受信した場合に、受信した検索結果データ150kをモニタ画面に出力する。図28は、検索結果データを出力したモニタ画面の一例を示す図である。
次に、本実施例1にかかる検索装置100の処理手順について説明する。図29は、本実施例1にかかる検索装置100の処理手順を示すフローチャートである。同図に示すように、検索装置100が検索クエリを受信し(ステップS101)、検索クエリ分解部160aが分解検索クエリ150cを生成する(ステップS102)。
そして、計算量見積部160bが、論理変数の計算量を見積もることで計算量テーブル150eを生成し(ステップS103)、抽出結果テーブル生成部160cが、分解検索クエリに対応するデータを抽出して、抽出結果テーブル150fを生成する(ステップS104)。
続いて、論理値算出部160dが、計算量が閾値未満となる論理変数(第2論理変数)の論理値を算出することで論理値テーブル150gを生成し(ステップS105)、論理式変換部160eが、BDD入力順序決定処理を実行する(ステップS106)。
そして、ダイアグラム生成部160fがBDD構築処理を実行し(ステップS107)、ダイアグラム実行部160gが論理式判定ダイアグラム実行処理を行う(ステップS108)。ダイアグラム実行部160gは、評価結果データを格納し(ステップS109)、検索結果出力部160hが、返答項目出力処理を実行する(ステップS110)。
次に、図29のステップS106に示したBDD入力順序決定処理について説明する。図30は、BDD入力順序決定処理を示すフローチャートである。同図に示すように、論理式変換部160eは、論理式を逆ポーランド表記に変換し(ステップS201)、逆ポーランド表記の初めの文字を読み出す(ステップS202)。
そして、演算子を読み出したか否かを判定し(ステップS203)、演算子でない場合には(ステップS204,No)、論理変数をスタックし(ステップS205)、ステップS212に移行する。
一方、演算子を読み出した場合には(ステップS204,Yes)、スタックをポップして第1項に設定し、さらに、スタックをポップして第2項に設定し(ステップS206)、第1項、第2項の順に並べた場合の第1評価関数値と、第2項、第1項の順に並べた場合の第2評価関数値とを比較する(ステップS208)。
第1評価関数値が第2評価関数値よりも小さい場合には(ステップS209,Yes)、第1項、第2項の順に並べたものの後に演算子を加えスタックし、(ステップS210)、ステップS212に移行する。
一方、ステップS209の条件を満たさない場合には(ステップS209,No)、第2項、第1項の順に並べたものの後に演算子を加えスタックし(ステップS211)、次に文字が存在するか否かを判定する(ステップS212)。
次に文字が存在する場合には(ステップS213,Yes)、次の文字を読出し(ステップS214)、ステップS203に移行する。一方、次の文字が存在しない場合には(ステップS213,No)、BDD入力順序決定処理を終了する。
次に、図29のステップS107に示したBDD構築処理について説明する。図31は、BDD構築処理を示すフローチャートである。同図に示すように、ダイアグラム生成部160fは、現在のレベルを0に設定し(ステップS301)、逆ポーランド表記の初めの文字を読出し(ステップS302)、文字が論理変数か否かを判定する(ステップS303)。
文字が論理変数である場合には(ステップS304,Yes)、論理変数対応処理を実行し(ステップS305)、ステップS316に移行する。一方、文字が論理変数ではない場合には(ステップS304,No)、文字が「NOT」か否かを判定する(ステップS306)。
文字がNOTである場合には(ステップS307,Yes)、NOT対応処理を実行し(ステップS308)、ステップS316に移行する。一方、文字がNOTではない場合には(ステップS307,No)、文字が「AND」か否かを判定する(ステップS309)。
文字がANDである場合には(ステップS310,Yes)、AND対応処理を実行し(ステップS311)、ステップS316に移行する。一方、文字がANDではない場合には(ステップS310,No)、文字が「OR」か否かを判定する(ステップS312)。
文字がORではない場合には(ステップS313,No)、エラーを出力する(ステップS314)。一方、文字がORの場合には(ステップS313,Yes)、OR対応処理を実行し(ステップS315)、次に文字が存在するか否かを判定する(ステップS316)。
次の文字が存在する場合には(ステップS317,Yes)、次の文字を読出し(ステップS318)、ステップS303に移行する。一方、次の文字が存在しない場合には(ステップS317,No)、終了処理を実行し(ステップS319)、BDD構築処理を終了する。
次に、図31のステップS305に示した論理変数対応処理について説明する。図32は、論理変数対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部160fは、新しいノード変数を定義し(ステップS401)、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリをレベルテーブル151に追加する(ステップS402)。
そして、ダイアグラム生成部160fは、定義したノード変数を先頭スタックにプッシュし(ステップS403)、定義したノード変数1つからなる集合をTrueスタック、Falseスタックにプッシュし(ステップS404)、現在のレベルに1を加算し(ステップS405)、論理変数対応処理を終了する。
次に、図31のステップS308に示したNOT対応処理について説明する。図33は、NOT対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部160fは、新しくユニークなノード変数T,Fを定義し(ステップS501)、Trueスタックをポップし、ポップした集合内の各変数において、ノード変数、論理値1、遷移先ノード変数Fからなるエントリを遷移テーブル152に追加する(ステップS502)。
そして、ダイアグラム生成部160fは、Falseスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値0、遷移先ノード変数Tからなるエントリを遷移テーブル152に追加し(ステップS503)、Trueスタックにノード変数Tからなる集合をプッシュし、Falseスタックにノード変数Fからなる集合をプッシュし(ステップS504)、NOT対応処理を終了する。
次に、図31のステップS311に示したAND対応処理について説明する。図34は、AND対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部160fは、先頭スタックをポップし、ポップしたノードを変数Aに設定し(ステップS601)、Trueスタックを2回ポップし、1回目にポップした集合をTrueスタックにプッシュする(ステップS602)。
そして、2回目にポップした集合内の各ノード変数をノード項目として、論理値1、遷移先ノード変数Aと合わせたエントリを遷移テーブルに追加し(ステップS603)、Falseスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合をFalseスタックにプッシュし(ステップS604)、AND対応処理を終了する。
次に、図31のステップS315に示したOR対応処理について説明する。図35は、OR対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部160fは、先頭スタックをポップし、ポップしたノードを変数Aに設定し(ステップS701)、Falseスタックを2回ポップし、1回目にポップした集合をFalseスタックにプッシュする(ステップS702)。
そして、2回目にポップした集合内の各ノード変数をノード項目として、論理値0、遷移先ノード変数Aと合わせたエントリを遷移テーブル152に追加し(ステップS703)、Trueスタックを2回ポップし、1回目および2回目にポップした集合内のノード変数全てからなる集合をTureスタックにプッシュする(ステップS704)。
次に、図31のステップS319に示した終了処理について説明する。図36は、終了処理を示すフローチャートである。同図に示すように、ダイアグラム生成部160fは、新しいノード変数0,1を定義し、定義したノード変数、現在のレベル、論理変数NULLからなるエントリをレベルテーブル151に追加し(ステップS801)、Trueスタックをポップし、ポップした集合内の各ノード変数において、論理値1と、遷移先ノード変数1とを合わせたエントリを遷移テーブル152に追加する(ステップS802)。
そして、ダイアグラム生成部160fは、Falseスタックをポップし、ポップした集合内の各ノード変数において、論理値0と、遷移先ノード変数0とを合わせたエントリを遷移先テーブルに追加する(ステップS803)。
続いて、ダイアグラム生成部160fは、遷移テーブル152において、遷移先項目がノード変数T,Fとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする(ステップS804)。
次に、図29のステップS108に示した論理式判定ダイアグラム実行処理について説明する。図37は、論理式判定ダイアグラム実行処理を示すフローチャートである。同図に示すように、ダイアグラム実行部160gは、初期ノードを現在のノードに設定し(ステップS901)、ノードテーブルを参照し、現在のノードレベルと論理変数とを取得する(ステップS902)。
ダイアグラム実行部160gは、ノードレベルが最終レベルか否かを判定し(ステップS903)、最終レベルの場合には(ステップS904,Yes)、ノードに割り当てられている真偽値(論理値)を評価結果として判定し(ステップS905)、他の論理式判定ダイアグラムが存在するか否かを判定する(ステップS906)。
他の論理式判定ダイアグラムが存在する場合には(ステップS907,Yes)、未選択の論理式判定ダイアグラムを選択し(ステップS908)、ステップS901に移行する。一方、他の論理式判定ダイアグラムが存在しない場合には(ステップS907,No)、論理式判定ダイアグラム実行処理を終了する。
ところで、ステップS904において、ノードレベルが最終レベルでない場合には(ステップS904,No)、論理変数の論理値が既知か否かを判定し(ステップS909)、既知でない場合には(ステップS910,No)、論理値算出部160dが論理変数の論理値を算出し(ステップS911)、ステップS913に移行する。
一方、論理値が既知の場合には(ステップS910,Yes)、論理値を論理値テーブルから読出し(ステップS912)、遷移テーブル152を参照し、遷移先情報を取得し(ステップS913)、現在のノードを遷移先のノードに設定し(ステップS914)、ステップS902に移行する。
次に、図29のステップS110に示した返答項目出力処理について説明する。図38は、返答項目出力処理を示すフローチャートである。同図に示すように、検索結果出力部160hは、評価結果テーブルを読出し(ステップS1001)、評価結果が真であるか否かを判定する(ステップS1002)。
評価結果が偽である場合には(ステップS1003,No)、ステップS1006に移行する。評価結果が真である場合には(ステップS1003,Yes)、抽出結果テーブル150fから対応する返答項目を抽出し(ステップS1004)、返答項目を送信先に出力する(ステップS1005)。
そして、検索結果出力部160hは、他の評価結果が存在するか否かを判定し(ステップS1006)、他の評価結果が存在する場合には(ステップS1007,Yes)、未選択の評価結果を読出し(ステップS1008)、ステップS1002に移行する。一方、他の評価結果が存在しない場合には(ステップS1007,No)、返答項目出力処理を終了する。
上述してきたように、本実施例1にかかる検索装置100は、端末装置60から検索クエリを取得した場合に、論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数(第1論理変数)と計算コストの少ない論理変数(第2論理変数)とを判定し、計算コストの少ない論理変数が計算コストの大きい論理変数よりも前になるように、検索クエリに含まれる論理変数の順序を変換し、変換した検索クエリに基づいて計算コストの少ない論理変数を含む条件式から先に評価するので、検索クエリによる検索処理を高速化することが可能となる。
すなわち、第2論理変数が第1論理変数の前に配置される場合と、第2論理変数が第1論理変数の後ろに配置される場合とを比較すると、第2論理変数が第1論理変数の前に配置される方が第1論理変数の論理値が必要となる機会が少なくなるので、結果的に、計算コストの大きい論理値を算出すべき回数が減るので、検索クエリによる検索処理を高速化することが出来る。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例1以外にも種々の異なる形態にて実施されて良いものである。そこで、以下では、実施例2として本発明に含まれる他の実施例を説明する。
(1)計算コストについて
例えば、上記の実施例1では、評価式と計算量見積テーブル150dとを比較することにより(評価式の種別に基づいて)計算コストを算出していたが、これに限定されるものではなく、過去の経験則に基づいて、計算コストを算出しても良い。
例えば、計算量見積部160bは、抽出結果テーブル150f(図10参照)の第1〜n論理変数情報から論理値を実際に算出する場合に、計算時間を計測し、計測時間に応じて所定の計算コスト設定(論理値の計算にn秒以上費やした場合には、計算コストを100とする)し、計算コストを各論理変数情報に割り当てたテーブルを生成する。そして、計算量見積部160bは、上記の経験則に基づいたテーブルと、評価式によって評価される論理変数とを比較して、計算コストを設定しても良い。
(2)システムの構成等
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図4に示した検索装置100の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がCPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
図39は、実施例1にかかる検索装置100を構成するコンピュータ200のハードウェア構成を示す図である。図39に示すように、このコンピュータ(検索装置)200は、入力装置201、モニタ202、RAM(Random Access Memory)203、ROM(Read Only Memory)204、記憶媒体からデータを読み取る媒体読取装置205、他の装置(例えば、端末装置60)との間でデータの送受信を行う通信装置206、CPU(Central Processing Unit)207、HDD(Hard Disk Drive)208をバス209で接続して構成される。
そして、HDD208には、上記した検索装置100の機能と同様の機能を発揮する検索プログラム208b、が記憶されている。CPU207が、検索プログラム208bを読み出して実行することにより、検索プロセス207aが起動される。ここで、検索プロセス207aは、図4に示した、検索クエリ分解部160a、計算量見積部160b、抽出結果テーブル生成部160c、論理値算出部160d、論理式変換部160e、ダイアグラム生成部160f、ダイアグラム実行部160g、検索結果出力部160hに対応する。
また、HDD208は、XMLデータ150a、検索クエリ150b、分解検索クエリ150c、計算量見積テーブル150d、計算量テーブル150e、抽出結果テーブル150f、論理値テーブル150g、変換論理式データ150h、論理式判定ダイアグラムデータ150i、評価結果テーブル150j、検索結果データ150kに対応する各種データ208aを記憶する。CPU207は、HDD208に格納された各種データ208aを読み出して、RAM203に格納し、RAM203に格納された各種データ203aを利用して、検索クエリを評価する。
ところで、図39に示した検索プログラム208bは、必ずしも最初からHDD208に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ(HDD)などの「固定用の物理媒体」、さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータに接続される「他のコンピュータ(またはサーバ)」などに検索プログラム208bを記憶しておき、コンピュータがこれらから検索プログラム208bを読み出して実行するようにしてもよい。
上記の実施例を含む実施形態に関し、以下の付記を開示する。
(付記1)論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法であって、
前記検索装置は、
前記論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定ステップと、
前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定ステップと、
前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価ステップと、
を含んだことを特徴とする評価方法。
(付記2)前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算ステップを更に含んだことを特徴とする付記1に記載の評価方法。
(付記3)前記計算コスト判定ステップは、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを特徴とする付記1または2に記載の評価方法。
(付記4)前記優先順位決定ステップは、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする付記1、2または3に記載の評価方法。
(付記5)論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、
前記論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定手段と、
前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定手段と、
前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価手段と、
を備えたことを特徴とする検索装置。
(付記6)前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算手段を更に備えたことを特徴とする付記5に記載の検索装置。
(付記7)前記計算コスト判定手段は、過去の経験則あるいは、前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを特徴とする付記5または6に記載の検索装置。
(付記8)前記検索クエリ変換手段は、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする付記5、6または7に記載の検索装置。
以上のように、本発明にかかる評価方法および検索装置は、検索クエリを基にして文書データから該当データを検索する検索システムなどに有用であり、特に、検索クエリによる検索処理を高速化する必要がある場合に適している。
周知技術のBDD法を説明するための図である。 本実施例1にかかる検索装置の概要および特徴を説明するための図である。 本実施例1にかかる検索システムの構成を示す図である。 本実施例1にかかる検索装置の構成を示す機能ブロック図である。 XMLデータのデータ構造の一例を示す図である。 検索クエリのデータ構造の一例を示す図である。 分解検索クエリのデータ構造の一例を示す図である。 計算量見積テーブルのデータ構造の一例を示す図である。 計算量テーブルのデータ構造の一例を示す図である。 抽出結果テーブルのデータ構造の一例である。 論理値テーブルのデータ構造の一例を示す図である。 論理式判定ダイアグラムデータのデータ構造の一例を示す図である。 評価結果テーブルのデータ構造の一例を示す図である。 検索結果データのデータ構造の一例を示す図である。 論理式変換部の処理を説明するための図である。 TOPスタックとTrueスタックとFalseスタックの状態変化を示す図(1)である。 TOPスタックとTrueスタックとFalseスタックの状態変化を示す図(2)である。 TOPスタックとTrueスタックとFalseスタックの状態変化を示す図(3)である。 レベルテーブルと遷移テーブルの状態変化を示す図(1)である。 レベルテーブルと遷移テーブルの状態変化を示す図(2)である。 レベルテーブルと遷移テーブルの状態変化を示す図(3)である。 レベルテーブルと遷移テーブルの状態変化を示す図(4)である。 レベルテーブルと遷移テーブルの状態変化を示す図(5)である。 レベルテーブルと遷移テーブルの状態変化を示す図(6)である。 レベルテーブルと遷移テーブルの状態変化を示す図(7)である。 レベルテーブルと遷移テーブルの状態変化を示す図(8)である。 レベルテーブルと遷移テーブルの状態変化を示す図(9)である。 検索結果データを出力したモニタ画面の一例を示す図である。 本実施例1にかかる検索装置の処理手順を示すフローチャートである。 BDD入力順序決定処理を示すフローチャートである。 BDD構築処理を示すフローチャートである。 論理変数対応処理を示すフローチャートである。 NOT対応処理を示すフローチャートである。 AND対応処理を示すフローチャートである。 OR対応処理を示すフローチャートである。 終了処理を示すフローチャートである。 論理式判定ダイアグラム実行処理を示すフローチャートである。 返答項目出力処理を示すフローチャートである。 実施例1にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
符号の説明
50 ネットワーク
60 端末装置
100 検索装置
110 入力部
120 出力部
130 通信制御IF部
140 入出力制御IF部
150 記憶部
150a XMLデータ
150b 検索クエリ
150c 分解検索クエリ
150d 計算量見積テーブル
150e 計算量テーブル
150f 抽出結果テーブル
150g 論理値テーブル
150h 変換論理式データ
150i 論理式判定ダイアグラムデータ
151 レベルテーブル
152 遷移テーブル
150j 評価結果テーブル
150k 検索結果データ
160 制御部
160a 検索クエリ分解部
160b 計算量見積部
160c 抽出結果テーブル生成部
160d 論理値算出部
160e 論理式変換部
160f ダイアグラム生成部
160g ダイアグラム実行部
160h 検索結果出力部

Claims (6)

  1. 論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法であって、
    前記検索装置は、
    前記論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定ステップと、
    前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定ステップと、
    前記決定された評価順序の優先順位に基づいて、前記計算コストの少ない論理変数を木構造の上位位置に配置し、前記計算コストの大きい論理変数を前記木構造の下位位置に配置して、前記計算コストの大きい論理変数を経由しないで、前記論理式の真または偽の論理結果を得る経路を有する2分木を生成して前記論理式を評価する評価ステップと、
    を含んだことを特徴とする評価方法。
  2. 前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算ステップを更に含んだことを特徴とする請求項1に記載の評価方法。
  3. 前記計算コスト判定ステップは、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを特徴とする請求項1または請求項2に記載の評価方法。
  4. 前記優先順位決定ステップは、前記論理式を先頭から順に読み出す過程において、前記計算コストの大きい論理変数を前記計算コストの少ない論理変数の後に並べ、前記計算コストの大きい論理変数の後に演算子を並べる処理を繰り返し実行することで、前記論理式を変換し、変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする請求項1、2または3に記載の評価方法。
  5. 前記優先順位決定ステップは、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする請求項1、2または3に記載の評価方法。
  6. 論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、
    前記論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定手段と、
    前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定手段と、
    前記決定された評価順序の優先順位に基づいて、前記計算コストの少ない論理変数を木構造の上位位置に配置し、前記計算コストの大きい論理変数を前記木構造の下位位置に配置して、前記計算コストの大きい論理変数を経由しないで、前記論理式の真または偽の論理結果を得る経路を有する2分木を生成して前記論理式を評価する評価手段と、
    を備えたことを特徴とする検索装置。
JP2008052584A 2008-03-03 2008-03-03 評価方法および検索装置 Active JP5223380B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008052584A JP5223380B2 (ja) 2008-03-03 2008-03-03 評価方法および検索装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008052584A JP5223380B2 (ja) 2008-03-03 2008-03-03 評価方法および検索装置

Publications (2)

Publication Number Publication Date
JP2009211312A JP2009211312A (ja) 2009-09-17
JP5223380B2 true JP5223380B2 (ja) 2013-06-26

Family

ID=41184397

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008052584A Active JP5223380B2 (ja) 2008-03-03 2008-03-03 評価方法および検索装置

Country Status (1)

Country Link
JP (1) JP5223380B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5928577B2 (ja) 2012-03-29 2016-06-01 富士通株式会社 判定装置、判定システム、判定方法および判定プログラム
CN107534601B (zh) * 2015-05-15 2018-11-20 三菱电机株式会社 分组过滤装置
CN112633710B (zh) * 2020-12-26 2023-10-13 中国农业银行股份有限公司 作业任务调度方法、装置、设备及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000148759A (ja) * 1998-11-12 2000-05-30 Nippon Telegr & Teleph Corp <Ntt> 論理検索における集合論理演算方法及び集合論理演算プログラムを記録した記録媒体
JP3492246B2 (ja) * 1999-07-16 2004-02-03 富士通株式会社 Xmlデータ検索処理方法および検索処理システム
JP4575064B2 (ja) * 2004-07-29 2010-11-04 三菱電機株式会社 情報検索装置

Also Published As

Publication number Publication date
JP2009211312A (ja) 2009-09-17

Similar Documents

Publication Publication Date Title
JP4645288B2 (ja) 能動学習方法および能動学習システム
US20070136239A1 (en) Stream data processing system and method for avoiding duplication of data process
US8655921B2 (en) True/false decision method for deciding whether search query containing logical expression is true or false
JP5513898B2 (ja) 共有された言語モデル
US20150355836A1 (en) Text input system and method
KR20090127936A (ko) 클라이언트 입력 방식
CN101382946A (zh) 信息处理设备、信息处理方法和程序
US8386238B2 (en) Systems and methods for evaluating a sequence of characters
JP5125662B2 (ja) クエリ変換方法および検索装置
WO2012096388A1 (ja) 意外性判定システム、意外性判定方法およびプログラム
CN110674621B (zh) 一种属性信息填充方法和装置
CN111046659B (zh) 上下文信息生成方法、上下文信息生成装置及计算机可读记录介质
CN110083774B (zh) 应用推荐列表的确定方法、装置、计算机设备及存储介质
WO2004061713A1 (ja) 構造化文書の構造変換装置、構造変換方法、記録媒体
CN109634921B (zh) 一种文件存储的方法及存储系统
JP2009116469A (ja) 情報抽出プログラムおよび情報抽出装置
CN107818160A (zh) 表情标签更新和实现表情获取的方法、设备及系统
JP5223380B2 (ja) 評価方法および検索装置
JP2009169689A (ja) データ分類方法およびデータ処理装置
US20160241671A1 (en) Profile update evaluator
US9886498B2 (en) Title standardization
US8195686B2 (en) Search method and search program
KR102255600B1 (ko) Gan을 이용한 문서형 악성코드 탐지 장치 및 방법
JP4416644B2 (ja) 予測機能付き文字処理装置、方法、記録媒体およびプログラム
Alemi Constructing causal networks through regressions: a tutorial

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101018

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120919

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120925

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121126

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130225

R150 Certificate of patent or registration of utility model

Ref document number: 5223380

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160322

Year of fee payment: 3