JP2010225137A - 検索プログラム及び検索方法 - Google Patents

検索プログラム及び検索方法 Download PDF

Info

Publication number
JP2010225137A
JP2010225137A JP2010016378A JP2010016378A JP2010225137A JP 2010225137 A JP2010225137 A JP 2010225137A JP 2010016378 A JP2010016378 A JP 2010016378A JP 2010016378 A JP2010016378 A JP 2010016378A JP 2010225137 A JP2010225137 A JP 2010225137A
Authority
JP
Japan
Prior art keywords
character
search
character string
string
state
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.)
Pending
Application number
JP2010016378A
Other languages
English (en)
Inventor
Yusaku Fujii
勇作 藤井
Hiroaki Takebe
浩明 武部
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 JP2010016378A priority Critical patent/JP2010225137A/ja
Publication of JP2010225137A publication Critical patent/JP2010225137A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】スキャナ等で読み込まれた文書情報における文字認識誤りを考慮した文字列検索を実現する。
【解決手段】文字格納部104は、第1の文字と、第1の文字に対応する誤認識文字等である第2の文字を格納し、派生文字列生成部105は、文字格納部104を参照して、検索文字列に含まれる第1の文字を第2の文字に置き換えた派生文字列を生成する。検索部107は、文書格納部103に格納された検索対象文書から、検索文字列及び派生文字列を検索し、出力部113は、検索文字列及び派生文字列の検索結果を出力する。
【選択図】図1

Description

本発明は、文字列を検索するプログラム及び方法に関する。
近年、文書を保管する場所を節約したり、文書を高速に検索したりするために、従来より紙で保存していた文書をスキャナ等で情報処理装置に読み込み、電子化文書として保存することが行われている。また、国会図書館の本をすべてスキャナ等でサーバ装置に読み込み、全国で閲覧可能にしようとする試みもある。
通常、紙文書を電子化して保存する際には、Optical Character Recognition (OCR)により文書中の文字を認識して、認識結果を保存しておくことが多い。これにより、電子化文書の大きな特徴である全文検索等が行えるようになる。ところが、文字認識の認識精度は必ずしも100%ではないため、従来広く使われている文字列完全一致検索を用いて全文検索を行うと、目的の電子文書を見つけられない可能性がある。
従来の柔軟なテキスト検索として、正規表現を用いた検索が知られている。正規表現とは、検索文字列の一部に一定の範囲を設けて検索文字列を指定する方法である。例えば、「報告書[1−5]」や「東京都*区」という指定方法が正規表現に該当する。前者は、「報告書1or報告書2or報告書3or報告書4or報告書5」を表し、後者は、*の部分に任意の文字が任意の数だけ含まれ得ることを表す。正規表現によれば、完全一致検索と比較してより柔軟な検索文字列の指定が可能であり、目的の電子文書を見つけられる可能性が高くなる。
また、検索文字列を高速に検索する方法として、オートマトンを用いた文字列検索も知られている。Aho-Corasick(AC)アルゴリズムは、オートマトンを用いた複数文字列の同時検索を可能とする検索方式の代表的なものの1つである。
さらに、文書中の文字の置換、挿入、及び脱落に対応したあいまい検索を実現するアルゴリズムも知られている。
特開平02−076072号公報 特開平03−131969号公報 特開平08−241335号公報 特開平11−203315号公報 特開平08−305722号公報
A. V. Aho and M. J. Corasick, "Efficient String Matching: An Aid to Bibliographic Search", Communications of the ACM, Vol.18, No.6, p.333-340, 1975. 喜田拓也,「誤りを許したVLDCパタン照合アルゴリズム」,電子情報通信学会技術研究報告COMP,Vol.103 No.622(20040122),p.61−68 丸川勝美、藤澤造道、嶋好博、「認識機能の出力あいまい性を許容した情報検索手法の一検討」、電子情報通信学会論文誌 Vol.J79-D-2 No.5 pp785-794
しかしながら、上述した従来の文字列検索には、次のような問題がある。
正規表現を用いたテキスト検索技術は、OCRによる文字認識誤りを考慮した文字列検索には適用することが困難である。例えば、「社外秘」という文字列を検索する場合、文字認識誤りを考慮すると、「ネ土タト秘」、「杜外秘」、「社朴秘」、「社外木必」等の文字列も検索することが望ましい。「ネ土タト秘」及び「社外木必」は、1つの漢字の偏と旁を誤って別々に認識した場合に相当し、「杜外秘」及び「社朴秘」は、1つの漢字を誤って別の類似する漢字として認識した場合に相当する。
しかし、文字認識誤りを考慮した複数の検索文字列を簡単な正規表現で表すことはできない。複数の正規表現の和を用いれば複数の検索文字列を表すこともできるが、その結果、正規表現による検索が複数回繰り返されるため、検索文字列の数が増えるに従って検索時間が増大する。
本発明の課題は、スキャナ等で読み込まれた文書情報における文字認識誤りを考慮した文字列検索を実現することである。
開示の検索プログラムは、生成ステップ、検索ステップ、及び出力ステップをコンピュータに実行させる。
生成ステップは、第1の文字と第1の文字に対応する第2の文字を格納する文字格納手段を参照して、検索文字列に含まれる第1の文字を第2の文字に置き換えた派生文字列を生成する。検索ステップは、文書格納手段に格納された検索対象文書から、検索文字列及び派生文字列を検索する。出力ステップは、検索文字列及び派生文字列の検索結果を出力する。
例えば、第1の文字に対応する誤認識文字を第2の文字として文字格納手段に格納しておけば、検索文字列中の第1の文字をその誤認識文字に置き換えた派生文字列が生成される。これにより、検索文字列を誤認識した結果の文字列も検索対象文書から検索されるため、ユーザは、文字認識誤りを考慮した複数の検索文字列を指定する必要がない。
また、第1の文字に対応する別表記の文字を第2の文字として文字格納手段に格納しておけば、検索文字列中の第1の文字をその別表記の文字に置き換えた派生文字列が生成される。これにより、検索文字列の別表記の文字列も検索対象文書から検索することができる。
開示の検索プログラムによれば、文字認識誤りや異なる表記を考慮した文字列検索が可能になる。
第1の検索装置の構成図である。 文字テーブルを示す図である。 第1の非決定性有限オートマトンを示す図である。 第1の非決定性有限オートマトンの動作を示す図である。 第1のマスクテーブルを示す図である。 状態遷移に伴うビット列の変化を示す図である。 第1の検索処理のフローチャートである。 第2のマスクテーブルを示す図である。 第3のマスクテーブルを示す図である。 第1の検証処理のフローチャートである。 第2の非決定性有限オートマトンを示す図である。 第2の非決定性有限オートマトンの動作を示す図である。 第4のマスクテーブルを示す図である。 第5のマスクテーブルを示す図である。 第2の検証処理のフローチャートである。 第3の非決定性有限オートマトンを示す図である。 第1の状態番号列を示す図である。 第2の状態番号列を示す図である。 第3の状態番号列を示す図である。 第4の状態番号列を示す図である。 第5の状態番号列を示す図である。 各ビット位置から遷移前の状態番号のビット位置までの距離を示す図である。 状態遷移マスクM(a)の各ビットと状態番号の対応関係を示す図である。 第2の検索処理のフローチャートである。 第4の非決定性有限オートマトンを示す図である。 第5の非決定性有限オートマトンを示す図である。 第3の検証処理のフローチャートである。 第2の検索装置の構成図である。 第3の検索装置の構成を示す図である。 文字認識部により生成されるテキスト文書の一部の実施例である。 第3の検索装置の検索部の動作を示すフローチャートである。 第3の検索装置において生成されるオートマトンの一例を示す図である。 オートマトンに第1候補文字および第2候補文字を作用させたときの状態を示す図である。 第3の検索装置の動作例を示す図である。 第3の検索装置の検索部の動作を詳細に示すフローチャートである。 オートマトンの更新について説明する図である。 情報処理装置の構成図である。 プログラム及びデータを提供する方法を示す図である。
以下、図面を参照しながら、実施形態を詳細に説明する。
図1は、実施形態の検索装置の構成例を示している。図1に示す検索装置(第1の検索装置)は、スキャナ101、文字認識部102、文書格納部103、文字格納部104、派生文字列生成部105、オートマトン生成部106、及び検索部107を備える。図1の検索装置は、入力部108、検索文字列格納部109、閾値格納部110、検証部111、検索結果格納部112、及び出力部113をさらに備える。
スキャナ101は、紙文書を読み込んで文書画像を生成し、文字認識部102は、文書画像の文字認識を行ってテキスト文書を生成する。文書格納部103は、生成されたテキスト文書を格納する。なお、スキャナ101及び文字認識部102は、検索装置と通信ネットワークにより接続された別の情報処理装置に設けても構わない。
ユーザは、入力部108から検索対象となる1つ以上の検索文字列と検索閾値を入力し、検索文字列格納部109及び閾値格納部110は、入力された検索文字列及び検索閾値をそれぞれ格納する。
文字格納部104は、検索文字列を変形して派生文字列を生成するための文字情報を格納する。文字情報としては、例えば、1つ以上の文字とその文字に対応する誤認識文字を登録した文字テーブルが用いられる。派生文字列生成部105は、文字格納部104に格納された文字情報に基づいて、検索文字列格納部109に格納された検索文字列から1つ以上の派生文字列を生成し、検索文字列及び派生文字列をオートマトン生成部106に出力する。
オートマトン生成部106は、検索文字列及び派生文字列からそれらの文字列を検索するためのオートマトンを生成する。検索部107は、生成されたオートマトンを用いて、文書格納部103に格納されたテキスト文書を検索し、テキスト文書中に存在する検索文字列及び派生文字列の候補となる文字列を検出する。
検証部111は、検出された文字列が検索文字列格納部109に格納された検索文字列又は生成された派生文字列のいずれかに該当するか否かを判定する。このとき、閾値格納部110に格納された検索閾値に基づいて判定を行ってもよい。検索閾値を判定に用いない場合は、検索閾値の入力を省略することができる。
検索文字列又は派生文字列が検出された場合、検証部111は、その検索結果を検索結果格納部112に格納する。検索結果には、テキスト文書の識別情報、検出文字列、テキスト文書中の検出文字列の位置等の情報を含めることができる。なお、派生文字列が検出された場合は、その派生文字列を元の検索文字列に逆変換して検索結果格納部112に格納してもよい。
出力部113は、検索結果格納部112に格納された検索結果を出力して、ユーザに提示する。出力方法は画面表示でもよく、ファイル出力でもよく、音声メッセージでもよい。
前述したように、文字認識の認識精度は必ずしも100%ではないため、しばしば文字認識誤りが発生する。このため、文字認識結果のテキスト文書から文字列検索を行う場合、通常の完全一致検索では検索文字列を検出できない場合がある。
そこで、図1の検索装置では、派生文字列生成部105により文字認識誤りのパターンを考慮した派生文字列を生成し、それらの派生文字列をも検索対象とすることで、文字認識誤りを含むテキスト文書も検索結果に含めることができる。以下の説明では、検索文字列又は派生文字列を指す用語として、「目的の文字列」を用いる場合がある。
文字認識誤りには、様々なパターンが考えられる。その代表的なものは、以下のようなパターンである。
誤認識パターン1:例えば、「目」を「自」と認識したり、「I」を「1」と認識したりする等、ある文字を類似する別の文字として認識する。
誤認識パターン2:例えば、「神」を「ネ」と「申」と認識したり、「川」を「ノ」、「l」、及び「1」と認識したりする等、本来1文字であるものを複数の文字として認識する。
誤認識パターン3:例えば、「木市」を「柿」と認識したりする等、本来複数の文字であるものを1文字として認識する。
文字格納部104には、このような誤認識パターンを表す情報がテーブル、リスト、又はその他の形式で格納されている。テーブル形式の場合、例えば、図2に示すような文字テーブルが格納される。
図2の文字テーブルにおいて、誤認識文字201〜210は誤認識パターン1に対応し、誤認識文字211及び212は誤認識パターン2に対応し、誤認識文字213及び214は誤認識パターン3に対応する。
誤認識パターン1に対しては、ある文字に類似する別の文字が誤認識文字として登録される。誤認識パターン2に対しては、1つの分離文字を連結要素単位に分解したとき、それぞれの連結要素の認識結果になり得る文字が誤認識文字として登録される。誤認識パターン3に対しては、隣接する複数の文字を統合して得られる1つの文字が誤認識文字として登録される。1つの文字に対して2つ以上の誤認識パターンが存在する場合は、それらの誤認識文字を重複して登録することも可能である。
なお、文字テーブルには、誤認識パターン1、誤認識パターン2、及び誤認識パターン3のすべてを登録する必要はなく、少なくとも1つ以上を登録しておけばよい。また、これらの誤認識パターンとは異なる別の誤認識パターンを登録してもよい。
派生文字列生成部105は、この文字テーブルを参照して、検索文字列中の文字が文字テーブルに登録されているか否かをチェックする。そして、文字が文字テーブルに登録されていれば、その文字を対応する誤認識文字に置き換えて検索文字列を変形し、派生文字列を生成する。
1つの文字に対して複数の誤認識文字が文字テーブルに登録されている場合や、1つの検索文字列に含まれる複数の文字が文字テーブルに登録されている場合のように、1つの検索文字列に対して複数の変形方法が存在する場合もあり得る。このように複数の変形方法が存在する場合は、すべての変形方法に対応する派生文字列を生成してもよく、所定の個数の派生文字列を生成してもよい。多くの派生文字列を生成するほど、検索文字列の検索精度が向上する。
例えば、誤認識文字205を用いて検索文字列「未来」を変形すると、派生文字列「末来」が生成され、誤認識文字207及び209を用いて検索文字列「バッタ」を変形すると、派生文字列「パッダ」が生成される。また、誤認識文字211及び212を用いて検索文字列「神奈川県川崎市」を変形すると、派生文字列「ネ申奈川県川山奇市」が生成され、誤認識文字213を用いて検索文字列「神奈川県厚木市」を変形すると、派生文字列「神奈川県厚柿」が生成される。
次に、図3から図9までを参照しながら、テキスト文書から検索文字列及び派生文字列を検索する方法について説明する。
上述したように、図1の検索装置は、検索文字列から1つ以上の派生文字列を生成し、検索文字列及び派生文字列を検索対象として文字列検索を行う。検索方法としては、派生文字列を含む複数の文字列のそれぞれについて検索を繰り返す方法と、複数の文字列を同時に検索する方法が考えられる。
ただし、検索を繰り返す方法では、通常、文字列の数が増えるとそれに比例して検索時間が増加するため、多数の派生文字列が生成された場合には、検索時間が膨大になる可能性がある。したがって、検索時間の観点からは、複数の文字列を同時に検索する方法が望ましい。
以下では、検索対象の文字列の数が増加しても検索時間が大きく増加しない検索方法として、オートマトンを用いた文字列検索について説明する。オートマトンを用いた文字列検索の代表的なものとして、前述したACアルゴリズムが挙げられる。
ACアルゴリズムを用いた場合は、検索部107は、検索文字列又は派生文字列と完全一致する文字列を検索対象のテキスト文書から検索する。また、多少の不一致を許容して文字列を検索するようにオートマトンの構造を変形した場合は、検索文字列又は派生文字列と類似する別の文字列が検出される場合もある。そこで、検証部111は、検索部107により検出された文字列が、検索文字列又は派生文字列のいずれであるかを判定する。
検出文字列が派生文字列である場合、検証部111は、その派生文字列を元の検索文字列に逆変換し、検索結果格納部112に格納し、検出文字列が検索文字列である場合は、検出文字列をそのまま検索結果格納部112に格納する。
派生文字列を検索文字列に逆変換するために、派生文字列生成部105は、派生文字列の生成時に、検索文字列と派生文字列の対応関係を登録した変換テーブルを生成し、それを検証部111に出力しておく。検証部111は、この変換テーブルを参照することで、派生文字列を検索文字列に逆変換することができる。
ここで、検索部107が使用するオートマトンとして、非決定性有限オートマトンをビットパラレル法で実装した例について説明する。
図3は、文字列「abac」を検索する場合の非決定性有限オートマトンの例を示している。図3のオートマトンは、5つの状態0〜4を有する。最初は、状態0のみが活性化されており、状態1〜4は非活性状態となっている。各状態が活性化されているときに、矢印の上に記された文字が入力されると、矢印で結ばれた次の状態が活性化され、元の状態は非活性となる。ただし、状態0は常に活性状態にしておく。
検索部107は、検索対象のテキスト文書の先頭文字から順に文字を取り出してオートマトンに作用させ、状態遷移を繰り返す。テキスト文書に目的の文字列「abac」が存在すれば、その位置で状態4が活性化されるため、目的の文字列が検出されたことが分かる。
例えば、テキスト文書Tとして「ababac」が入力された場合、図3のオートマトンは、図4に示すように動作する。図4において、論理“1”は活性状態を示し、論理“0”は非活性状態を示す。テキスト文書Tの最後の文字「c」が入力されたとき、状態3から状態4への遷移が起こり、状態4において文字列「abac」が受理される。
このオートマトンの状態遷移は、以下に述べる方法により、情報処理装置におけるシフト演算、論理積、及び論理和を利用して高速に実行することができる。
状態1〜4は、例えば、状態変数としてのレジスタRの第1ビット(最下位ビット)〜第4ビット(最上位ビット)でそれぞれ表現される。レジスタRのビット値“1”は活性状態を表し、ビット値“0”は非活性状態を表す。状態0は常に活性状態であるため、レジスタRでは省略することができる。
また、図5に示すように、正しい状態遷移を選別するためのマスク(状態遷移マスク)を定義したマスクテーブルが生成される。図5のM(a)、M(b)、及びM(c)は、それぞれ入力文字「a」、「b」、及び「c」に対する状態遷移マスクを表し、M(abc以外)は、それ以外の入力文字に対する状態遷移マスクを表す。
状態遷移マスクは、レジスタRと同じビット数のビット列において、目的の文字列中の同じ文字の位置にビット値“1”を与えることで生成される。状態遷移マスクのビット値“1”は入力文字に対して状態遷移が可能であることを表し、ビット値“0”は状態遷移が不可能であることを表す。
4文字の文字列「abac」の場合、状態遷移マスクは4ビットで表され、最下位ビット(右端のビット)は第1文字に対応し、最上位ビット(左端のビット)は第4文字に対応する。したがって、M(a)、M(b)、M(c)、及びM(abc以外)は、以下のようになる。
M(a)=0101(二進法)=5(十進法)
M(b)=0010(二進法)=2(十進法)
M(c)=1000(二進法)=8(十進法)
M(abc以外)=0000(二進法)=0(十進法)
以下では、二進法表記のビット列であることを明示するために、ビット列の先頭に“0b”を付加するものとする。
レジスタRにより状態1〜4のそれぞれが活性状態か否かを表現し、状態遷移マスクM(a)、M(b)、M(c)、及びM(abc以外)により状態遷移の可否を表現すると、図4の状態遷移は次式により表される。

