検索エンジンを作る

第9回 検索と論理式[その2]

この記事を読むのに必要な時間:およそ 2 分

前回はFINDSPOTのAND条件について解説しました。今回は,それ以外の論理式の実現方法と,N-gramのノイズ語の扱いに関する課題について説明します。

NOT条件

前回解説したAND条件は,目的の検索語を複数指定することで検索対象を絞り込むことができました。絞り込み時に特定の文字列を含まないものが指定できると便利です。FINDSPOTではこのような場合にはNOTという演算子を用います。

例:

"豊臣秀吉" NOT "織田信長"

この検索式は,「豊臣秀吉」を含んでいる文書から,「織田信長」を含まないものを抜き出す検索を行います。

NOT条件はAND条件とよく似た方法で実現しています。先の例ではAND条件の処理と同様,最初に「豊臣秀吉」を含む文書集合と,「織田信長」を含む文書集合を全文検索して求めます。次に,「豊臣秀吉」を含む文書集合と,「織田信長」を含む文書集合との間での否定の集合演算を行います。ここでの否定演算とは「豊臣秀吉」を含む文書集合から,「織田信長」を含む文書集合の要素を省いた文書集合を求める演算となります。このようにすると,AND条件とさほど変わらぬ手順で結果の文書集合を得ることができます。違いは,文書集合同士の論理積(AND)ではなく,否定(NOT)であるという点です。

なお,FINDSPOTでは「NOT "文字列"」のようにNOTの前に前置される文字列を指定せず,いきなりNOTの演算子を用いることはできません。

OR条件

複数の文字列のいずれかが含まれている文書を探したい時があります。このような場合にはFINDSPOTではORという演算子を使用します。

例:

"豊臣秀吉" OR "羽柴秀吉"

この検索式は,「豊臣秀吉」「羽柴秀吉」いずれかの文字列が含まれている文書を検索します。

FINDSPOTではOR条件も集合演算の形で実現しています。この例では,最初に「豊臣秀吉」を含む文書集合と「羽柴秀吉」を含む文書集合を全文検索して求めます。次に2つの文書集合に対して論理和(OR)の集合演算を行い,結果の文書集合を得ます。

複数条件と括弧

AND条件, OR条件, NOT条件はFINDSPOTの内部ではすべて文書集合どうしの集合演算に置き換えることで実現しています。このようにすることで,AND条件, OR条件, NOT条件がどのような順序で混在して現れても,演算子の現れた箇所で該当する集合演算を行えば目的の条件による検索が行えます。

複数条件の検索式は論理演算の順序によって結果が異なってきます。FIDSPOTでは暗黙の優先順位は

文字列1 論理記号1 文字列2 論理記号2 文字列3

のように指定された場合には,次のようになります。

文字列1 論理記号1 ( 文字列2 論理記号2 文字列3 )

つまり,「文字列2 論理記号2 文字列3」の部分が最初に計算され,得られた文書集合と,文字列1の全文検索結果との間で論理記号1に基づく集合演算が行われ,答えが計算されます。

もしも検索式がこの暗黙の優先順位とは意図が違ってしまう場合には明示的に括弧を補って論理式の演算順位を示すことができます。たとえば検索式を次のように指定したとします。

例:

"織田信長" OR "豊臣秀吉" AND "戦国時代"

この検索式は「織田信長」を含む文書もしくは「豊臣秀吉」「戦国時代」の両方を含む文書を検索するという意味になります。()を補うとわかりやすくなります。

例:

"織田信長" OR ( "豊臣秀吉" AND "戦国時代" )

もしも「織田信長」もしくは「豊臣秀吉」を含み,かつ「戦国時代」を含む文書を検索したい場合には次のように()を補って検索式を指定します。

例:

( "織田信長" OR "豊臣秀吉" ) AND "戦国時代"

著者プロフィール

工藤智行(くどうともゆき)

有限会社サイパック取締役社長。システム構築・管理のコンサルティング,ローカライゼーション,文書処理や障害者向けソフトウェアを中心とするプログラミングを長年手がける。 近著『UNIXプログラミングの道具箱』『システム管理現場の鉄則FreeBSD編』等

URLhttp://www.cypac.co.jp/

著書

コメント

コメントの記入