i =((Ri-1 <<1)|1)&M(T[i]) (1)
T[i]は、N文字のテキスト文書Tから入力されるi番目の文字(i=1,2,...,N)を表し、Ri は、i番目の文字が入力されたときのレジスタRのビット列を表す。ただし、R0 =0b0000、1=0b0001である。“<<1”は、ビット列を左に1ビットシフトするシフト演算を表し、“|”はビット列の論理和を表し、“&”は、ビット列の論理積を表す。
例えば、テキスト文書「ababac」の第4文字「b」が入力されたときのビット列R3 とR4 の関係は、図6のようになる。この場合、ビット列R3 =0b0101を左に1ビットシフトすると、ビット列0b1010が得られる。次に、最下位ビットを“1”にするために、ビット列0b1010とビット列0b0001の論理和を計算すると、ビット列0b1011が得られる。そして、このビット列0b1011と、文字「b」に対する状態遷移マスクM(b)=0b0010の論理積を計算することで、R4 =0b0010が得られる。
このように、検索部107は、テキスト文書Tの各文字を順にオートマトンに入力し、(1)式に従って状態遷移を繰り返す。図4の例では、レジスタRの第4ビットが“1”になると、文字列「abac」が検出されたことになる。
図7は、(1)式に基づく検索処理の例を示すフローチャートである。検索部107は、まず、検索文字列「abac」に対するマスクテーブルMを生成する(ステップ701)。このマスクテーブルMには、図5の状態遷移マスクM(a)、M(b)、M(c)、及びM(abc以外)が含まれる。
次に、レジスタRにビット列0b0000を設定し、入力テキスト文書T中の文字位置を表す制御変数iに1を設定する(ステップ702)。そして、レジスタRを左に1ビットシフトし(ステップ703)、レジスタRとビット列0b0001の論理和によりレジスタRを更新する(ステップ704)。
次に、レジスタRと状態遷移マスクM(T[i])の論理積によりレジスタRを更新し(ステップ705)、レジスタRの最上位ビット(受理ビット)が“1”か否かをチェックする(ステップ706)。
受理ビットが“1”でなければ(ステップ706,NO)、次に、iがテキスト文書Tの最後の文字位置Nに達したか否かをチェックする(ステップ707)。iがNに達していなければ(ステップ707,YES)、iを1だけインクリメントして(ステップ708)、ステップ703以降の処理を繰り返す。
一方、ステップ706において受理ビットが“1”であれば(ステップ706,YES)、検索文字列「abac」を検出したものと判断し、そのときの文字位置iを記録して(ステップ709)、ステップ707以降の処理を行う。そして、ステップ707においてiがNに達すると(ステップ707,NO)、処理を終了する。
例えば、図4のテキスト文書「ababac」の第1文字「a」が入力されたとき、R=0b0000を左に1ビットシフトしてRとビット列0b0001の論理和を計算すると、R=0b0001となる(ステップ704)。次に、Rと状態遷移マスクM(a)=0b0101の論理積を計算すると、R=0b0001となる(ステップ705)。
第2文字「b」が入力されたとき、R=0b0001を左に1ビットシフトしてRとビット列0b0001の論理和を計算すると、R=0b0011となる(ステップ704)。次に、Rと状態遷移マスクM(b)=0b0010の論理積を計算すると、R=0b0010となる(ステップ705)。
第3文字「a」が入力されたとき、R=0b0010を左に1ビットシフトしてRとビット列0b0001の論理和を計算すると、R=0b0101となる(ステップ704)。次に、Rと状態遷移マスクM(a)=0b0101の論理積を計算すると、R=0b0101となる(ステップ705)。
第4文字「b」が入力されたとき、R=0b0101を左に1ビットシフトしてRとビット列0b0001の論理和を計算すると、R=0b1011となる(ステップ704)。次に、Rと状態遷移マスクM(b)=0b0010の論理積を計算すると、R=0b0010となる(ステップ705)。
第5文字「a」が入力されたとき、R=0b0010を左に1ビットシフトしてRとビット列0b0001の論理和を計算すると、R=0b0101となる(ステップ704)。次に、Rと状態遷移マスクM(a)=0b0101の論理積を計算すると、R=0b0101となる(ステップ705)。
第6文字「c」が入力されたとき、R=0b0101を左に1ビットシフトしてRとビット列0b0001の論理和を計算すると、R=0b1011となる(ステップ704)。次に、Rと状態遷移マスクM(c)=0b1000の論理積を計算すると、R=0b1000となる(ステップ705)。このとき、Rの受理ビットが“1”になるため、検索文字列「abac」が検出される(ステップ709)。
次に、ビットパラレル法による非決定性有限オートマトンを用いた文字列検索に検証処理を組み合わせることで、検索文字列及び派生文字列を含む複数文字列を同時に検索する方法について説明する。
例えば、上述した誤認識パターン1の場合は、通常、検索文字列と同じ長さの派生文字列が生成されると考えられるため、同じ長さの複数文字列を同時に検索することが望ましい。
複数文字列の検索は、検索部107による非決定性有限オートマトンを用いた文字列検索に続いて、検証部111による検証処理を行うことで実現される。複数文字列に対する状態遷移マスクは、複数文字列のそれぞれに対して生成された状態遷移マスクの論理和で与えられる。
例えば、2つの文字列「abac」及び「acbc」を検索する場合、文字列「abac」に対するマスクテーブルは図5のようになり、文字列「acbc」に対するマスクテーブルは図8のようになる。したがって、文字列「abac」及び「acbc」に対するマスクテーブルは、図5の状態遷移マスクと図8の状態遷移マスクの論理和で与えられ、図9のようになる。
ただし、図9のマスクテーブルは、文字列の第2文字が「b」又は「c」であり、かつ、第3文字が「a」又は「b」であることを表しているに過ぎない。このため、このマスクテーブルを用いて(1)式に従ってオートマトンを動作させると、目的の文字列「abac」及び「acbc」以外に、文字列「abbc」及び「acac」も検出されてしまう。
そこで、検証部111は、オートマトンで検出された文字列が目的の文字列か否かを判定する。例えば、検出文字列と検索文字列又は派生文字列を逐一比較することで、検出文字列が目的の文字列か否かを判定することができる。
図10は、目的の文字列の数がK個の場合の検証処理の例を示すフローチャートである。検証部111は、まず、検出された文字列をYとして(ステップ1001)、制御変数kを1に設定する(ステップ1002)。次に、目的の文字列のうちk番目の文字列をXとして(ステップ1003)、文字列Xと文字列Yを比較する(ステップ1004)。
文字列Xと文字列Yが一致すれば(ステップ1004,YES)、文字列Xを検出したものと判定する(ステップ1005)。一方、文字列Xと文字列Yが一致しなければ(ステップ1004,NO)、次に、kとKを比較する(ステップ1006)。kの値がKに達していなければ(ステップ1006,NO)、kを1だけインクリメントして(ステップ1007)、ステップ1003以降の処理を繰り返す。そして、kの値がKに達すると(ステップ1006,YES)、処理を終了する。
検証部111は、さらに、ステップ1005で検出された文字列が検索文字列又は派生文字列のいずれであるかを判定し、それが派生文字列であれば、元の検索文字列に逆変換して検索結果格納部112に格納する。
このような検証処理を設けることで、検索対象の文字列の数が増えても検索時間が大幅に増加しない文字列検索を実現することができる。なお、図9には2つの文字列に対するマスクテーブルを示したが、3つ以上の文字列に対するマスクテーブルも、それぞれの文字列に対するマスクテーブルの論理和で与えられる。したがって、3つ以上の文字列も図7及び図10と同様の処理により検索することができる。
ところで、上述した誤認識パターン2及び3の場合は、検索文字列と異なる長さの派生文字列が生成されるため、異なる長さの複数文字列を同時に検索する場合がある。この場合、オートマトン上で文字列が受理される状態を複数設けることで、異なる長さの文字列を検出できるようにする。
図11は、文字列「abac」及び「aca」を検索する場合の非決定性有限オートマトンの例を示している。図11のオートマトンの形状は、図3のオートマトンと同様である。
ただし、状態1が活性化されているときに、文字「b」又は「c」のいずれかが入力されると、状態2が活性化され、次に文字「a」が入力されると、状態3が活性化されて、入力文字列が受理される。状態3で入力文字列が受理された後も、検索処理は続行される。したがって、テキスト文書に文字列「aca」が存在すれば、その位置で状態3が活性化されるため、文字列「aca」が検出されたことが分かる。
この場合、図7の検索処理では、レジスタRの4つのビットのうち第3及び第4ビットが受理ビットして扱われる。
例えば、テキスト文書Tとして「ababaca」が入力された場合、図11のオートマトンは、図12に示すように動作する。図12において、テキスト文書Tの第3文字「a」が入力されたときと、第5文字「a」が入力されたときに、それぞれ状態2から状態3への遷移が起こり、状態3において文字列「aba」が受理される。また、第6文字「c」が入力されたとき、状態3から状態4への遷移が起こり、状態4において文字列「abac」が受理される。さらに、第7文字「a」が入力されたとき、状態2から状態3への遷移が起こり、状態3において文字列「aca」が受理される。
文字列「abac」に対するマスクテーブルは図5のようになり、文字列「aca」に対するマスクテーブルは図13のようになる。したがって、文字列「abac」及び「aca」に対するマスクテーブルは、図5の状態遷移マスクと図13の状態遷移マスクの論理和で与えられ、図14のようになる。
ただし、図14のマスクテーブルは、文字列の第2文字が「b」又は「c」であることを表しているに過ぎない。このため、このマスクテーブルを用いて(1)式に従ってオートマトンを動作させると、目的の文字列「abac」及び「aca」以外に、文字列「acac」及び「aba」も検出されてしまう。
そこで、検証部111は、オートマトンで検出された文字列が目的の文字列か否かを判定する。例えば、検出文字列と同じ長さの検索文字列又は派生文字列を逐一比較することで、検出文字列が目的の文字列か否かを判定することができる。
図15は、検出文字列と同じ長さの目的の文字列の数がK1個の場合の検証処理の例を示すフローチャートである。検証部111は、まず、オートマトンの受理状態に対応する検出文字列長をLに設定する(ステップ1501)。例えば、図11の状態3で文字列が受理された場合はL=3となり、状態4で文字列が受理された場合はL=4となる。
次に、受理時に入力された文字から前の長さLの文字列をYとして(ステップ1502)、制御変数kを1に設定する(ステップ1503)。次に、長さLの目的の文字列のうちk番目の文字列をXとして(ステップ1504)、文字列Xと文字列Yを比較する(ステップ1505)。
文字列Xと文字列Yが一致すれば(ステップ1505,YES)、文字列Xを検出したものと判定する(ステップ1506)。一方、文字列Xと文字列Yが一致しなければ(ステップ1505,NO)、次に、kとK1を比較する(ステップ1507)。kの値がK1に達していなければ(ステップ1507,NO)、kを1だけインクリメントして(ステップ1508)、ステップ1504以降の処理を繰り返す。そして、kの値がK1に達すると(ステップ1507,YES)、処理を終了する。
検証部111は、さらに、ステップ1506で検出された文字列が検索文字列又は派生文字列のいずれであるかを判定し、それが派生文字列であれば、元の検索文字列に逆変換して検索結果格納部112に格納する。
図15の検証処理は、検索文字列及びすべての派生文字列が同じ長さである場合にも有効である。なお、図11には2つの文字列に対するオートマトンを示したが、異なる長さの3つ以上の文字列に対するオートマトンも、それぞれの長さの文字列に対する受理状態を設けることで生成される。したがって、3つ以上の文字列も図7及び図15と同様の処理により検索することができる。
次に、非決定性有限オートマトンと検証処理を組み合わせることで、文字の置換等の文字認識誤りを考慮したあいまい検索を実現する方法について説明する。
文字の置換とは、目的の文字列中の任意の文字が他の文字に置き換わったことを指す。例えば、文字列「abc」中の文字「b」を「x」に置換すると、文字列「axc」が得られる。OCR等による文字認識結果ではこのような置換が発生する場合があるので、文字認識結果のテキスト文書を対象する文字列検索では、置換を考慮したあいまい検索を行うことが効果的である。
図16は、置換を考慮したあいまい検索のための非決定性有限オートマトンの例を示している。図16のオートマトンは、文字列「abc」を検索するためのものであり、15個の状態0〜14を有する。最初は、状態0のみが活性化されており、状態1〜14は非活性状態となっている。各状態が活性化されているときに、矢印の上に記された文字が入力されると、矢印で結ばれた次の状態が活性化され、元の状態は非活性となる。ただし、状態0は常に活性状態にしておく。
図16のオートマトンでは、各状態からの遷移先である次の状態が1つではなく、2つ存在する。例えば、状態0が活性化されているときに、文字「a」が入力されると、状態1が活性化され、「a」以外の文字が入力されると、状態2が活性化される。
検索部107は、検索対象のテキスト文書の先頭文字から順に文字を取り出してオートマトンに作用させ、状態遷移を繰り返す。そして、状態7〜14のいずれかが活性化されたとき、検出された文字列が受理される。テキスト文書に目的の文字列「abc」が存在すれば、その位置で状態7が活性化されるため、目的の文字列が検出されたことが分かる。また、状態8〜14のいずれかが活性化されると、文字列「abc」中の1つ以上の文字を他の文字に置換した別の文字列が検出されたことが分かる。
置換された文字を「?」と記すことにすると、状態8〜14により表される検出文字列は、以下の通りである。
状態8:「ab?」
状態9:「a?c」
状態10:「a??」
状態11:「?bc」
状態12:「?b?」
状態13:「??c」
状態14:「???」
例えば、入力テキスト文書が「axc」の場合、状態0→状態1→状態4→状態9なる状態遷移が行われる。また、入力テキスト文書が「axby」の場合、状態0→状態1→状態4→状態10と状態0→状態2→状態5→状態12なる状態遷移が行われる。
図16のオートマトンでは、目的の文字列に含まれる文字以外の文字が入力された場合でも、状態遷移の遷移先が一意に決まる。このため、文字列が受理された状態の状態番号から、目的の文字列のうち一致している文字とその位置を特定することが可能である。
このオートマトンの状態遷移は、以下に述べる方法により、情報処理装置における数回のシフト演算、論理積、及び論理和を利用して高速に実行することができる。
状態1〜14は、例えば、状態変数としてのレジスタRの第1ビット(最下位ビット)〜第14ビット(最上位ビット)でそれぞれ表現される。レジスタRの各ビットは、以下に示す状態番号の状態を表す。
第1ビット:状態1
第2ビット:状態2
第3ビット:状態3
第4ビット:状態5
第5ビット:状態4
第6ビット:状態6
第7ビット:状態7
第8ビット:状態11
第9ビット:状態9
第10ビット:状態13
第11ビット:状態8
第12ビット:状態12
第13ビット:状態10
第14ビット:状態14
各ビットのビット値“1”は活性状態を表し、ビット値“0”は非活性状態を表す。状態0は常に活性状態であるため、レジスタRでは省略することができる。なお、この状態番号の数列は、以下のようにして作成できる。
ステップ1:図17に示すように、レジスタRのビット列を表すボックス列を用意し、その右端に状態番号2及び1を記入する。
ステップ2:図18に示すように、状態番号2及び1を、左に2個及び4個だけシフトした位置にコピーする。
ステップ3:図19に示すように、コピーされた状態番号2及び1を、図16のオートマトンに従ってそれぞれの状態番号からの遷移先の状態番号に書き換える。
ステップ4:図20に示すように、ステップ3で書き換えられた状態番号6、4、5、及び3を、さらに左に4個及び8個だけシフトした位置にコピーする。
ステップ5:ステップ3に戻って、図21に示すように、コピーされた状態番号6、4、5、及び3をそれぞれの遷移先の状態番号に書き換える。これにより、上述した状態番号の数列が作成される。
なお、目的の文字列が4文字以上であり、オートマトンによる状態遷移の回数が多い場合は、ステップ3〜5の操作を必要な長さの数列ができるまで繰り返せばよい。この場合、ステップ4において、ステップ3で書き換えられたn個の状態番号が、さらに左にn個及び2n個だけシフトした位置にコピーされる。
図21の数列において、各ビット位置から遷移前の状態番号のビット位置までの距離(ステップ4におけるシフト量)は、図22のようになる。図22のビット位置と距離の関係から、検索部107が状態遷移を行うときのビットシフト量が求められる。例えば、状態3の直前の状態は、状態1である。ここで、状態3のビット位置は「3」であり、状態1のビット位置は「1」である。よって、状態3とその直前の状態との間の距離は「2」である。状態4の直前の状態は、状態1である。ここで、状態4のビット位置は「5」である。よって、状態4とその直前の状態との間の距離は「4」である。なお、第3〜第14ビットのビットシフト量は、以下の通りである。
第3及び第4ビット:ビットシフト量=2
第5〜第10ビット:ビットシフト量=4
第11〜第14ビット:ビットシフト量=8
次に、文字列「abc」に対する状態遷移マスクの生成方法について説明する。
ステップ1:Mb=0b11110000110010とする。Mbは、図16において、「a以外」、「b以外」、及び「c以外」と記された矢印が指す状態がすべて活性化されたときのレジスタRのビット列を表す。このビット列の状態番号2、4、6、8、10、12、及び14のビット値は“1”であり、それ以外の状態番号のビット値は“0”である。
ステップ2:文字列「abc」中の各文字に対する状態遷移マスクM(a)、M(b)、及びM(c)を、その文字位置に対応する定数とMbの排他的論理和で定義する。各文字位置に対応する定数は、以下の通りである。
第1文字:0b00000000000011
第2文字:0b00000000111100
第3文字:0b11111111000000
第1文字に対応する定数は、図17の2つの状態番号のビット値を“1”とし、それ以外の状態番号のビット値を“0”にしたビット列に対応する。第2文字に対応する定数は、図19で書き換えられた4つの状態番号のビット値を“1”とし、それ以外の状態番号のビット値を“0”にしたビット列に対応する。第3文字に対応する定数は、図21で書き換えられた8個の状態番号のビット値を“1”とし、それ以外の状態番号のビット値を“0”にしたビット列に対応する。
したがって、状態遷移マスクM(a)、M(b)、及びM(c)は、以下のようになる。
M(a)=0b00000000000011^Mb
=0b00000000000011^0b11110000110010
=0b11110000110001
M(b)=0b00000000111100^Mb
=0b00000000111100^0b11110000110010
=0b11110000001110
M(c)=0b11111111000000^Mb
=0b11111111000000^0b11110000110010
=0b00001111110010
“^”は、排他的論理和を表す。
ステップ3:M(abc以外)=Mbとする。
例えば、M(a)の各ビットと状態番号の対応関係は、図23のようになる。M(a)のビット値“1”に対応する状態番号は、図16において、入力文字が「a」である場合の遷移先の候補を表している。M(b)、M(c)、及びM(abc以外)についても同様に、ビット値“1”は入力文字に対して状態遷移が可能であることを表し、ビット値“0”は状態遷移が不可能であることを表す。
たとえば、状態0において「a」が入力されると、状態1が活性化される。よって、状態1を表す「ビット位置=1」に「1」が設定される。また、状態1において「a」が入力されると、状態4が活性化される。よって、状態4を表す「ビット位置=5」に「1」が設定される。さらに、状態2において「a」が入力されると、状態6が活性化される。よって、状態6を表す「ビット位置=6」に「1」が設定される。同様に、状態3、4、5、6において「a」が入力されると、それぞれ状態8、10、12、14が活性化される。よって、状態8、10、12、14を表す「ビット位置=11、13、12、14」にそれぞれ「1」が設定される。したがって、「M(a)=0b11110000110001」が得られる。
レジスタRにより状態1〜14のそれぞれが活性状態か否かを表現し、状態遷移マスクM(a)、M(b)、M(c)、及びM(abc以外)により状態遷移の可否を表現すると、図16の状態遷移は次式により表される。

i =(((Ri-1 <<2)&M1)|((Ri-1 <<4)&M2)
|((Ri-1 <<8)&M3)|3)&M(T[i]) (2)
T[i]は、N文字のテキスト文書Tから入力されるi番目の文字(i=1,2,...,N)を表し、Ri は、i番目の文字が入力されたときのレジスタRのビット列を表す。ただし、R0 =0b00000000000000である。M1〜M3及び3は、以下のビット列を表す。
M1=0b00000000001100
M2=0b00001111110000
M3=0b11110000000000
3=0b00000000000011
“<<2”、“<<4”、及び“<<8”は、ビット列を左にそれぞれ2ビット、4ビット、及び8ビットシフトするシフト演算を表し、“|”はビット列の論理和を表し、“&”は、ビット列の論理積を表す。
検索部107は、テキスト文書Tの各文字を順にオートマトンに入力し、(2)式に従って状態遷移を繰り返す。このとき、レジスタRにおいて“0”から“1”に変化したビットの位置により、入力文字が目的の文字列に含まれるどの文字と一致したかが分かる。また、状態7〜14のいずれが活性化されたかをチェックすることで、目的の文字列のうち何%の文字が入力文字列と一致したかが分かる。
例えば、状態9が活性化された場合、文字列「abc」のうち第1文字「a」と第3文字「c」を含む文字列が検出されことが分かり、文字列の文字数の2/3=66%が一致することになる。ただし、第2文字「b」がどの文字に置換されたのかは分からない。
検出された文字列の判定基準としては様々なものが考えられるが、一例として検出文字列に含まれている目的の文字列中の文字の割合を用いることができる。この場合、検証部111は、次式により再現率を計算し、得られた再現率を閾値格納部110に格納された検索閾値と比較する。

再現率=(検出文字列に含まれている目的の文字列中の文字の数)
/(目的の文字列長) (3)
(3)式による再現率の計算例は、以下の通りである。
(a)文字列「関係社外秘」の検索時に文字列「関係社外秘」が検出された場合
再現率=5/5=100%
(b)文字列「関係社外秘」の検索時に文字列「関系社外秘」が検出された場合
再現率=4/5=80%
また、検出文字列に含まれている目的の文字列中の文字の数そのものを検索閾値と比較しても構わない。さらに、検出文字列に含まれていない目的の文字列中の文字(足りない文字)の数の割合を、再現率の代わりの判定基準として用いてもよい。
図24は、判定基準として再現率を用いた場合の(2)式に基づく検索処理の例を示すフローチャートである。検索部107は、まず、検索文字列「abc」に対するマスクテーブルMを生成する(ステップ2401)。このマスクテーブルMには、上述した状態遷移マスクM(a)、M(b)、M(c)、及びM(abc以外)が含まれる。
次に、レジスタRにビット列0b00000000000000を設定し、制御変数iに1を設定する(ステップ2402)。そして、レジスタRのビット列に次式のようなビット操作を行って、レジスタRを更新する(ステップ2403)。

R=((Ri-1 <<2)&M1)|((Ri-1 <<4)&M2)
|((Ri-1 <<8)&M3) (4)
次に、レジスタRとビット列0b00000000000011の論理和によりレジスタRを更新する(ステップ2404)。さらに、レジスタRと状態遷移マスクM(T[i])の論理積によりレジスタRを更新し(ステップ2405)、レジスタRの第7〜第13ビット(受理ビット)が“1”か否かをチェックする(ステップ2406)。なお、第14ビットに対応する状態14は再現率が0%であるため、受理ビットのチェック対象から除外されている。
すべての受理ビットが“1”でなければ(ステップ2406,NO)、次に、iがテキスト文書Tの最後の文字位置Nに達したか否かをチェックする(ステップ2407)。iがNに達していなければ(ステップ2407,YES)、iを1だけインクリメントして(ステップ2408)、ステップ2403以降の処理を繰り返す。
一方、ステップ2406においていずれかの受理ビットが“1”であれば(ステップ2406,YES)、その受理ビットに対応する検出文字列を検証部111に出力する。
検証部111は、その検出文字列の再現率を計算し、検索閾値と比較する(ステップ2409)。そして、再現率が検索閾値以上であれば(ステップ2409,YES)、検索文字列「abc」を検出したものと判断し、そのときの文字位置iを記録する(ステップ2410)。
その後、検索部107は、ステップ2407以降の処理を行う。再現率が検索閾値未満であれば(ステップ2409,NO)、検索部107は、そのままステップ2407以降の処理を行う。そして、ステップ2407においてiがNに達すると(ステップ2407,NO)、処理を終了する。
一例として、テキスト文書「axc」の第1文字「a」が入力されたとき、R=0b00000000000000に対して(4)式のビット操作を行うと、次のようになる(ステップ2403)。
R=((0b00000000000000<<2)
&0b00000000001100)
|((0b00000000000000<<4)
&0b00001111110000)
|((0b00000000000000<<8)
&0b11110000000000)
=(0b00000000000000&0b00000000001100)
|(0b00000000000000&0b00001111110000)
|(0b00000000000000&0b11110000000000)
=0b00000000000000|0b00000000000000
|0b00000000000000
=0b00000000000000
次に、Rとビット列0b00000000000011の論理和を計算すると、R=0b00000000000011となる(ステップ2404)。次に、Rと状態遷移マスクM(a)=0b11110000110001の論理積を計算すると、R=0b00000000000001となる(ステップ2405)。
第2文字「x」が入力されたとき、R=0b00000000000001に対して(4)式のビット操作を行うと、次のようになる(ステップ2403)。
R=((0b00000000000001<<2)
&0b00000000001100)
|((0b00000000000001<<4)
&0b00001111110000)
|((0b00000000000001<<8)
&0b11110000000000)
=(0b00000000000100&0b00000000001100)
|(0b00000000010000&0b00001111110000)
|(0b00000100000000&0b11110000000000)
=0b00000000000100|0b00000000010000
|0b00000000000000
=0b00000000010100
次に、Rとビット列0b00000000000011の論理和を計算すると、R=0b00000000010111となる(ステップ2404)。次に、Rと状態遷移マスクM(abc以外)=0b11110000110010の論理積を計算すると、R=0b00000000010010となる(ステップ2405)。
第3文字「c」が入力されたとき、R=0b00000000010010に対して(4)式のビット操作を行うと、次のようになる(ステップ2403)。
R=((0b00000000010010<<2)
&0b00000000001100)
|((0b00000000010010<<4)
&0b00001111110000)
|((0b00000000010010<<8)
&0b11110000000000)
=(0b00000001001000&0b00000000001100)
|(0b00000100100000&0b00001111110000)
|(0b01001000000000&0b11110000000000)
=0b00000000001000|0b00000100100000
|0b01000000000000
=0b01000100101000
次に、Rとビット列0b00000000000011の論理和を計算すると、R=0b01000100101011となる(ステップ2404)。次に、Rと状態遷移マスクM(c)=0b00001111110010の論理積を計算すると、R=0b00000100100010となる(ステップ2405)。このとき、Rの第9ビット(状態9に対応する受理ビット)が“1”になるため、文字列「a?c」が検出される(ステップ2406,YES)。
そこで、文字列「a?c」の再現率66%が検索閾値と比較される(ステップ2409)。このとき、検索閾値が65%以下であれば、検索文字列「abc」が検出されたものと判断される。
別の例として、テキスト文書「axby」の場合、第1文字及び第2文字が入力されたときの処理は、テキスト文書「axc」の場合と同じである。
第3文字「b」が入力されたとき、R=0b00000000010010に対して(4)式のビット操作を行うと、次のようになる(ステップ2403)。
R=((0b00000000010010<<2)
&0b00000000001100)
|((0b00000000010010<<4)
&0b00001111110000)
|((0b00000000010010<<8)
&0b11110000000000)
=(0b00000001001000&0b00000000001100)
|(0b00000100100000&0b00001111110000)
|(0b01001000000000&0b11110000000000)
=0b00000000001000|0b00000100100000
|0b01000000000000
=0b01000100101000
次に、Rとビット列0b00000000000011の論理和を計算すると、R=0b01000100101011となる(ステップ2404)。次に、Rと状態遷移マスクM(b)=0b11110000001110の論理積を計算すると、R=0b01000000001010となる(ステップ2405)。このとき、Rの第13ビット(状態10に対応する受理ビット)が“1”になるため、文字列「a??」が検出される(ステップ2406,YES)。
そこで、文字列「a??」の再現率33%が検索閾値と比較される(ステップ2409)。このとき、検索閾値が34%以上であれば、検索文字列「abc」は検出されなかったものと判断される。
第4文字「y」が入力されたとき、R=0b01000000001010に対して(4)式のビット操作を行うと、次のようになる(ステップ2403)。
R=((0b01000000001010<<2)
&0b00000000001100)
|((0b01000000001010<<4)
&0b00001111110000)
|((0b01000000001010<<8)
&0b11110000000000)
=(0b00000000101000&0b00000000001100)
|(0b00000010100000&0b00001111110000)
|(0b00101000000000&0b11110000000000)
=0b00000000001000|0b00000010100000
|0b00100000000000
=0b00100010101000
次に、Rとビット列0b00000000000011の論理和を計算すると、R=0b00100010101011となる(ステップ2404)。次に、Rと状態遷移マスクM(abc以外)=0b11110000110010の論理積を計算すると、R=0b00100000100010となる(ステップ2405)。このとき、Rの第12ビット(状態12に対応する受理ビット)が“1”になるため、文字列「?b?」が検出される(ステップ2406,YES)。
そこで、文字列「?b?」の再現率33%が検索閾値と比較される(ステップ2409)。このとき、検索閾値が34%以上であれば、検索文字列「abc」は検出されなかったものと判断される。
非決定性有限オートマトンと検証処理の組み合わせによる文字列検索では、図16に示したように、オートマトンの状態遷移を工夫することで、文字の置換を考慮したあいまい検索を行うことができる。このため、ACアルゴリズムよりも高性能なあいまい検索が実現される。
次に、検索文字列及び派生文字列を含む複数文字列を同時に検索するあいまい検索について説明する。複数文字列を同時に検索するには、非決定性有限オートマトンの各文字を複数の候補文字の和で表現すればよい。例えば、図16のオートマトンにおいて、2つの文字列「abc」及び「daf」を検索する場合、矢印の上に記された文字を次のように置き換える。
「a」→「a/d」
「a以外」→「ad以外」
「b」→「b/a」
「b以外」→「ba以外」
「c」→「c/f」
「c以外」→「cf以外」
これにより、図16のオートマトンは、図25のように変更される。文字列「abc」及び「daf」に対する状態遷移マスクは、以下の手順で生成される。
ステップ1:Mb=0b11110000110010とする。このMbは、文字列「abc」に対する状態遷移マスクを生成する場合と同じである。
ステップ2:文字列「abc」及び「daf」中の各文字に対する状態遷移マスクM(a)、M(b)、M(c)、M(d)、及びM(f)を、その文字位置に対応する定数の論理和とMbの排他的論理和で定義する。各文字位置に対応する定数は、文字列「abc」に対する状態遷移マスクを生成する場合と同じである。
例えば、文字「a」は、文字列「abc」の第1文字であり、文字列「daf」の第2文字である。したがって、文字「a」の文字位置に対応する定数の論理和は、第1文字に対応する定数0b00000000000011と、第2文字に対応する定数0b00000000111100との論理和である。
一方、文字「b」は、文字列「abc」の第2文字であり、文字列「daf」には含まれていない。したがって、文字「b」の文字位置に対応する定数の論理和は、第2文字に対応する定数0b00000000111100そのものである。
状態遷移マスクM(a)、M(b)、M(c)、M(d)、及びM(f)は、以下のようになる。
M(a)=(0b00000000000011|0b00000000111100)
^Mb
=0b00000000111111^0b11110000110010
=0b11110000001101
M(b)=0b00000000111100^Mb
=0b00000000111100^0b11110000110010
=0b11110000001110
M(c)=0b11111111000000^Mb
=0b11111111000000^0b11110000110010
=0b00001111110010
M(d)=0b00000000000011^Mb
=0b00000000000011^0b11110000110010
=0b11110000110001
M(f)=0b11111111000000^Mb
=0b11111111000000^0b11110000110010
=0b00001111110010
ステップ3:M(abcdf以外)=Mbとする。
ただし、以上の状態遷移マスクは、文字列の第1文字が「a」又は「d」であり、かつ、第2文字が「b」又は「a」であり、かつ、第3文字が「c」又は「f」であることを表しているに過ぎない。このため、(2)式に従ってオートマトンを動作させると、状態7において、目的の文字列「abc」及び「daf」以外に、文字列「abf」、「aac」、「aaf」、「dbc」、「dbf」、及び「dac」も検出されてしまう。
そこで、検証部111は、オートマトンで検出された文字列が検索文字列又は派生文字列であるか否かを判定する。オートマトンで文字列が受理された状態の状態番号により、目的の文字列のうち一致している文字の位置は既に判明しているため、検証処理は簡便に行うことができる。
例えば、状態9で文字列が受理された場合、検出文字列には「axc」、「axf」等も含まれる。しかし、文字列の第1文字「a」と第3文字「c/f」は一致していることが保証されている。このため、検証処理においては、文字列「abc」又は「daf」中の特定の文字が存在するか否かだけを確認すればよい。この検証処理の手順については後で説明する。
ところで、図25のオートマトンは同じ長さの複数文字列を検索するためのものであるが、異なる長さの複数文字列を同時に検索する場合は、最長文字列の長さに合わせてオートマトンを生成すればよい。このとき、他の文字列の先頭に1つ以上のダミー文字(空白文字)を付加して、すべての文字列の長さを最長文字列の長さに一致させる。これにより、図25のオートマトンと同様に、右端の複数の状態で複数文字列を検出することができる。
例えば、図16のオートマトンにおいて、2つの文字列「abc」及び「da」を検索する場合、矢印の上に記された文字を次のように置き換える。
「b」→「b/d」
「b以外」→「bd以外」
「c」→「c/a」
「c以外」→「ca以外」
これにより、図16のオートマトンは、図26のように変更される。文字列「abc」及び「da」に対する状態遷移マスクは、以下の手順で生成される。
ステップ1:Mb=0b11110000110010とする。このMbは、文字列「abc」に対する状態遷移マスクを生成する場合と同じである。
ステップ2:文字列「da」を最長文字列「abc」と同じ長さにするために、先頭にダミー文字「_」を付加して文字列「_da」に変更する。そして、文字列「abc」及び「_da」中の各文字に対する状態遷移マスクM(a)、M(b)、M(c)、及びM(d)を、その文字位置に対応する定数の論理和とMbの排他的論理和で定義する。各文字位置に対応する定数は、文字列「abc」に対する状態遷移マスクを生成する場合と同じである。
例えば、文字「a」は、文字列「abc」の第1文字であり、文字列「_da」の第3文字である。したがって、文字「a」の文字位置に対応する定数の論理和は、第1文字に対応する定数0b00000000000011と、第3文字に対応する定数0b11111111000000との論理和である。
一方、文字「b」は、文字列「abc」の第2文字であり、文字列「_da」には含まれていない。したがって、文字「b」の文字位置に対応する定数の論理和は、第2文字に対応する定数0b00000000111100そのものである。
状態遷移マスクM(a)、M(b)、M(c)、及びM(d)は、以下のようになる。
M(a)=(0b00000000000011|0b11111111000000)
^Mb
=0b11111111000011^0b11110000110010
=0b00001111110001
M(b)=0b00000000111100^Mb
=0b00000000111100^0b11110000110010
=0b11110000001110
M(c)=0b11111111000000^Mb
=0b11111111000000^0b11110000110010
=0b00001111110010
M(d)=0b00000000111100^Mb
=0b00000000111100^0b11110000110010
=0b11110000001110
ステップ3:M(abcd以外)=Mbとする。
ただし、以上の状態遷移マスクは、文字列の第2文字が「b」又は「d」であり、かつ、第3文字が「c」又は「a」であることを表しているに過ぎない。このため、(2)式に従ってオートマトンを動作させると、状態7及び11において、目的の文字列「abc」及び「_da」以外に、文字列「adc」、「ada」、「aba」、「_bc」、「_ba」、及び「_dc」も検出されてしまう。
そこで、検証部111は、オートマトンで検出された文字列が検索文字列又は派生文字列であるか否かを判定する。
次に、複数文字列のあいまい検索における検証処理について説明する。複数文字列のあいまい検索を行う場合、図24の検索処理のステップ2409及び2410の処理が、図27に示すような検証処理に置き換えられる。
検証部111は、まず、図24のステップ2406で“1”となった受理ビットに対応する状態番号から、検出文字列中の一致文字(?以外の文字)の位置をx(s)に設定する(ステップ2701)。一致文字にはダミー文字も含まれ、一致文字の個数をS個とすると、検出文字列の先頭に近い位置から順にS個の位置x(1)〜x(S)が設定される。
次に、目的の文字列(検索文字列及び派生文字列)の長さをLとし(ステップ2702)、制御変数kを1に設定する(ステップ2703)。目的の文字列の長さが異なる場合は、最長文字列の長さがLに設定される。
次に、目的の文字列のうちk番目の文字列をXとし(ステップ2704)、制御変数s及びfにS及び0を設定する(ステップ2705)。sは、s番目の一致文字を表し、s=Sは、検出文字列の末尾に最も近い一致文字を指す。fは、検出文字列に含まれている文字列X中の文字の数を表す。
次に、テキスト文書Tの第(i−(L−x(s)))文字であるT[i−(L−x(s))]と、文字列Xの第x(s)文字であるX[x(s)]とを比較する(ステップ2706)。iは、図24のステップ2406で受理ビットが“1”になったときのテキスト文書Tの入力文字の位置を表す。
T[i−(L−x(s))]とX[x(s)]が一致しなければ(ステップ2706,NO)、sが1に達した否かをチェックする(ステップ2707)。sが1に達していなければ(ステップ2707,YES)、sを1だけデクリメントし(ステップ2708)、X[x(s)]がダミー文字か否かを判定する。X[x(s)]がダミー文字でなければ(ステップ2709,NO)、ステップ2706以降の処理を繰り返す。
ステップ2706においてT[i−(L−x(s))]とX[x(s)]が一致すれば(ステップ2706,YES)、fを1だけインクリメントし(ステップ2712)、ステップ2707以降の処理を行う。
ステップ2707においてsが1に達すれば(ステップ2707,NO)、文字列Xの全文字数に対する文字数fの割合を計算し、検索閾値と比較する(ステップ2713)。文字列Xにダミー文字が含まれている場合は、ダミー文字を除いた文字数が文字列Xの全文字数として用いられる。ステップ2709においてX[x(s)]がダミー文字である場合も(ステップ2709,YES)、ステップ2713の処理が行われる。
文字数fの割合が検索閾値以上であれば(ステップ2713,YES)、文字列Xを検出したものと判断し、そのときの文字位置iを記録する(ステップ2714)。文字数fの割合が検索閾値未満であれば(ステップ2713,NO)、kが目的の文字列の数Kに達した否かをチェックする(ステップ2710)。
kがKに達していなければ(ステップ2710,NO)、kを1だけインクリメントし(ステップ2711)、ステップ2704以降の処理を繰り返す。そして、ステップ2710においてkがKに達すると(ステップ2710,YES)、処理を終了する。
一例として、図25のオートマトンを用いてテキスト文書「axc」から文字列「abc」及び「daf」を検索する場合を説明する。この場合、i=3のときに状態9において文字列「a/d?c/f」が検出されるため、第1文字及び第3文字が一致文字として扱われ、S=2、x(1)=1、x(2)=3となる(ステップ2701)。また、文字列「abc」及び「daf」は3文字であるから、L=3となる(ステップ2702)。
次に、X=abcとおいて、入力済みのテキスト文書「axc」と文字列Xが末尾から順に比較される(ステップ2706〜2709)。まず、s=S=2のとき、x(2)=3であるから、T[3−(3−3)]=T[3]とX[3]が比較される(ステップ2706)。T[3]=X[3]=cであるから、f=1となる(ステップ2712)。
次に、s=1のとき、x(1)=1であるから、T[3−(3−1)]=T[1]とX[1]が比較される(ステップ2706)。T[1]=X[1]=aであるから、f=2となる(ステップ2712)。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=2の割合66%が検索閾値と比較される(ステップ2713)。このとき、検索閾値が65%以下であれば、文字列「abc」が検出されたものと判断される(ステップ2714)。
別の例として、テキスト文書「axby」の場合、i=3のときに状態10において文字列「a/d??」が検出されるため、第1文字が一致文字として扱われ、S=1、x(1)=1となる(ステップ2701)。この場合も、L=3である(ステップ2702)。
次に、X=abcとおいて、入力済みのテキスト文書の「axb」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=1であるから、T[3−(3−1)]=T[1]とX[1]が比較される(ステップ2706)。T[1]=X[1]=aであるから、f=1となる(ステップ2712)。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=1の割合33%が検索閾値と比較される(ステップ2713)。このとき、検索閾値が34%以上であれば、文字列「abc」は検出されなかったものと判断される。
次に、X=dafとおいて、入力済みのテキスト文書「axb」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=1であるから、T[3−(3−1)]=T[1]とX[1]が比較される(ステップ2706)。T[1]=aかつX[1]=dであるから、f=0のままである。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=0の割合0%が検索閾値と比較される(ステップ2713)。このとき、文字列「daf」は検出されなかったものと判断される。
次に、i=4のときに状態12において文字列「?b/a?」が検出されるため、第2文字が一致文字として扱われ、S=1、x(1)=2となる(ステップ2701)。
次に、X=abcとおいて、入力済みのテキスト文書「axby」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=2であるから、T[4−(3−2)]=T[3]とX[2]が比較される(ステップ2706)。T[3]=X[2]=bであるから、f=1となる(ステップ2712)。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=1の割合33%が検索閾値と比較される(ステップ2713)。このとき、検索閾値が34%以上であれば、文字列「abc」は検出されなかったものと判断される。
次に、X=dafとおいて、入力済みのテキスト文書「axby」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=2であるから、T[4−(3−2)]=T[3]とX[2]が比較される(ステップ2706)。T[3]=bかつX[2]=aであるから、f=0のままである。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=0の割合0%が検索閾値と比較される(ステップ2713)。このとき、文字列「daf」は検出されなかったものと判断される。
以上より、テキスト文書「axby」からは、文字列「abc」又は「daf」のいずれも検出されない。
さらに別の例として、図26のオートマトンを用いてテキスト文書「axc」から文字列「abc」及び「da」を検索する場合を説明する。この場合、i=3のときに状態9において文字列「a?c/a」が検出されるため、図25のオートマトンを用いた場合と同様にして、文字列「abc」が検出されたものと判断される。
一方、テキスト文書「axby」の場合、i=3のときに状態10において文字列「a??」が検出されるため、第1文字が一致文字として扱われ、S=1、x(1)=1となる(ステップ2701)。この場合も、L=3である(ステップ2702)。
次に、X=abcとおいて、入力済みのテキスト文書の「axb」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=1であるから、T[3−(3−1)]=T[1]とX[1]が比較される(ステップ2706)。T[1]=X[1]=aであるから、f=1となる(ステップ2712)。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=1の割合33%が検索閾値と比較される(ステップ2713)。このとき、検索閾値が34%以上であれば、文字列「abc」は検出されなかったものと判断される。
次に、X=_daとおいて、入力済みのテキスト文書「axb」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=1であるから、T[3−(3−1)]=T[1]とX[1]が比較される(ステップ2706)。T[1]=aかつX[1]=_であるから、f=0のままである。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=0の割合0%が検索閾値と比較される(ステップ2713)。このとき、文字列「da」は検出されなかったものと判断される。
次に、i=4のときに状態12において文字列「?b/d?」が検出されるため、第2文字が一致文字として扱われ、S=1、x(1)=2となる(ステップ2701)。
次に、X=abcとおいて、入力済みのテキスト文書「axby」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=2であるから、T[4−(3−2)]=T[3]とX[2]が比較される(ステップ2706)。T[3]=X[2]=bであるから、f=1となる(ステップ2712)。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=1の割合33%が検索閾値と比較される(ステップ2713)。このとき、検索閾値が34%以上であれば、文字列「abc」は検出されなかったものと判断される。
次に、X=_daとおいて、入力済みのテキスト文書「axby」と文字列Xが比較される(ステップ2706〜2709)。まず、s=S=1のとき、x(1)=2であるから、T[4−(3−2)]=T[3]とX[2]が比較される(ステップ2706)。T[3]=bかつX[2]=dであるから、f=0のままである。
ここで、sが1に達したため、文字列Xの全文字数3に対する文字数f=0の割合0%が検索閾値と比較される(ステップ2713)。このとき、文字列「da」は検出されなかったものと判断される。
以上より、テキスト文書「axby」からは、文字列「abc」又は「da」のいずれも検出されない。
検証部111は、図27のステップ2714で検出された文字列が検索文字列又は派生文字列のいずれであるかを判定し、それが派生文字列であれば、元の検索文字列に逆変換して検索結果格納部112に格納する。
図27の検証処理は、検索文字列及び派生文字列が同じ長さであるか否かにかかわらず有効である。この検証処理によれば、オートマトンの受理状態から検出文字列における一致文字の位置を特定し、検出文字列と目的の文字列におけるその位置の文字同士を比較することで、検出文字列の検証を高速に行うことができる。
なお、図25及び図26には2つの文字列に対するオートマトンを示したが、3つ以上の文字列に対するオートマトンも、矢印の上に記された文字を複数の候補文字で置き換えることで生成される。したがって、3つ以上の文字列も図24及び図27と同様の処理により検索することができる。
図28は、別の実施形態の検索装置の構成例を示している。図28に示す検索装置(第2の検索装置)は、図1の構成に出力部2801及び編集部2802を追加した構成を有する。出力部2801は、派生文字列生成部105により生成された派生文字列を外部に出力する。出力方法は画面表示でもよく、ファイル出力でもよい。
ユーザは、出力された派生文字列を確認し、必要であれば、編集部2802を用いて派生文字列を編集する。なお、派生文字列を編集する代わりに、文字格納部104に格納された文字情報を編集してもよい。これにより、ユーザが自ら派生文字列の追加又は削除を行ったり、派生文字列生成方法を変更したりすることができる。
ところで、派生文字列の生成方法としては、誤認識文字への置き換え以外にも、表記の異なる別の文字への置き換えが考えられる。このような派生文字列には、以下のものが含まれる。
(1)片仮名と平仮名の揺らぎを吸収する派生文字列
例えば、「ハミガキ粉」と「はみがき粉」のように、片仮名の文字列と平仮名の文字列を相互に変換することで、派生文字列を生成する。
(2)全角文字と半角文字の揺らぎを吸収する派生文字列
全角文字列と半角文字列を相互に変換することで、派生文字列を生成する。
(3)難読漢字の漢字表記と平仮名表記の揺らぎを吸収する派生文字列
例えば、「情報漏洩」と「情報漏えい」や、「曖昧」と「あいまい」のように、漢字文字列と平仮名文字列を相互に変換することで、派生文字列を生成する。
(4)住所表記の揺らぎを吸収する派生文字列
例えば、「中原区上小田中4丁目1番地の1」と「中原区上小田中4−1−1」のように、異なる住所標記を相互に変換することで、派生文字列を生成する。
(5)別称、愛称、又は略称を持つ名詞のための派生文字列
例えば、「パソコン」と「PC」のように、名詞とその別称、愛称、又は略称とを相互に変換することで、派生文字列を生成する。
これらの派生文字列を生成するには、図2の文字テーブルにおいて、検索文字列中の文字の代わりに検索文字列中の文字列を登録し、誤認識文字の代わりに別表記の文字列を登録すればよい。
図29は、さらに他の実施形態の検索装置の構成を示す図である。図29に示す検索装置(第3の検索装置)は、スキャナ101、文字認識部2901、文書格納部2902、文字格納部104、派生文字列生成部105、オートマトン生成部106、検索部2903、入力部108、検索文字列格納部109、閾値格納部110、検証部111、検索結果格納部112、出力部113を備える。なお、スキャナ101、文字格納部104、派生文字列生成部105、オートマトン生成部106、入力部108、検索文字列格納部109、閾値格納部110、検証部111、検索結果格納部112、出力部113は、特に限定されるものではないが、図1に示す対応する機能要素により実現される。また、第3の検索装置は、文字格納部104および派生文字列生成部105を備えなくてもよい。すなわち、第3の検索装置において、文字格納部104および派生文字列生成部105は必須の構成要素ではない。
文字認識部2901は、スキャナ101により得られる文字画像について文字認識を行い、テキスト文書を生成する。このとき、文字認識部2901は、文字画像上の各文字について複数の候補文字を生成する。文書格納部2902は、文字認識部2901により生成されるテキスト文書を格納する。なお、文字認識部2901および文書格納部2902は、検索装置の一部であってもよいし、検索装置の一部でなくてもよい。
図30は、第3の検索装置において、文字認識部2901により生成されるテキスト文書の一部の実施例である。この例では、原文が「・・・全額1万円を送ります・・・」である。そして、各文字に対してそれぞれ複数の認識結果候補文字が得られている。たとえば、「全」に対して、第1候補として「金」が得られており、第2候補として「全」が得られている。また、「額」に対して、第1候補として「額」が得られており、第2候補として「顎」が得られている。この結果、第1候補文字ばかりを集めると「金額l方丹を迭ります」が生成され、第2候補文字ばかり集めると「全顎I万門在送リ主ず」が生成される。
文字格納部2902は、第1候補文字列だけでなく、第2候補文字列も合わせて格納する。このとき、第1候補文字列は、認識結果として格納されるようにしてもよい。なお、図30に示す例では、第1および第2の候補が生成されて格納されているが、より多くの候補が生成されて格納されてもよい。
検索部2903は、オートマトン生成部106により生成されるオートマトンを利用して、検索対象文書から検索文字列を検索する。オートマトンは、上述したように、検索文字列に基づいて生成される。検索対象文書は、文書格納部2902に格納されているテキスト文書である。検索文字列は、例えば、ユーザにより指定されて入力部108を介して入力される。なお、検索装置が文字格納部104および派生文字列生成部105を備える場合は、検索文字列は、派生文字列生成部105により生成される派生文字列を含むものとする。
検証部111は、上述した方法で、検索部2903により検出された文字列が検索文字列(または、派生文字列)に該当するか否かを判定する。検索結果格納部112は、検索結果を格納する。そして、出力部113は、検索結果格納部112に格納されている検索結果を出力する。
第3の検索装置においては、認識結果(第1候補)として格納されているテキスト文書だけでなく、2番目以降の認識結果候補文字も利用して検索が行われる。例えば、検索対象文書として、図30に示す認識結果および第2候補が格納されているときに、検索文字列として「全額1万円を送ります」が入力されたものとする。そうすると、第1候補文字列においては「額」「を」「り」「ま」「す」が一致する。この場合、上記検索がヒットするためには、再現率の閾値レベルを50パーセント以下に設定する必要がある。ところが、閾値レベルを低くすると、不要な文字列も検出されてしまい、検索結果が多くの雑音を含むこととなる。
そこで、第3の検索装置は、2番目以降の認識結果候補を参照する。この例では、第2候補文字列が検索される。そうすると、第2候補文字列においては、「全」「万」「送」が一致する。すなわち、検索文字ごとに、第1候補文字列または第2候補文字列の双方を検索することにより、再現率は80パーセントに向上する。この場合、閾値レベルを例えば75パーセントに設定しても、上記検索はヒットすることになる。したがって、雑音の少ない検索結果が得られる。
図31は、検索部2903の動作を示すフローチャートである。なお、文書格納部2902には、各文字について複数の候補文字が用意された検索対象文書が格納されている。また、検索部2903には、オートマトン生成部106により生成されたオートマトンが与えられる。
ステップ3101において、検索部2903は、検索対象文書として格納されている認識結果文字Tp[i]を読み込む。iは、検索対象文書の先頭からの文字の位置を表す。pは、文字認識結果の候補番号を表す。例えば、T2[10]は、第10番目の文字についての認識結果の第2候補を表す。
ステップ3102において、検索部2903は、検索対象文書のi番目の文字に対応するTp[i]をオートマトンに作用させる。これにより、状態変数Rpが算出される。ここで、文書格納部2902には、各文字についてそれぞれ第1〜K候補が格納されている。すなわち、p=1,2,...,Kである。この場合、検索部2903は、オートマトンに対してT1[i]〜TK[i]をそれぞれ独立して作用させ、状態変数R1〜RKを算出する。
ステップ3103において、検索部2903は、状態変数Rを更新する。状態変数Rは、状態変数R1〜RKに基づいて更新される。すなわち、状態変数Rは、検索対象文書の入力文字の第1〜K候補を考慮して更新される。このとき、入力文字に対応する複数の候補文字のいずれか1つが検索文字に一致するときには、状態変数列中の一致した文字に対応する状態変数が活性化される。一方、入力文字に対応する複数の候補文字がいずれも検索文字に一致しないときには、状態変数列中の別の文字に対応する状態変数が活性化される。
ステップ3104において、変数iがインクリメントされる。すなわち、検索対象文書の次の文字が選択される。以降、検索対象文書のすべての文字についてステップ3102〜3103の処理が繰り返し実行される。
次に、図31に示すフローチャートの処理の実施例を説明する。以下の説明では、文書格納部2902に図30に示す検索対象文書が格納されているものとする。この例では、K=2であり、検索対象文書の各文字についてそれぞれ第1候補および第2候補が格納されている。また、検索文字列は「全額1万」であり、オートマトン生成部106により図32に示すオートマトンが生成されているものとする。このオートマトンでは、与えられた検索文字列に対して状態0〜状態30が定義されている。なお、状態0は、常に活性状態である。
図32に示すオートマトンに「全」を作用させると、状態1が活性化される。これに対して、上記オートマトンに「全以外の文字」を作用させると、状態2が活性化される。また、状態1が活性状態であるときに、「額」を作用させると状態3が活性化され、「額以外の文字」を作用させると状態4が活性化される。同様に、状態2が活性状態であるときに、「額」を作用させると状態5が活性化され、「額以外の文字」を作用させると状態6が活性化される。他の状態遷移も同様である。なお、このオートマトンは、状態15〜30のいずれか1つが活性化されたときに受理状態となる。
ステップ3101において、文書格納部2902から検索部2903へ検索対象文書が入力される。以下の説明では、各検索部2903に入力される文字をTp[i]で表すものとする。図30に示す例では、T1[1]=金、T2[1]=全、T1[2]=額、T2[2]=顎、...である。
ステップ3102において、図32に示すオートマトンにTp[i]が与えられる。この場合、まず、「i=1」について処理が実行される。すなわち、T1[1]=金、T2[1]=全がそれぞれオートマトンに与えられる。
「金(T1[1])」が入力されたときは、状態0において「全以外の文字」と判定されるので、図33(a)に示すように、状態2が活性化される。これにより、図33(a)に示す状態を表す状態変数R1が生成される。一方、「全(T2[1])」が入力されたときには、状態0において「全」と判定されるので、図33(b)に示すように、状態1が活性化される。これにより、図33(b)に示す状態を表す状態変数R2が生成される。
ステップ3103においては、状態変数R1、R2に基づいて、状態変数Rが更新される。このとき、検索文字「全」が第1候補または第2候補に一致すれば、この検索文字についての検索結果は「ヒット」と判定される。この場合、状態変数Rは、状態1が活性化された状態に更新される。一方、検索文字「全」が第1候補または第2候補のいずれにも一致しないときには、この検索文字についての検索結果は「ミス」と判定される。この場合、状態変数Rは、状態2が活性化された状態に更新される。この例では、第2候補として「全」が格納されている。したがって、T1[1]、T2[1]が入力されたときに、状態変数Rは、図34に示すように、状態1が活性化された状態に更新される。なお、図34においては、太線の丸枠が活性状態を表している。
2番目の検索文字は「額」である。このとき、検索対象文書の2番目の文字の第1候補および第2候補は、それぞれ、「額(T1[2])」および「顎(T2[2])」である。すなわち、この検索文字は、第1候補に一致する。したがって、状態1が活性状態であるときにT1[2]、T2[2]が入力されると、図34に示すように、状態3が活性化される。
3番目の検索文字は「1(数字)」である。このとき、検索対象文書の3番目の文字の第1候補および第2候補は、それぞれ、「l(T1[3]、アルファベットの小文字のエル)」および「I(T2[3]、アルファベットの大文字のアイ)」である。すなわち、この検索文字は、第1候補または第2候補のいずれにも一致していない。したがって、状態3が活性状態であるときにT1[3]、T2[3]が入力されると、図34に示すように、状態8が活性化される。
4番目の検索文字は「万」である。このとき、検索対象文書の4番目の文字の第1候補および第2候補は、それぞれ、「方(T1[4])」および「万(T2[4])」である。すなわち、この検索文字は、第2候補に一致する。したがって、状態8が活性状態であるときにT1[4]、T2[4]が入力されると、図34に示すように、状態17が活性化される。
上述のようにして状態17が活性化されると、検索部2903は、受理状態が得られたと判定し、検索文字列に対応する文字列が検出された旨を表す情報を検証部111に通知する。ここで、状態17は、1番目、2番目、4番目の検索文字がそれぞれ第1候補または第2候補に一致すると共に、3番目の検索文字が第1候補または第2候補のいずれにも一致していないことを表している。したがって、この検索結果の再現率は、75パーセントである。そして、この再現率が閾値レベルを超えていれば、検索対象文書から検索文字列が検出されたと判定される。
図35は、第3の検索装置が備える検索部2903の動作を詳細に示すフローチャートである。なお、このフローチャートは、検索文字列が3文字である場合の処理を示している。
ステップ3501〜3504は、基本的に、図24に示すフローチャートのステップ2401〜2404と同じである。すなわち、ステップ3501において、検索文字列に対応するマスクテーブルMが生成される。ステップ3502において、レジスタRにゼロが設定され、検索対象文書の文字位置を表す変数iに「1」が設定される。そして、ステップ3503〜3504において、下式に従ってレジスタRが更新され、さらにその更新結果と「3」との論理和が算出される。
R=((Ri-1 <<2)&M1)|((Ri-1 <<4)&M2)|
((Ri-1 <<8)&M3)
ステップ3505において、検索部2903は、認識結果の候補番号を識別する変数jに「1」を設定する。ステップ3506〜3508において、検索部2903は、各候補文字について、レジスタRとマスクM(Tj[i])との論理積を算出する。すなわち、第1〜K候補について論理積を算出する。これにより、各候補に対応するレジスタRj(j=1〜K)がそれぞれ算出される。
ステップ3509において、検索部2903は、各レジスタRj(j=1〜K)の論理積R’、および各レジスタRj(j=1〜K)の論理和R”を算出する。また、ステップ3510において、検索部2903は、下式に従ってレジスタRを更新する。なお、M4およびM5は、後で実施例を示すが、所定の定数である。
R=(R’& M4)|(R”& M5)
ステップ3511において、検索部2903は、ステップ3510により得られるレジスタRの受理ビットをチェックする。このとき、いずれかの受理ビットに「1」が書き込まれていれば、検索部2903は、ステップ3514において、その受理ビットに対応する検索文字列を出力する。なお、いずれの受理ビットにも「1」が書き込まれていなければ、ステップ3514はスキップされる。
ステップ3512において、変数iがNに達したかがチェックされる。Nは、検索対象文書の最後の文字の位置を表す。そして、変数iがNに達してなければ、ステップ3513において変数iをインクリメントしてステップ3503に戻る。すなわち、検索対象文書の各文字について、上述の処理が実行される。
次に、図35に示すフローチャートの処理の実施例を説明する。ここでは、説明を簡単にするために、検索文字列は「全額1」であるものとする。この場合、検索文字列に対応するオートマトンは、図36に示すように、状態0〜14を有する。また、図30に示す検索対象文書が検索されるものとする。すなわち、各文字について第1および第2候補が用意されており、K=2である。
ステップ3501において生成されるマスクMは、下記の通りである。
M(全)=0b11110000110001
M(額)=0b11110000001110
M(1)=0b00001111110010
M(全、額、1以外)=0b11110000110010
なお、マスクMを生成する方法は、図16〜図24を参照しながら説明した通りである。ただし、M(全)、M(額)、M(1)、M(全、額、1以外)は、それぞれM(a)、M(b)、M(c)、Mbに対応する。
ここで、ステップ3510で使用されるマスクM4およびM5について説明する。マスクM4は、検索文字が一致したときに活性化される状態に対して「1」を割り当て、他の状態に対して「0」を割り当てるマスクパターンにより実現される。これに対して、マスクM5は、検索文字が不一致であったときに活性化される状態に対して「1」を割り当て、他の状態に対して「0」を割り当てるマスクパターンにより実現される。
図36においては、ある状態が活性化されているときに、検索文字が入力文字に一致すると二本線の矢印により指し示される状態が活性化され、検索文字が入力文字に一致しなければ一本線の矢印により指し示される状態が活性化される。この例では、検索文字が一致したときには、丸枠で囲まれている奇数番号(1、3、5、7、9、11、13)の状態が活性化されている。ここで、図22に示すようにしてレジスタRの各ビット位置に対応する状態が割り当てられるものとすると、検索一致に対しては、状態1に対応する第1ビット、状態3に対応する第3ビット、状態5に対応する第4ビット、状態7に対応する第7ビット、状態9に対応する第9ビット、状態11に対応する第8ビット、状態13に対応する第10ビットに対して「1」を設定し、他のビットに対して「0」を設定すれば、マスクM4が実現される。すなわち、マスクM4は「0b00001111001101」となる。同様に、検索文字が不一致であったときには、四角枠で囲まれている偶数番号(2、4、6、8、10、12、14)の状態が活性化されている。よって、マスクM5は、「0b11110000110010」となる。
図35に示すフローチャートの説明に戻る。この例では、まず、検索対象文書に対して「i=1」が設定され、「金(T1[1])」および「全(T2[1])」が入力される。
「金」および「全」が入力されると、ステップ3503において、R=0b00000000000000に対して下記のビット操作が行われる。
R=((0b00000000000000<<2)
&0b00000000001100)
|((0b00000000000000<<4)
&0b00001111110000)
|((0b00000000000000<<8)
&0b11110000000000)
=(0b00000000000000&0b00000000001100)
|(0b00000000000000&0b00001111110000)
|(0b00000000000000&0b11110000000000)
=0b00000000000000|0b00000000000000
|0b00000000000000
=0b00000000000000
また、ステップ3504において、レジスタRと「3」との論理和を計算することにより、R=0b00000000000011が得られる。
続いて、「金」に対してステップ3506の演算が実行される。この場合、レジスタRは下記のように更新される。
R(金)=0b00000000000011&M(全、額、1以外)
=0b00000000000011&0b11110000110010
=0b00000000000010
また、「全」に対してステップ3506の演算が実行される。この場合、レジスタRは下記のように更新される。
R(全)=0b00000000000011&M(全)
=0b00000000000011&0b11110000110001
=0b00000000000001
続いて、ステップ3509において、レジスタR’、R”が計算される。
R’=R(金)|R(全)
=0b00000000000010|0b00000000000001
=0b00000000000011
R”=R(金)&R(全)
0b00000000000010&0b00000000000001
=0b00000000000000
さらに、ステップ3510において、レジスタR’、R”、マスクM4、M5に基づいて、レジスタRが更新される。
R=(R’&M4)|(R”&M5)
=(0b00000000000011&0b00001111001101)|
(0b00000000000000&0b11110000110010)
=0b000000000000001|0b00000000000000
=0b000000000000001
このように、「金(T1[1])」および「全(T2[1])」が入力されると、レジスタRの第1ビットが「1」に更新される。すなわち、図22に示す対応関係によれば、状態1が活性化される。
次に、状態1が活性状態であるときに、「額(T1[2])」および「顎(T2[2])」が入力される。そうすると、ステップ3503において、R=0b00000000000001に対して上述したビット操作が行われ、レジスタRは「0b00000000010100」に更新される。また、ステップ3504において、レジスタRと「3」との論理和を計算することにより、R=0b00000000010111が得られる。
続いて、「額」に対してステップ3506の演算が実行される。この場合、レジスタRは下記のように更新される。
R(額)=0b00000000010111&M(額)
=0b00000000010111&0b11110000001110
=0b00000000000110
また、「顎」に対してステップ3506の演算が実行される。この場合、レジスタRは下記のように更新される。
R(顎)=0b00000000010111&M(全、額、1以外)
=0b00000000010111&0b11110000110010
=0b00000000010010
続いて、ステップ3509において、レジスタR’、R”が計算される。
R’=R(額)|R(顎)
=0b00000000000110|0b00000000010010
=0b00000000010110
R”=R(額)&R(顎)
0b00000000000110&0b00000000010010
=0b00000000000010
さらに、ステップ3510において、レジスタR’、R”、マスクM4、M5に基づいて、レジスタRが更新される。
R=(R’&M4)|(R”&M5)
=(0b00000000010110&0b00001111001101)|
(0b00000000000010&0b11110000110010)
=0b000000000000100|0b00000000000010
=0b000000000000110
このように、「額(T1[2])」および「顎(T2[2])」が入力されると、レジスタRの第2、3ビットが「1」に更新される。すなわち、図22に示す対応関係によれば、状態2および状態3が活性化される。なお、状態1は、非活性状態に戻る。
次に、状態2、3が活性状態であるときに、「l(T1[3]、アルファベットの小文字のエル)」および「I(T2[3]、アルファベットの大文字のアイ)」が入力される。そうすると、ステップ3503において、R=0b00000000000110に対して上述したビット操作が行われ、レジスタRは「0b00010001101000」に更新される。また、ステップ3504において、レジスタRと「3」との論理和を計算することにより、R=0b00010001101011が得られる。
続いて、「l(エル)」に対してステップ3506の演算が実行される。この場合、レジスタRは下記のように更新される。
R(l)=0b00010001101011&M(全、額、1以外)
=0b00010001101011&0b11110000110010
=0b00010000100010
また、「I(アイ)」に対してステップ3506の演算が実行される。この場合、レジスタRは下記のように更新される。
R(I)=0b00010001101011&M(全、額、1以外)
=0b00010001101011&0b11110000110010
=0b00010000100010
続いて、ステップ3509において、レジスタR’、R”が計算される。
R’=R(l)|R(I)
=0b00010000100010|0b00010000100010
=0b00010000100010
R”=R(l)&R(I)
=0b00010000100010&0b00010000100010
=0b00010000100010
さらに、ステップ3510において、レジスタR’、R”、マスクM4、M5に基づいて、レジスタRが更新される。
R=(R’&M4)|(R”&M5)
=(0b00010000100010&0b00001111001101)|
(0b00010000100010&0b11110000110010)
=0b000000000000000|00010000100010
=0b00010000100010
このように、「l(T1[3]、アルファベットの小文字のエル)」および「I(T2[3]、アルファベットの大文字のアイ)」が入力されると、レジスタRの第2、6、11ビットが「1」に更新される。すなわち、図22に示す対応関係によれば、状態2、状態6、状態8が活性化される。ここで、レジスタRの第11ビット(すなわち、状態8)は、受理ビットである。したがって、検索部2903は、状態8が活性化されたときに、ステップ3514において、検索文字列「全額1」に対して検出された文字列を出力する。
以上説明したように、第3の検索装置は、検索対象文書の各文字について複数の認識結果候補が用意されている構成を前提とし、これらの複数の候補についての論理和検索を行う。このため、検索文字の再現率についての閾値レベルを下げなくても、検索文字列に対応する文字列を検出することが可能であり、検索結果に含まれる雑音を小さくできる。
また、第3の検索装置においては、検索文字列の中の一部の文字が検索対象文書から検出されない場合であっても、オートマトンの状態遷移は初期状態に戻ることなく継続されるので、検索文字の再現率を利用して検索文字列に対応する文字列が検出される。したがって、検索対象文書がOCR等により生成されている場合のように、検索対象文書が不正確な文字を多く含んでいる場合においても、検索文字列に対応する文字列を検索することができる。
さらに、第3の検索装置は、ビットパラレル方式で検索を行うので、CUPの特性を最大限に利用することができ、高速検索が可能になる。すなわち、検索対象文書の各文字について用意されている複数の認識結果候補を利用して検索雑音を抑えながら、検索の高速化を図ることができる。
図1、図28、図29に示す検索装置は、たとえば、図37に示すような情報処理装置(コンピュータ)を用いて実現することが可能である。ただし、図37の構成では、スキャナ101は省略されている。
図37の情報処理装置は、Central Processing Unit (CPU)3701、メモリ3702、入力装置3703、出力装置3704、外部記憶装置3705、媒体駆動装置3706、及びネットワーク接続装置3707を備える。これらはバス3708により互いに接続されている。
メモリ3702は、例えば、Read Only Memory(ROM)、Random Access Memory(RAM)等を含み、検索装置の処理に用いられるプログラム(検索プログラム)及びデータを格納する。メモリ3702は、文字格納部104、検索文字列格納部109、閾値格納部110、検索結果格納部112、及びレジスタRとしても使用される。例えば、CPU3701は、メモリ3702を利用してプログラムを実行することにより、派生文字列生成処理、検索処理、検証処理等を行う。
入力装置3703は、例えば、キーボード、ポインティングデバイス等であり、オペレータからの指示や情報の入力に用いられる。出力装置3704は、例えば、ディスプレイ、プリンタ、スピーカ等であり、オペレータへの問い合わせや処理結果の出力に用いられる。入力装置3703は、入力部108及び編集部2802としても使用され、出力装置3704は、出力部113及び2801としても使用される。
外部記憶装置3705は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。情報処理装置は、この外部記憶装置3705にプログラム及びデータを格納しておき、それらをメモリ3702にロードして使用することができる。外部記憶装置3705は、文書格納部103としても使用される。
媒体駆動装置3706は、可搬記録媒体3709を駆動し、その記録内容にアクセスする。可搬記録媒体3709は、メモリカード、フレキシブルディスク、光ディスク、光磁気ディスク等のコンピュータ読み取り可能な記録媒体である。オペレータは、この可搬記録媒体3709にプログラム及びデータを格納しておき、それらをメモリ3702にロードして使用することができる。
ネットワーク接続装置3707は、通信ネットワークに接続され、通信に伴うデータ変換を行う。情報処理装置は、プログラム及びデータを外部装置からネットワーク接続装置3707を介して受け取り、それらをメモリ3702にロードして使用することができる。
図38は、図37の情報処理装置にプログラム及びデータを提供する方法を示している。可搬記録媒体3709や外部装置3801のデータベース3811に格納されたプログラム及びデータは、情報処理装置3802のメモリ3702にロードされる。外部装置3801は、そのプログラム及びデータを搬送する搬送信号を生成し、通信ネットワーク上の伝送媒体を介して情報処理装置3802に送信する。CPU3701は、そのデータを用いてそのプログラムを実行し、上述した処理を行う。
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
以上、図1から図38までを参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
(付記1)
第1の文字と該第1の文字に対応する第2の文字を格納する文字格納手段を参照して、検索文字列に含まれる該第1の文字を該第2の文字に置き換えた派生文字列を生成する生成ステップと、
文書格納手段に格納された検索対象文書から、前記検索文字列及び前記派生文字列を検索する検索ステップと、
前記検索文字列及び前記派生文字列の検索結果を出力する出力ステップと
をコンピュータに実行させることを特徴とする検索プログラム。
(付記2)
前記検索ステップは、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字に一致するとき、状態変数格納部に格納された状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、前記検索プログラムは、該検索文字列又は該派生文字列の末尾の文字に対応する第2の状態変数が活性化されたとき、該末尾の文字を含む入力文字列が該検索文字列又は該派生文字列のいずれであるかを検証する検証ステップを前記コンピュータにさらに実行させることを特徴とする付記1記載の検索プログラム。
(付記3)
前記検索ステップは、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字のいずれにも一致しないとき、前記状態変数列中の別の文字に対応する第3の状態変数を活性化する処理をさらに繰り返し、前記検証ステップは、前記第2の状態変数が活性化されたとき、前記末尾の文字を含む入力文字列が該検索文字列又は該派生文字列のいずれかと一致する文字数の割合を求め、得られた文字数の割合が閾値より大きければ、該検索文字列又は該派生文字列が検出されたと判断することを特徴とする付記2記載の検索プログラム。
(付記4)
前記検証ステップは、前記第2の状態変数が活性化された状態が表す文字列から、前記末尾の文字を含む入力文字列中の1つ以上の一致文字に対応する1つ以上の文字位置を特定し、該入力文字列中の該1つ以上の文字位置の文字と、前記検索文字列又は前記派生文字列中の該1つ以上の文字位置の文字を比較して、前記文字数の割合を求めることを特徴とする付記3記載の検索プログラム。
(付記5)
前記出力ステップは、前記検索対象文書から前記検索文字列が検出されたとき、該検索文字列を前記検索結果として出力し、前記検索対象文書から前記派生文字列が検出されたとき、該派生文字列を前記検索文字列に変換し、得られた検索文字列を前記検索結果として出力することを特徴とする付記1乃至4のいずれかに記載の検索プログラム。
(付記6)
各文字について複数の候補文字が用意されている検索対象文書から検索文字列を検索する処理において、前記検索対象文書から入力される文字に対応する複数の候補文字のいずれか1つが前記検索文字列に含まれる文字に一致するときに、状態変数格納部に格納されている状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、前記検索対象文書から入力される文字に対応する複数の候補文字がいずれも前記検索文字列に含まれる文字に一致しないときに、前記状態変数列中の別の文字に対応する第2の状態変数を活性化する処理を繰り返す、ことにより前記検索文字列を検索する検索ステップ、
前記状態変数列中の前記検索文字列の末尾の文字に対応する第3の状態変数が活性化されたときに、前記検索文字列の検索結果を出力する出力ステップ、
をコンピュータに実行させる検索プログラム。
(付記7)
コンピュータが、第1の文字と該第1の文字に対応する第2の文字を格納する文字格納手段を参照して、検索文字列に含まれる該第1の文字を該第2の文字に置き換えた派生文字列を生成する生成ステップと、
前記コンピュータが、文書格納手段に格納された検索対象文書から、前記検索文字列及び前記派生文字列を検索する検索ステップと、
前記コンピュータが、前記検索文字列及び前記派生文字列の検索結果を出力する出力ステップと
を備えることを特徴とする検索方法。
(付記8)
前記検索ステップは、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字に一致するとき、状態変数格納部に格納された状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、前記検索方法は、前記コンピュータが、該検索文字列又は該派生文字列の末尾の文字に対応する第2の状態変数が活性化されたとき、該末尾の文字を含む入力文字列が該検索文字列又は該派生文字列のいずれであるかを検証する検証ステップをさらに備えることを特徴とする付記7記載の検索方法。
(付記9)
前記検索ステップは、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字のいずれにも一致しないとき、前記状態変数列中の別の文字に対応する第3の状態変数を活性化する処理をさらに繰り返し、前記検証ステップは、前記第2の状態変数が活性化されたとき、前記末尾の文字を含む入力文字列が該検索文字列又は該派生文字列のいずれかと一致する文字数の割合を求め、得られた文字数の割合が閾値より大きければ、該検索文字列又は該派生文字列が検出されたと判断することを特徴とする付記8記載の検索方法。
(付記10)
前記検証ステップは、前記第2の状態変数が活性化された状態が表す文字列から、前記末尾の文字を含む入力文字列中の1つ以上の一致文字に対応する1つ以上の文字位置を特定し、該入力文字列中の該1つ以上の文字位置の文字と、前記検索文字列又は前記派生文字列中の該1つ以上の文字位置の文字を比較して、前記文字数の割合を求めることを特徴とする付記9記載の検索方法。
(付記11)
前記出力ステップは、前記検索対象文書から前記検索文字列が検出されたとき、該検索文字列を前記検索結果として出力し、前記検索対象文書から前記派生文字列が検出されたとき、該派生文字列を前記検索文字列に変換し、得られた検索文字列を前記検索結果として出力することを特徴とする付記7乃至10のいずれかに記載の検索方法。
(付記12)
コンピュータが、各文字について複数の候補文字が用意されている検索対象文書から検索文字列を検索する処理において、前記検索対象文書から入力される文字に対応する複数の候補文字のいずれか1つが前記検索文字列に含まれる文字に一致するときに、状態変数格納部に格納されている状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、前記検索対象文書から入力される文字に対応する複数の候補文字がいずれも前記検索文字列に含まれる文字に一致しないときに、前記状態変数列中の別の文字に対応する第2の状態変数を活性化する処理を繰り返す、ことにより前記検索文字列を検索し、
前記コンピュータが、前記状態変数列中の前記検索文字列の末尾の文字に対応する第3の状態変数が活性化されたときに、前記検索文字列の検索結果を出力する、
ことを特徴とする検索方法。
(付記13)
第1の文字と該第1の文字に対応する第2の文字を格納する文字格納手段を参照して、検索文字列に含まれる前記第1の文字を前記第2の文字に置き換えた派生文字列を生成する生成部と、
文書格納手段に格納された検索対象文書から、前記検索文字列及び前記派生文字列を検索する検索部と、
前記検索文字列及び前記派生文字列の検索結果を出力する出力部、
を有する検索装置。
(付記14)
前記検索部は、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字に一致するとき、状態変数格納部に格納された状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、
前記検索装置は、前記検索文字列又は前記派生文字列の末尾の文字に対応する第2の状態変数が活性化されたとき、前記末尾の文字を含む入力文字列が前記検索文字列又は前記派生文字列のいずれであるかを検証する検証部をさらに備える
ことを特徴とする付記13に記載の検索装置。
(付記15)
前記検索部は、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字のいずれにも一致しないとき、前記状態変数列中の別の文字に対応する第3の状態変数を活性化する処理をさらに繰り返し、
前記検証部は、前記第2の状態変数が活性化されたとき、前記末尾の文字を含む入力文字列が前記検索文字列又は前記派生文字列のいずれかと一致する文字数の割合を求め、得られた文字数の割合が閾値より大きければ、前記検索文字列又は前記派生文字列が検出されたと判断する
ことを特徴とする付記14に記載の検索装置。
(付記16)
前記検証部は、前記第2の状態変数が活性化された状態が表す文字列から、前記末尾の文字を含む入力文字列中の1つ以上の一致文字に対応する1つ以上の文字位置を特定し、前記入力文字列中の前記1つ以上の文字位置の文字と、前記検索文字列又は前記派生文字列中の前記1つ以上の文字位置の文字を比較して、前記文字数の割合を求める
ことを特徴とする付記15に記載の検索装置。
(付記17)
前記出力部は、前記検索対象文書から前記検索文字列が検出されたとき、前記検索文字列を前記検索結果として出力し、前記検索対象文書から前記派生文字列が検出されたとき、前記派生文字列を前記検索文字列に変換し、得られた検索文字列を前記検索結果として出力する
ことを特徴とする付記13乃至16のいずれかに記載の検索装置。
(付記18)
各文字について複数の候補文字が用意されている検索対象文書から検索文字列を検索する処理において、前記検索対象文書から入力される文字に対応する複数の候補文字のいずれか1つが前記検索文字列に含まれる文字に一致するときに、状態変数格納部に格納されている状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、前記検索対象文書から入力される文字に対応する複数の候補文字がいずれも前記検索文字列に含まれる文字に一致しないときに、前記状態変数列中の別の文字に対応する第2の状態変数を活性化する処理を繰り返す、ことにより前記検索文字列を検索する検索部と、
前記状態変数列中の前記検索文字列の末尾の文字に対応する第3の状態変数が活性化されたときに、前記検索文字列の検索結果を出力する出力部、
を有する検索装置。
101 スキャナ
102、2901 文字認識部
103、2902 文書格納部
104 文字格納部
105 派生文字列生成部
106 オートマトン生成部
107、2903 検索部
108 入力部
109 検索文字列格納部
110 閾値格納部
111 検証部
112 検索結果格納部
113、2801 出力部
201〜214 誤認識文字
2802 編集部
3701 CPU
3702 メモリ
3703 入力装置
3704 出力装置
3705 外部記憶装置
3706 媒体駆動装置
3707 ネットワーク接続装置
3708 バス
3709 可搬記録媒体
3801 外部装置
3802 情報処理装置
3811 データベース

Claims (7)

  1. 第1の文字と該第1の文字に対応する第2の文字を格納する文字格納手段を参照して、検索文字列に含まれる該第1の文字を該第2の文字に置き換えた派生文字列を生成する生成ステップと、
    文書格納手段に格納された検索対象文書から、前記検索文字列及び前記派生文字列を検索する検索ステップと、
    前記検索文字列及び前記派生文字列の検索結果を出力する出力ステップと
    をコンピュータに実行させることを特徴とする検索プログラム。
  2. 前記検索ステップは、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字に一致するとき、状態変数格納部に格納された状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、前記検索プログラムは、該検索文字列又は該派生文字列の末尾の文字に対応する第2の状態変数が活性化されたとき、該末尾の文字を含む入力文字列が該検索文字列又は該派生文字列のいずれであるかを検証する検証ステップを前記コンピュータにさらに実行させることを特徴とする請求項1記載の検索プログラム。
  3. 前記検索ステップは、前記検索対象文書から入力される文字が前記検索文字列又は前記派生文字列に含まれる文字のいずれにも一致しないとき、前記状態変数列中の別の文字に対応する第3の状態変数を活性化する処理をさらに繰り返し、前記検証ステップは、前記第2の状態変数が活性化されたとき、前記末尾の文字を含む入力文字列が該検索文字列又は該派生文字列のいずれかと一致する文字数の割合を求め、得られた文字数の割合が閾値より大きければ、該検索文字列又は該派生文字列が検出されたと判断することを特徴とする請求項2記載の検索プログラム。
  4. 前記検証ステップは、前記第2の状態変数が活性化された状態が表す文字列から、前記末尾の文字を含む入力文字列中の1つ以上の一致文字に対応する1つ以上の文字位置を特定し、該入力文字列中の該1つ以上の文字位置の文字と、前記検索文字列又は前記派生文字列中の該1つ以上の文字位置の文字を比較して、前記文字数の割合を求めることを特徴とする請求項3記載の検索プログラム。
  5. 前記出力ステップは、前記検索対象文書から前記検索文字列が検出されたとき、該検索文字列を前記検索結果として出力し、前記検索対象文書から前記派生文字列が検出されたとき、該派生文字列を前記検索文字列に変換し、得られた検索文字列を前記検索結果として出力することを特徴とする請求項1乃至4のいずれかに記載の検索プログラム。
  6. 各文字について複数の候補文字が用意されている検索対象文書から検索文字列を検索する処理において、前記検索対象文書から入力される文字に対応する複数の候補文字のいずれか1つが前記検索文字列に含まれる文字に一致するときに、状態変数格納部に格納されている状態変数列中の一致した文字に対応する第1の状態変数を活性化する処理を繰り返し、前記検索対象文書から入力される文字に対応する複数の候補文字がいずれも前記検索文字列に含まれる文字に一致しないときに、前記状態変数列中の別の文字に対応する第2の状態変数を活性化する処理を繰り返す、ことにより前記検索文字列を検索する検索ステップ、
    前記状態変数列中の前記検索文字列の末尾の文字に対応する第3の状態変数が活性化されたときに、前記検索文字列の検索結果を出力する出力ステップ、
    をコンピュータに実行させる検索プログラム。
  7. コンピュータが、第1の文字と該第1の文字に対応する第2の文字を格納する文字格納手段を参照して、検索文字列に含まれる該第1の文字を該第2の文字に置き換えた派生文字列を生成する生成ステップと、
    前記コンピュータが、文書格納手段に格納された検索対象文書から、前記検索文字列及び前記派生文字列を検索する検索ステップと、
    前記コンピュータが、前記検索文字列及び前記派生文字列の検索結果を出力する出力ステップと
    を備えることを特徴とする検索方法。
JP2010016378A 2009-02-27 2010-01-28 検索プログラム及び検索方法 Pending JP2010225137A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010016378A JP2010225137A (ja) 2009-02-27 2010-01-28 検索プログラム及び検索方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2009046787 2009-02-27
JP2010016378A JP2010225137A (ja) 2009-02-27 2010-01-28 検索プログラム及び検索方法

Publications (1)

Publication Number Publication Date
JP2010225137A true JP2010225137A (ja) 2010-10-07

Family

ID=43042216

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010016378A Pending JP2010225137A (ja) 2009-02-27 2010-01-28 検索プログラム及び検索方法

Country Status (1)

Country Link
JP (1) JP2010225137A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014085874A (ja) * 2012-10-24 2014-05-12 Ntt Docomo Inc 情報検索装置、情報検索システム、及び情報検索方法
JP2015031935A (ja) * 2013-08-07 2015-02-16 富士通株式会社 情報処理方法及びプログラム
JP2015079228A (ja) * 2013-10-18 2015-04-23 国立大学法人 筑波大学 検出装置、検出方法、コンピュータ、及び、プログラム
JP2020154776A (ja) * 2019-03-20 2020-09-24 株式会社Screenホールディングス 誤認識文字テーブル、誤認識文字テーブル作成方法、文字列検索装置、文字列検索方法、および、文字列検索プログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07152774A (ja) * 1993-11-30 1995-06-16 Hitachi Ltd 文書検索方法および装置
JPH0869476A (ja) * 1994-08-30 1996-03-12 Hokkaido Nippon Denki Software Kk 検索システム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07152774A (ja) * 1993-11-30 1995-06-16 Hitachi Ltd 文書検索方法および装置
JPH0869476A (ja) * 1994-08-30 1996-03-12 Hokkaido Nippon Denki Software Kk 検索システム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014085874A (ja) * 2012-10-24 2014-05-12 Ntt Docomo Inc 情報検索装置、情報検索システム、及び情報検索方法
JP2015031935A (ja) * 2013-08-07 2015-02-16 富士通株式会社 情報処理方法及びプログラム
JP2015079228A (ja) * 2013-10-18 2015-04-23 国立大学法人 筑波大学 検出装置、検出方法、コンピュータ、及び、プログラム
JP2020154776A (ja) * 2019-03-20 2020-09-24 株式会社Screenホールディングス 誤認識文字テーブル、誤認識文字テーブル作成方法、文字列検索装置、文字列検索方法、および、文字列検索プログラム
JP7257204B2 (ja) 2019-03-20 2023-04-13 株式会社Screenホールディングス 文字列検索装置、文字列検索方法、および、文字列検索プログラム

Similar Documents

Publication Publication Date Title
US9355171B2 (en) Clustering of near-duplicate documents
JP4538449B2 (ja) 文字列検索の方法および設備
JP4365162B2 (ja) 構造化文書のデータを検索する装置および方法
US8095526B2 (en) Efficient retrieval of variable-length character string data
JPWO2004062110A1 (ja) データ圧縮方法、プログラム及び装置
JP6160259B2 (ja) 文字列探索方法、文字列探索装置および文字列探索プログラム
JP6447161B2 (ja) 意味構造検索プログラム、意味構造検索装置、及び意味構造検索方法
WO2006061899A1 (ja) 文字列照合装置および文字列照合プログラム
US8583415B2 (en) Phonetic search using normalized string
CN116151132A (zh) 一种编程学习场景的智能代码补全方法、系统及储存介质
JP2010225137A (ja) 検索プログラム及び検索方法
JP7475592B2 (ja) テキスト情報の中からターゲット単語と対応する単語を識別する方法(method for identify a word corresponding to a target word in text information)
JP2010182238A (ja) 引用検出装置、原典文書データベース生成装置、その方法、プログラム及び記録媒体
JP2009098952A (ja) 情報検索システム
CN113407693B (zh) 一种用于全媒体审读的文本相似度比对方法及装置
JP5041003B2 (ja) 検索装置および検索方法
JP4347086B2 (ja) パターンマッチング装置および方法ならびにプログラム
JP3709890B2 (ja) 文字列検索装置
WO2011021347A1 (ja) ビット列データソート装置、ソート方法及びプログラム
KR102146625B1 (ko) 오토마타 기반 증분적 중위 확률 계산 장치 및 방법
JPH10149367A (ja) テキスト蓄積検索装置
JP2009146158A (ja) 文書分類装置の余分構造減退方法
Wei et al. Improving database quality through eliminating duplicate records
CN116150442A (zh) 一种基于tcam的网络数据检测方法和设备
Oommen et al. Breadth-first search strategies for trie-based syntactic pattern recognition

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121005

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130910

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140121