(57)【要約】【課題】変換対象文字列に含まれる置換元文字列を置換先文字列へ置換する際の処理時間を短縮する。【解決手段】置換元文字列と置換先文字列とが対応付けられて登録された置換テーブルを複数種用いて置換対象文字列に含まれる置換元文字列を対応する置換先文字列に置換するにあたり、複数種の置換テーブルを、複数の結合ルールに従って単一の統合置換テーブル(実行用置換テーブル)に統合した後に、統合置換テーブルに登録された置換元文字列からフェイリアリンク付きのリンク木を構築し、構築したリンク木を用いて、置換対象文字列に含まれる置換元文字列の探索・対応する置換先文字列への置換を行う。【選択図】図７
2014044498.tif 000002
【特許請求の範囲】
【請求項１】
置換元文字列と置換先文字列とが対応付けられて登録された複数種の置換テーブルを単一の置換テーブルに統合する統合部と、
複数のノードと、一対の前記ノードの間を連結し１文字のラベルが付与された複数の枝と、を含み、一端が同一のノードに連結された個々の枝に付与された前記ラベルの文字が互いに相違し、ルートノードから何れかのノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列が、置換先文字列と対応付けられた置換元文字列に一致し、かつ前記何れかのノードに前記置換元文字列に対応する識別情報が付与されたトライ木を、前記統合部によって統合された置換テーブルに登録されている前記置換元文字列を網羅するように構築するトライ木構築部と、
前記トライ木構築部によって構築された前記トライ木に含まれる前記ルートノードから第１のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列の最長接尾辞が、前記ルートノードから前記第１のノードと異なる第２のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列に一致する場合に、前記第１のノードから前記第２のノードへ向かうフェイリアリンクを追加することを、前記トライ木に含まれる全てのノードを前記第１のノードとして各々行うフェイリアリンク追加部と、
置換対象文字列の先頭から１文字ずつ取り出すと共に、前記トライ木の前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に前記取り出した文字がラベルとして付与された枝が存在せず、現在のノードに前記フェイリアリンクの基端が連結されている場合は、前記フェイリアリンクの先端に連結されたノードへ移動し、移動先のノードに識別情報が付与されている場合は識別情報を記録することを、前記置換対象文字列から全ての文字を取り出す迄繰り返すことで、前記置換対象文字列に含まれる前記置換元文字列を探索する探索部と、
を含む文字列置換装置。
【請求項２】
前記統合部は、複数種の置換テーブルに、同一の前記置換元文字列が異なる前記置換先文字列と対応付けられて登録されていた場合に、複数種の置換テーブルのうち適用順が先の置換テーブルに登録されていた前記置換元文字列と前記置換先文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う請求項１記載の文字列置換装置。
【請求項３】
前記統合部は、第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列としての前記第２の文字列と前記置換先文字列としての第３の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列としての前記第３の文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う請求項１又は請求項２記載の文字列置換装置。
【請求項４】
前記統合部は、第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列に含まれる第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列として前記第２の文字列のうち前記第３の文字列を前記第４の文字列に置き換えた文字列との組、及び、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う請求項１〜請求項３の何れか１項記載の文字列置換装置。
【請求項５】
前記統合部は、第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列を含む第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列との組、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組、及び、前記置換元文字列として前記第１の文字列に前記第３の文字列のうち前記第２の文字列に含まれない文字列を加えた文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う請求項１〜請求項４の何れか１項記載の文字列置換装置。
【請求項６】
前記探索部によって探索された前記置換対象文字列に含まれる前記置換元文字列を、前記置換元文字列と対応付けられた置換先文字列に置換する置換部を更に備えた請求項１〜請求項５の何れか１項記載の文字列置換装置。
【請求項７】
前記探索部は、記録した前記識別情報に対応する前記置換元文字列のうち、長さがより長く、前記置換対象文字列上で重複していない前記置換元文字列を、前記置換対象文字列に含まれる前記置換元文字列として選択する請求項１〜請求項６の何れか１項記載の文字列置換装置。
【請求項８】
前記トライ木構築部は、前記置換先文字列と対応付けられた前記置換元文字列の先頭から１文字ずつ取り出すと共に、前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に、前記取り出した文字がラベルとして付与された枝が存在しない場合は、前記取り出した文字以降の文字がラベルとして付与された枝とノードを新たに作成し、前記置換元文字列の末尾に到達した場合は最後のノードに前記置換元文字列に対応する識別情報を付与することを、前記統合部によって統合された置換テーブルに登録されている全ての前記置換元文字列に対して各々行うことで、前記統合された置換テーブルに登録されている前記置換元文字列を網羅するように前記トライ木を構築する請求項１〜請求項７の何れか１項記載の文字列置換装置。
【請求項９】
コンピュータで、
置換元文字列と置換先文字列とが対応付けられて登録された複数種の置換テーブルを単一の置換テーブルに統合し、
複数のノードと、一対の前記ノードの間を連結し１文字のラベルが付与された複数の枝と、を含み、一端が同一のノードに連結された個々の枝に付与された前記ラベルの文字が互いに相違し、ルートノードから何れかのノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列が、置換先文字列と対応付けられた置換元文字列に一致し、かつ前記何れかのノードに前記置換元文字列に対応する識別情報が付与されたトライ木を、前記統合した置換テーブルに登録されている前記置換元文字列を網羅するように構築し、
前記構築した前記トライ木に含まれる前記ルートノードから第１のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列の最長接尾辞が、前記ルートノードから前記第１のノードと異なる第２のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列に一致する場合に、前記第１のノードから前記第２のノードへ向かうフェイリアリンクを追加することを、前記トライ木に含まれる全てのノードを前記第１のノードとして各々行い、
置換対象文字列の先頭から１文字ずつ取り出すと共に、前記トライ木の前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に前記取り出した文字がラベルとして付与された枝が存在せず、現在のノードに前記フェイリアリンクの基端が連結されている場合は、前記フェイリアリンクの先端に連結されたノードへ移動し、移動先のノードに識別情報が付与されている場合は識別情報を記録することを、前記置換対象文字列から全ての文字を取り出す迄繰り返すことで、前記置換対象文字列に含まれる前記置換元文字列を探索する
ことを含む文字列置換方法。
【請求項１０】
コンピュータに、
置換元文字列と置換先文字列とが対応付けられて登録された複数種の置換テーブルを単一の置換テーブルに統合し、
複数のノードと、一対の前記ノードの間を連結し１文字のラベルが付与された複数の枝と、を含み、一端が同一のノードに連結された個々の枝に付与された前記ラベルの文字が互いに相違し、ルートノードから何れかのノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列が、置換先文字列と対応付けられた置換元文字列に一致し、かつ前記何れかのノードに前記置換元文字列に対応する識別情報が付与されたトライ木を、前記統合した置換テーブルに登録されている前記置換元文字列を網羅するように構築し、
前記構築した前記トライ木に含まれる前記ルートノードから第１のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列の最長接尾辞が、前記ルートノードから前記第１のノードと異なる第２のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列に一致する場合に、前記第１のノードから前記第２のノードへ向かうフェイリアリンクを追加することを、前記トライ木に含まれる全てのノードを前記第１のノードとして各々行い、
置換対象文字列の先頭から１文字ずつ取り出すと共に、前記トライ木の前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に前記取り出した文字がラベルとして付与された枝が存在せず、現在のノードに前記フェイリアリンクの基端が連結されている場合は、前記フェイリアリンクの先端に連結されたノードへ移動し、移動先のノードに識別情報が付与されている場合は識別情報を記録することを、前記置換対象文字列から全ての文字を取り出す迄繰り返すことで、前記置換対象文字列に含まれる前記置換元文字列を探索する
ことを含む処理を行わせるための文字列置換プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列置換装置、文字列置換方法及び文字列置換プログラムに関する。
【背景技術】
【０００２】
データベースに登録されたデータのうち、同一人のデータを判定して統合する名寄せを行う場合、同一人の名称を表す文字列が一致するように、データベースに登録された名称を表す文字列の置換が行われる。
【０００３】
上記に関連して、漢字で表記された漢字氏名が欠損しかつカナ氏名の読み間違いの可能性があり、漢字氏名とカナ氏名により登録されているマスタデータベースに統合できない未統合データに対して一定の法則により丸めを行う第１の技術が提案されている。第１の技術は、丸められた丸め変換後の未統合データをマスタデータベースに統合して出力しすることで、カナ氏名によるデータの名寄せ処理を実現している。
【０００４】
また、異なるシステムで使用される複数のデータベースに登録されている個人名及び住所を統一した表記形式に変換し、個別名寄せ編集ファイルを生成する第２の技術が提案されている。第２の技術は、各個別名寄せ編集ファイルに登録された個人情報をマージし、重複する個人情報を削除し、統合名寄せ編集ファイルを生成し、統合名寄せ編集ファイルの住所を地域ＪＩＳコードに変換することで、１つの統合データベースを生成している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−８３８９号公報
【特許文献１】特開２００５−１１０４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
文字列置換は、置換元文字列と置換先文字列を対応付けて登録した置換テーブルを用意し、変換対象文字列を置換テーブルに登録された置換元文字列と照合し、何れかの置換元文字列が変換対象文字列が含まれているか否かを探索する。そして、変換対象文字列に含まれていた置換元文字列を対応する置換先文字列に置換することで実現される。しかし、変換対象文字列には、異なる置換元文字列が一部重複して存在している可能性がある。このため、変換対象文字列と置換テーブルに登録された置換元文字列との照合にあたっては、複数の置換元文字列との照合を並列に行うか、変換対象文字列の中で照合対象の文字の位置を前後させながら個々の置換元文字列との照合を行う必要がある。このため、変換対象文字列に含まれている置換元文字列の探索に長い時間が掛かるという課題がある。
【０００７】
また、名寄せ処理を実現するためには、文字列置換として、異体字変換や濁音除去、漢数字変換、英数字半角化、略称正式化変換等の複数種の文字列置換を行う必要がある。個々の文字列置換は、メンテナンス性も考慮し、各々別個に置換テーブルを用意し、変換対象文字列を個々の置換テーブルに登録された置換元文字列と照合して探索することによって成される。従って、複数種の文字列置換を行う場合、変換対象文字列と置換テーブルに登録された置換元文字列との照合・探索を複数回行う必要があり、文字列置換に長い時間が掛かるという課題もある。
【０００８】
これに対し、前述した第１の技術及び第２の技術には、上記の課題を解決する構成は開示されていない。
【０００９】
一つの側面では、本発明は、変換対象文字列に含まれる置換元文字列を置換先文字列へ置換する際の処理時間を短縮することを目的とする。
【課題を解決するための手段】
【００１０】
開示の技術は、置換元文字列と置換先文字列とが対応付けられて登録された複数種の置換テーブルを単一の置換テーブルに統合する統合部を備えている。また開示の技術は、複数のノードと、一対のノードの間を連結し１文字のラベルが付与された複数の枝と、を含むトライ木を構築するトライ木構築部を備えている。前記トライ木は、一端が同一のノードに連結された個々の枝に付与されたラベルの文字が互いに相違している。また、前記トライ木は、ルートノードから何れかのノードに至るルート上の複数の枝に付与されたラベルの文字で表される文字列が、置換先文字列と対応付けられた置換元文字列に一致し、かつ前記何れかのノードに前記置換元文字列に対応する識別情報が付与されている。そして、前記トライ木は、統合部によって統合された置換テーブルに登録されている置換元文字列を網羅するように構築される。
【００１１】
また、開示の技術は、トライ木構築部によって構築された前記トライ木にフェイリアリンクを追加するフェイリアリンク追加部を備えている。フェイリアリンク追加部は、ルートノードから第１のノードに至るルート上の複数の枝に付与されたラベルの文字で表される文字列の最長接尾辞を、ルートノードから第１のノードと異なる第２のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列と比較する。そして、フェイリアリンク追加部は、両者が一致する場合に、前記第１のノードから前記第２のノードへ向かうフェイリアリンクを追加することを、前記トライ木に含まれる全てのノードを前記第１のノードとして各々行う。
【００１２】
そして開示の技術は、置換対象文字列に含まれる置換元文字列を探索する探索部を備えている。探索部は、置換対象文字列の先頭から１文字ずつ取り出すと共に、トライ木のルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動する。また探索部は、一端が現在のノードに連結された枝の中に前記取り出した文字がラベルとして付与された枝が存在せず、現在のノードにフェイリアリンクの基端が連結されている場合は、前記フェイリアリンクの先端に連結されたノードへ移動する。そして探索部は、移動先のノードに識別情報が付与されている場合は識別情報を記録することを、置換対象文字列から全ての文字を取り出す迄繰り返す。
【発明の効果】
【００１３】
変換対象文字列に含まれる置換元文字列を置換先文字列へ置換する際の処理時間を短縮できる、という効果を有する。
【図面の簡単な説明】
【００１４】
【図１】実施形態で説明した名寄せ処理装置の機能ブロック図である。
【図２】名寄せ処理装置として機能するアプリケーションサーバを含むコンピュータシステムの概略ブロック図である。
【図３】名寄せ処理の一例を示すフローチャートである。
【図４】(Ａ)は名寄せ対象のデータ、(Ｂ)はクレンジング処理後のデータ、(Ｃ)は文字列置換処理後のデータ、(Ｄ)はマッチング結果の一例を各々示す図表である。
【図５】置換テーブル統合処理の一例を示すフローチャートである。
【図６】複数種の置換テーブルの統合を説明するための概略図である。
【図７】複数種の置換テーブルの統合の適用順を説明するための概略図である。
【図８】置換テーブルの統合における結合ルールを示す概略図である。
【図９】置換テーブルの統合の適用順に応じて文字列置換処理の結果が相違することを説明するための概略図である。
【図１０】トライ木構築処理の一例を示すフローチャートである。
【図１１】構築されるトライ木の一例を示す概略図である。
【図１２】フェイリアリンク追加処理の一例を示すフローチャートである。
【図１３】トライ木に追加されたフェイリアリンクの一例を示す概略図である。
【図１４】文字列探索・置換処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照して開示の技術の実施形態の一例を詳細に説明する。図１には、本実施形態に係る名寄せ処理装置１０が示されている。名寄せ処理装置１０はマスタＤＢ(データベース)記憶部３２に接続され、マスタＤＢ記憶部３２に記憶されたマスタＤＢに登録されたデータのうち、同一人のデータを判定して統合する名寄せを行うものである。
【００１６】
名寄せ処理装置１０は、クレンジング処理部１２、置換テーブル記憶部１４、置換テーブル統合部１６、ＤＦＡ(Deterministic Finite Automaton：決定性有限オートマトン)置換部１８、マッチング処理部２０及びマッチング結果統合部２２を備えている。
【００１７】
クレンジング処理部１２は、マスタＤＢに登録されたデータに対し、例えば住所データの正規化や補完等のクレンジング処理を行う。置換テーブル記憶部１４は、置換元文字列と置換先文字列が対応付けて登録された置換テーブルを複数種記憶している。本実施形態において、置換テーブル記憶部１４が記憶する置換テーブルには、異体字変換を行うための置換テーブル、濁音除去変換が行うための置換テーブル、漢数字変換を行うための置換テーブルが含まれる。また、置換テーブル記憶部１４が記憶する置換テーブルには、英数字半角化変換を行うための置換テーブル、略称正式化変換を行うための置換テーブルも含まれる(図６参照)。
【００１８】
置換テーブル統合部１６は、置換テーブル記憶部１４が記憶する複数種の置換テーブルのうち、文字列置換に適用することが選択された置換テーブルを単一の置換テーブルへ統合する処理を行う。ＤＦＡ置換部１８は、クレンジング処理を経たデータに対し、置換テーブル統合部１６によって統合された置換テーブルに登録されている置換元文字列が含まれているか否かを探索する。そしてＤＦＡ置換部１８は、クレンジング処理を経たデータ(置換対象文字列)に含まれている置換元文字列を対応する置換先文字列へ置換する文字列置換を行う。
【００１９】
ＤＦＡ置換部１８は、トライ木構築部２４、フェイリアリンク(failure link)追加部２６、置換元文字列探索部２８及び文字列置換部３０を備えている。トライ木構築部２４は、置換テーブル統合部１６によって統合された置換テーブルに登録されている置換元文字列から、置換対象文字列に含まれている前記置換元文字列を探索するためのトライ木を構築する。フェイリアリンク追加部２６は、トライ木構築部２４によって構築されたトライ木に対し、置換対象文字列と置換元文字列のマッチング先に失敗した際の移動先を表すフェイリアリンクを追加する。
【００２０】
置換元文字列探索部２８は、トライ木構築部２４によって構築され、フェイリアリンク追加部２６によってフェイリアリンクが追加されたトライ木を用い、置換対象文字列に含まれている置換元文字列を探索する。文字列置換部３０は、置換元文字列探索部２８の探索によって抽出された置換対象文字列に含まれている置換元文字列を、対応する置換先文字列に置換する文字列置換を行う。
【００２１】
マッチング処理部２０は、ＤＦＡ置換部１８による文字列変換を経たデータをレコード単位で照合し、照合した組における同一人のデータである確度を演算し、同一人のデータである確度が比較的高いデータの組を抽出する。マッチング結果統合部２２は、マッチング処理部２０によって抽出されたデータの組のうち、演算された確度が閾値以上のデータの組について、同一人のデータであると見做して統合する処理を行う。
【００２２】
名寄せ処理装置１０は、図２に示すコンピュータ・システム３６に含まれるアプリケーションサーバ３８で実現することができる。コンピュータ・システム３６は、アプリケーションサーバ３８、端末装置４０及びＤＢサーバ４２を備えており、アプリケーションサーバ３８、端末装置４０及びＤＢサーバ４２はコンピュータ・ネットワーク４４を介して互いに接続されている。なお、図２では端末装置４０を１台のみ示しているが、端末装置４０は複数台設けられていてもよい。
【００２３】
なお、置換テーブル統合部１６は開示の技術における統合部の一例であり、ＤＦＡ置換部１８のトライ木構築部２４は開示の技術におけるトライ木構築部の一例である。また、ＤＦＡ置換部１８のフェイリアリンク追加部２６は開示の技術におけるフェイリアリンク追加部の一例であり、ＤＦＡ置換部１８の置換元文字列探索部２８は開示の技術における探索部の一例である。更に、ＤＦＡ置換部１８の文字列置換部は開示の技術における置換部の一例である。
【００２４】
アプリケーションサーバ３８はＣＰＵ４６、メモリ４８、ＨＤＤ(Hard Disk Drive)やフラッシュメモリ等によって実現される不揮発性の記憶部５０、通信Ｉ／Ｆ(インタフェース)部５２を備えている。ＣＰＵ４６、メモリ４８、記憶部５０及び通信Ｉ／Ｆ部５２はバス５４を介して互いに接続されており、通信Ｉ／Ｆ部５２はコンピュータ・ネットワーク４４に接続されている。
【００２５】
記録媒体としての記憶部５０には、アプリケーションサーバ３８を名寄せ処理装置１０として機能させるための名寄せ処理プログラム５６が記憶されており、置換テーブル記憶領域５８が設けられている。ＣＰＵ４６は、名寄せ処理プログラム５６を記憶部５０から読み出してメモリ４８に展開し、名寄せ処理プログラム５６が有するプロセスを順次実行する。
【００２６】
名寄せ処理プログラム５６は、クレンジング処理プロセス６０、置換テーブル統合プロセス６２、ＤＦＡ置換プロセス６４、マッチング処理プロセス６６及びマッチング結果統合プロセス６８を有する。またＤＦＡ置換プロセス６４はトライ木構築プロセス７０、フェイリアリンク追加プロセス７２、置換元文字列探索プロセス７４及び文字列置換プロセス７６を有する。
【００２７】
ＣＰＵ４６は、クレンジング処理プロセス６０を実行することで、図１に示すクレンジング処理部１２として動作する。またＣＰＵ４６は、置換テーブル統合プロセス６２を実行することで、図１に示す置換テーブル統合部１６として動作する。またＣＰＵ４６は、ＤＦＡ置換プロセス６４を実行することで、図１に示すＤＦＡ置換部１８として動作する。またＣＰＵ４６は、マッチング処理プロセス６６を実行することで、図１に示すマッチング処理部２０として動作する。またＣＰＵ４６は、マッチング結果統合プロセス６８を実行することで、図１に示すマッチング結果統合部２２として動作する。
【００２８】
またＣＰＵ４６は、トライ木構築プロセス７０を実行することで、図１に示すトライ木構築部２４として動作する。またＣＰＵ４６は、フェイリアリンク追加プロセス７２を実行することで、図１に示すフェイリアリンク追加部２６として動作する。またＣＰＵ４６は、置換元文字列探索プロセス７４を実行することで、図１に示す置換元文字列探索部２８として動作する。またＣＰＵ４６は、文字列置換プロセス７６を実行することで、図１に示す文字列置換部３０として動作する。また、置換テーブル記憶領域５８は置換テーブル記憶部１４として機能する。これにより、名寄せ処理プログラム５６を実行したアプリケーションサーバ３８が名寄せ処理装置１０として機能することになる。
【００２９】
端末装置４０は、ＣＰＵ８０、メモリ８２、ＨＤＤ(Hard Disk Drive)やフラッシュメモリ等によって実現される不揮発性の記憶部８４、通信Ｉ／Ｆ部８６を備えている。端末装置４０はディスプレイ８８、キーボード９０及びマウス９２が接続されており、通信Ｉ／Ｆ部８６を介してコンピュータ・ネットワーク４４に接続されている。
【００３０】
ＤＢサーバ４２はコンピュータ・ネットワーク４４に接続されている。またＤＢサーバ４２はストレージ９４が接続されており、ストレージ９４はマスタＤＢ９６を記憶している。ストレージ９４は図１に示すマスタＤＢ記憶部３２として機能する。
【００３１】
次に本実施形態の作用として、端末装置４０を介してマスタＤＢ９６に対する名寄せ処理の実行が利用者から指示された場合に、アプリケーションサーバ３８で行われる名寄せ処理について、図３を参照して説明する。
【００３２】
名寄せ処理のステップ１５０において、クレンジング処理部１２は、マスタＤＢ９６に登録されている名寄せ対象のデータをＤＢサーバ４２経由で取得する。クレンジング処理部１２によって取得される名寄せ対象のデータの一例を図４(Ａ)に示す。図４(Ａ)に示すデータは複数レコード分のデータを含み、各レコードのデータは"id","name","address"の各項目についてデータが各々設定されている。
【００３３】
次のステップ１５２において、クレンジング処理部１２は、名寄せ対象のデータに対して、住所データの正規化や補完等のクレンジング処理を実行する。クレンジング処理後のデータの一例を図４(Ｂ)に示す。図４(Ｂ)に示すデータは、図４(Ａ)と比較すれば明らかなように、"id"＝002のデータの"address"に文字列「神奈川県」が追加され、"id"＝003のデータの"address"に文字列「東京都」が追加されている。
【００３４】
次のステップ１５４において、置換テーブル統合部１６は、置換テーブル統合処理を行う。以下、図５を参照して置換テーブル統合処理を説明する。
【００３５】
置換テーブル統合処理のステップ１７０において、置換テーブル統合部１６は、統合対象の置換テーブルの種類、数ｔ及び各テーブルの適用順を取得する。本実施形態では、端末装置４０を介して名寄せ処理の実行が利用者から指示された場合、置換テーブル記憶部１４に記憶されている複数種の置換テーブルのうち、文字列置換に適用する(統合対象の)置換テーブルの種類及び適用順も併せて指示される。置換テーブル統合部１６は、利用者から指示された、統合対象の置換テーブルの種類、数ｔ及び適用順を端末装置４０から取得する。なお、統合対象の置換テーブルの種類、数ｔ及び適用順は、利用者が実施を所望している文字列置換の内容に応じて利用者により決定される。
【００３６】
次のステップ１７２において、置換テーブル統合部１６は、ｔ個の置換テーブルのうち適用順が１番目の置換テーブルを統合対象の置換テーブルＡとして読み込む。またステップ１７４において、置換テーブル統合部１６は、変数ｋに２を設定する。そしてステップ１７６において、置換テーブル統合部１６は、ｔ個の置換テーブルのうち適用順がｋ番目の置換テーブルを統合対象の置換テーブルＢとして読み込む。
【００３７】
次のステップ１７８において、置換テーブル統合部１６は、置換テーブルＡに登録されている個々の置換パターン(置換元文字列と置換先文字列を対応付けたパターン)を識別するための変数ｉに０を設定する。またステップ１８０において、置換テーブル統合部１６は、置換テーブルＡに登録されている置換パターンから、ｉ番目に登録されている置換パターンを読み込む。
【００３８】
次のステップ１８２において、置換テーブル統合部１６は、置換テーブルＢに登録されている個々の置換パターンを識別するための変数ｊに０を設定する。またステップ１８４において、置換テーブル統合部１６は、置換テーブルＢに登録されている置換パターンから、ｊ番目に登録されている置換パターンを読み込む。
【００３９】
次のステップ１８６において、置換テーブル統合部１６は、置換テーブルＡから読み込んだｉ番目の置換パターンと置換テーブルＢから読み込んだｊ番目の置換パターンが、図６(Ａ)に示す結合ルール(１)に該当するか否か判定する。図６(Ａ)に示す結合ルール(１)は、置換テーブルＡのｉ番目の置換パターン(図６では置換パターンＡと表記)における置換元文字列と、置換テーブルＢのｊ番目の置換パターン(図６では置換パターンＢと表記)における置換元文字列が同じというルールである。
【００４０】
ステップ１８６の判定が肯定された場合はステップ１８８へ移行する。ステップ１８８において、置換テーブル統合部１６は、結合ルール(１)の新置換パターンとして、置換テーブルＡのｉ番目の置換パターン(置換パターンＡ)のみを採用し、統合置換テーブルへ出力する処理を行う。ステップ１８８の処理を行うとステップ２０８へ移行する。
【００４１】
一方、ステップ１８６の判定が否定された場合はステップ１９０へ移行する。ステップ１９０において、置換テーブル統合部１６は、置換テーブルＡから読み込んだｉ番目の置換パターンと置換テーブルＢから読み込んだｊ番目の置換パターンが、図６(Ｂ)に示す結合ルール(２)に該当するか否か判定する。図６(Ｂ)に示す結合ルール(２)は、置換テーブルＡのｉ番目の置換パターン(置換パターンＡ)における置換先文字列と、置換テーブルＢのｊ番目の置換パターン(置換パターンＢ)における置換元文字列が同じというルールである。
【００４２】
ステップ１９０の判定が肯定された場合はステップ１９２へ移行する。ステップ１９２において、置換テーブル統合部１６は、結合ルール(２)の新置換パターンとして、置換テーブルＡのｉ番目の置換パターンにおける置換元文字列を、置換テーブルＢのｊ番目の置換パターンにおける置換先文字列へ変換する置換パターンを採用する。そして置換テーブル統合部１６は、採用した置換パターンを統合置換テーブルへ出力する。ステップ１９２の処理を行うとステップ２０８へ移行する。
【００４３】
一方、ステップ１９０の判定が否定された場合はステップ１９４へ移行する。ステップ１９４において、置換テーブル統合部１６は、置換テーブルＡから読み込んだｉ番目の置換パターンと置換テーブルＢから読み込んだｊ番目の置換パターンが、図６(Ｃ)に示す結合ルール(３)に該当するか否か判定する。図６(Ｃ)に示す結合ルール(３)は、置換テーブルＡのｉ番目の置換パターン(置換パターンＡ)における置換先文字列が、置換テーブルＢのｊ番目の置換パターン(置換パターンＢ)における置換元文字列を含むというルールである。
【００４４】
ステップ１９４の判定が肯定された場合はステップ１９６へ移行する。ステップ１９６において、置換テーブル統合部１６は、結合ルール(３)の新置換パターンとして、置換テーブルＢのｊ番目の置換パターン(置換パターンＢ)を採用する。また、結合ルール(３)の新置換パターンとして、置換テーブルＡのｉ番目の置換パターンの置換元文字列を、新たな文字列に置換する置換パターンも採用する。ここでいう新たな文字列は、置換テーブルＢのｊ番目の置換パターンの置換先文字列に、置換テーブルＡのｉ番目の置換パターンの置換先文字列のうち、置換テーブルＢのｊ番目の置換パターンの置換元文字列に含まれない文字列を加えた文字列である。そして、採用した２つの置換パターンを統合置換テーブルへ出力する。ステップ１９６の処理を行うとステップ２０８へ移行する。
【００４５】
一方、ステップ１９４の判定が否定された場合はステップ１９８へ移行する。ステップ１９８において、置換テーブル統合部１６は、置換テーブルＡから読み込んだｉ番目の置換パターンと置換テーブルＢから読み込んだｊ番目の置換パターンが、図６(Ｄ)に示す結合ルール(４)に該当するか否か判定する。図６(Ｄ)に示す結合ルール(４)は、置換テーブルＡのｉ番目の置換パターン(置換パターンＡ)における置換先文字列が、置換テーブルＢのｊ番目の置換パターン(置換パターンＢ)における置換元文字列に含まれるというルールである。
【００４６】
ステップ１９８の判定が肯定された場合はステップ２００へ移行する。ステップ２００において、置換テーブル統合部１６は、結合ルール(４)の新置換パターンとして、置換テーブルＡのｉ番目の置換パターン(置換パターンＡ)及び置換テーブルＢのｊ番目の置換パターン(置換パターンＢ)を各々採用する。また、結合ルール(４)の新置換パターンとして、新たな文字列を、置換テーブルＢのｊ番目の置換パターンの置換先文字列に置換する置換パターンも採用する。ここでいう新たな文字列は、置換テーブルＡのｉ番目の置換パターンの置換元文字列に、置換テーブルＢのｊ番目の置換パターンの置換元文字列のうち、置換テーブルＡのｉ番目の置換パターンの置換先文字列に含まれない文字列を加えた文字列である。そして、採用した３つの置換パターンを統合置換テーブルへ出力する。ステップ２００の処理を行うとステップ２０８へ移行する。
【００４７】
また、ステップ１９８の判定が否定された場合はステップ２０２へ移行し、置換テーブル統合部１６は、変数ｊが置換テーブルＢに登録された置換パターンの総数ｍよりも小さいか否か判定する。ステップ２０２の判定が肯定された場合はステップ２０４へ移行し、ステップ２０４において、置換テーブル統合部１６は、変数ｊを１だけインクリメントした後に、ステップ１８４へ戻る。
【００４８】
これにより、ステップ１８６,１９０,１９４,１９８の何れかの判定が肯定されるか、ステップ２０２の判定が否定される迄、ステップ１８４〜ステップ２０４が繰り返される。そして、置換テーブルＢに登録されたｍ個の置換パターンの中に、置換テーブルＡのｉ番目の置換パターンに対して結合ルール(1)〜(4)の何れかに該当する置換パターンがあれば、ステップ１８６,１９０,１９４,１９８の何れかの判定が肯定される。
【００４９】
また、置換テーブルＢに登録されたｍ個の置換パターンの中に、置換テーブルＡのｉ番目の置換パターンに対して結合ルール(1)〜(4)の何れかに該当する置換パターンがなければ、ステップ２０２の判定が否定されてステップ２０６へ移行する。ステップ２０６において、置換テーブル統合部１６は、置換テーブルＡのｉ番目の置換パターンを統合置換テーブルへ出力し、ステップ２０８へ移行する。
【００５０】
ステップ２０８において、置換テーブル統合部１６は、変数ｉが置換テーブルＡに登録された置換パターンの総数ｎよりも小さいか否か判定する。ステップ２０８の判定が肯定された場合はステップ２１０へ移行し、ステップ２１０において、置換テーブル統合部１６は、変数ｉを１だけインクリメントした後に、ステップ１８０へ戻る。これにより、ステップ２０８の判定が否定される迄、ステップ１８０〜ステップ２１０が繰り返され、結合ルール(1)〜(4)の何れかに該当する置換パターンの組が探索される。
【００５１】
ステップ２０８の判定が否定されるとステップ２１２へ移行し、ステップ２１２において、置換テーブル統合部１６は、変数ｊに０を設定する。また、次のステップ２１４において、置換テーブル統合部１６は、置換テーブルＢに登録されている置換パターンから、ｊ番目に登録されている置換パターンを読み込む。
【００５２】
次のステップ２１６において、置換テーブル統合部１６は、置換テーブルＢから読み込んだｊ番目の置換パターンが、先のステップ１８０〜ステップ２１０のループにおいて、結合ルール(1)〜(4)の何れかに該当したか否か判定する。ステップ２１６の判定が肯定された場合はステップ２２０へ移行する。また、ステップ２１６の判定が否定された場合はステップ２１８へ移行し、ステップ２１８において、置換テーブル統合部１６は、置換テーブルＢから読み込んだｊ番目の置換パターンを統合置換テーブルへ出力した後にステップ２２０へ移行する。
【００５３】
次のステップ２２０において、置換テーブル統合部１６は、変数ｊが置換テーブルＢに登録された置換パターンの総数ｍよりも小さいか否か判定する。ステップ２２０の判定が肯定された場合はステップ２２２へ移行し、ステップ２２２において、置換テーブル統合部１６は、変数ｊを１だけインクリメントした後に、ステップ２１４へ戻る。これにより、ステップ２２０の判定が否定される迄、ステップ２１４〜ステップ２２２が繰り返される。
【００５４】
ステップ２２０の判定が否定されるとステップ２２４へ移行する。ステップ２２４において、置換テーブル統合部１６は、変数ｋの値が統合対象の置換テーブルの数ｔに達したか否か判定する。ステップ２２４の判定が否定された場合はステップ２２６へ移行し、ステップ２２６において、置換テーブル統合部１６は、統合した置換テーブルを置換テーブルＡとして読み込む。次のステップ２２８において、置換テーブル統合部１６は、変数ｋの値を１だけインクリメントしてステップ１７６に戻る。
【００５５】
これにより、ステップ２２４の判定が肯定される迄、ステップ１７６〜ステップ２２８が繰り返される。従って、以上の処理により、例として図７に示すように、置換テーブル記憶部１４に記憶されている複数の置換テーブルのうち、統合対象として選択された複数の置換テーブルを統合した単一の統合置換テーブル(実行用置換テーブル)が生成される。また、統合対象として選択された複数の置換テーブルは、例として図８に示すように、利用者によって指示された適用順に統合される。
【００５６】
複数の置換テーブルを指示された適用順に統合する理由は、置換テーブルの適用順によって文字列置換処理の結果が相違することがあるためである。例えば図９に示すように、文字列「ヴァイオリン」に対して文字列置換を行う場合を考える。置換パターン"ァ"→"ア"を含む第１の置換テーブルと、置換パターン"ヴァ"→"バ"を含む第２の置換テーブルのうち、第１の置換テーブルの適用順が先の場合、文字列「ヴァイオリン」は文字列「ヴアイオリン」へ置換される。一方、第２の置換テーブルの方が適用順が先の場合、文字列「ヴァイオリン」は文字列「バイオリン」へ置換される。
【００５７】
図５に示す置換テーブル統合処理を終了すると、図３に示す名寄せ処理のステップ１５６へ移行する。ステップ１５６において、トライ木構築部２４は、トライ木構築処理を行う。以下、図１０を参照してトライ木構築処理を説明する。
【００５８】
トライ木構築処理のステップ２３０において、トライ木構築部２４は、まずトライ木のルートノード(図１１に示すルートノード１００も参照)を作成する。次のステップ２３２において、トライ木構築部２４は、個々の置換元文字列を識別するための変数ｉに０を設定する。ステップ２３４において、トライ木構築部２４は、統合置換テーブル(先の置換テーブル統合処理で統合された置換テーブル)からｉ番目の置換元文字列ｉ(長さp_i)を抽出する。
【００５９】
次のステップ２３６において、トライ木構築部２４は、先のステップ２３０で作成したトライ木のルートノード１００へ移動する。ステップ２３８において、トライ木構築部２４は、置換元文字列ｉから抽出する文字の位置を識別するための変数ｊに０を設定する。次のステップ２４０において、トライ木構築部２４は、置換元文字列ｉの先頭からｊ＋１番目の文字を抽出する。
【００６０】
ステップ２４２において、トライ木構築部２４は、一端が現在のノード(この場合はルートノード)に接続された枝の中に、ステップ２４０で抽出したｊ＋１番目の文字がラベル付けされた枝が有るか否か判定する。トライ木構築処理の実行を開始した当初は、トライ木に枝自体が存在しないので、ステップ２４２の判定が否定されてステップ２４６へ移行する。
【００６１】
ステップ２４６において、トライ木構築部２４は、置換元文字列ｉの先頭からｊ＋１〜p_i番目の文字から、各文字がラベル付けされた新たな枝及びノードを作成する。例えば、図１１に示すように、置換元文字列ｉが「富士山」の場合、"富","士","山"の各文字がラベル付けされた３本の枝１０２Ａ〜１０２Ｃが作成されると共に、各枝の先端に位置する合計３個のノード１０４Ａ〜１０４Ｃが作成される。また、作成した一群の枝及びノードのうちの先端のノードへ移動する。
【００６２】
ステップ２４６の処理を行うとステップ２５２へ移行し、ステップ２５２において、トライ木構築部２４は、現在のノードに変数ｉをＩＤ(開示の技術における識別情報の一例)として付与する。従って、図１１に示す例では、ルートノード１００から"富","士","山"の各文字がラベル付けされた３本の枝１０２Ａ〜１０２Ｃを辿った先に位置しているノード１０４ＣにＩＤ＝１が付与される。
【００６３】
次のステップ２５４において、トライ木構築部２４は、変数ｉが統合置換テーブルに登録されている置換元文字列の総数Ｍよりも小さいか否か判定する。ステップ２５４の判定が肯定された場合はステップ２５６へ移行し、ステップ２５６において、トライ木構築部２４は、変数ｉを１だけインクリメントしてステップ２３４に戻る。
【００６４】
ここで、図１１に示すように、次の置換元文字列ｉが「富士通」の場合、ステップ２４０では、置換元文字列ｉの先頭からｊ＋１番目の文字として文字"富"が抽出される。この時点では、一端がルートノードに接続された枝の中に、文字"富"がラベル付けされた枝１０２Ａが存在しているので、ステップ２４２の判定が肯定されてステップ２４４へ移行する。ステップ２４４において、トライ木構築部２４は、ｊ＋１番目の文字がラベル付けされた枝の先のノードへ移動する。この場合はノード１０４Ａへ移動される。
【００６５】
次のステップ２４８において、トライ木構築部２４は、変数ｊ＋１の値が置換元文字列ｉの長さp_i未満か否か判定する。ステップ２４８の判定が肯定された場合はステップ２５０へ移行し、ステップ２５０において、トライ木構築部２４は、変数ｊの値を１だけインクリメントし、ステップ２４０に戻る。
【００６６】
置換元文字列ｉが「富士通」の場合、ステップ２４０では、置換元文字列ｉの先頭からｊ＋１番目の文字として文字"士"が抽出される。この時点では、一端がノード１０４Ａに接続された枝の中に、文字"士"がラベル付けされた枝１０２Ｂが存在しているので、ステップ２４２の判定が肯定されてステップ２４４へ移行する。ステップ２４４において、トライ木構築部２４は、ｊ＋１番目の文字がラベル付けされた枝の先のノードへ移動する。この場合はノード１０４Ｂへ移動される。
【００６７】
続いて、ステップ２４８,２５０を経て、ステップ２４０では、置換元文字列ｉの先頭からｊ＋１番目の文字として文字"通"が抽出される。この時点では、一端がノード１０４Ｂに接続された枝の中に、文字"通"がラベル付けされた枝は存在していないので、ステップ２４２の判定が否定されてステップ２４６へ移行する。これにより、ステップ２４６では、"通"の文字がラベル付けされた枝１０２Ｄが作成されると共に、枝１０２Ｄの先端に位置するノード１０４Ｄが作成される。また、ステップ２５２において、ルートノード１００から"富","士","通"の各文字がラベル付けされた３本の枝１０２Ａ,１０２Ｂ,１０２Ｄを辿った先に位置しているノード１０４ＤにＩＤ＝２が付与される。
【００６８】
次の置換元文字列ｉが「富士」の場合、置換元文字列ｉの先頭から文字"富","士"が順に抽出される。この時点では、一端がルートノード１００に接続された枝の中に、文字"富"がラベル付けされた枝１０２Ａが存在しており、一端がノード１０４Ａに接続された枝の中に、文字"士"がラベル付けされた枝１０２Ｂも存在している。このため、ステップ２４８の判定が否定されてステップ２５２へ移行する。そしてステップ２５２において、ルートノード１００から"富","士"の各文字がラベル付けされた２本の枝１０２Ａ,１０２Ｂを辿った先に位置しているノード１０４ＢにＩＤ＝３が付与される。
【００６９】
以下同様に、次の置換元文字列ｉが「出羽富士」の場合、置換元文字列ｉの先頭から文字"出"が抽出されるが、一端がルートノード１００に接続された枝の中には、文字"出"がラベル付けされた枝は存在していない。このため、ステップ２４２の判定が否定され、"出","羽","富","士"の各文字がラベル付けされた４本の枝１０２Ｅ〜１０２Ｈが作成されると共に、各枝の先端に位置する合計４個のノード１０４Ｅ〜１０４Ｈが作成される。そして、ルートノード１００から"出","羽","富","士"の各文字がラベル付けされた４本の枝１０２Ｅ〜１０２Ｈを辿った先に位置しているノード１０４ＨにＩＤ＝４が付与されることになる。
【００７０】
また、次の置換元文字列ｉが「富山」の場合、置換元文字列ｉの先頭から文字"富","山"が順に抽出される。この時点では、一端がルートノード１００に接続された枝の中に、文字"富"がラベル付けされた枝１０２Ａが存在している一方、一端がノード１０４Ａに接続された枝の中に、文字"山"がラベル付けされた枝は存在していない。このため、一端がノード１０４Ａに接続された枝として、文字"山"がラベル付けされた枝１０２Ｊが作成されると共に、枝１０２Ｊの先端に位置するノード１０４Ｊが作成される。また、ルートノード１００から"富","山"の各文字がラベル付けされた２本の枝１０２Ａ,１０２Ｊを辿った先に位置しているノード１０４ＪにＩＤ＝５が付与される。
【００７１】
統合置換テーブルに登録された全ての置換元文字列を抽出すると、ステップ２５４の判定が否定されてトライ木構築処理を終了する。これにより、統合置換テーブルに登録されている置換元文字列を網羅するようにトライ木が構築されることになる。トライ木構築処理を終了すると、図３に示す名寄せ処理のステップ１５８へ移行する。ステップ１５８において、フェイリアリンク追加部２６は、フェイリアリンク追加処理を行う。以下、図１２を参照してフェイリアリンク追加処理を説明する。
【００７２】
フェイリアリンク追加処理のステップ２６０において、フェイリアリンク追加部２６は、トライ木構築部２４によって構築されたトライ木のルートノード１００へ移動する。次のステップ２６２において、フェイリアリンク追加部２６は、現在のノードから、フェイリアリンクの追加を未判定のノード１０４へ移動する。ステップ２６４において、フェイリアリンク追加部２６は、現在のノード１０４に対して所定の条件を満たす第２のノード１０４を探索する。所定の条件は、ルートノードから現在のノード１０４に至るルート上の枝１０２に付与されたラベルの文字で表される文字列の最長接尾辞が、ルートノードから第２のノード１０４に至るルート上の枝１０２に付与されたラベルの文字で表される文字列に一致する、という条件である。
【００７３】
次のステップ２６６において、フェイリアリンク追加部２６は、ステップ２６４の探索によって所定の条件に該当する第２のノード１０４を発見したか否か判定する。ステップ２６６の判定が肯定された場合はステップ２６８へ移行し、ステップ２６８において、フェイリアリンク追加部２６は、現在のノード１０４から第２のノード１０４へ向かうフェイリアリンク１０６を追加する。また、ステップ２６６の判定が否定された場合はステップ２７０へ移行し、ステップ２７０において、フェイリアリンク追加部２６は、現在のノード１０４からルートノード１００へ向かうフェイリアリンク１０６を追加する。
【００７４】
具体的には、例えば現在のノードが図１３に示すノード１０４Ｇの場合、ルートノード１００から現在のノード１０４Ｇに至るルート上の枝１０２に付与されたラベルの文字で表される文字列は「出羽富」である。一方、ルートノードからノード１０４Ａに至るルート上の枝１０２Ａに付与されたラベルの文字で表される文字列は「富」であり、最長接尾辞「富」が一致する。この場合はステップ２６６の判定が肯定されることで、現在のノード１０４Ｇから第２のノードとしてのノード１０４Ａへ向かうフェイリアリンク１０６Ａが追加される。
【００７５】
また、例えば現在のノードが図１３に示すノード１０４Ｈの場合、ルートノード１００から現在のノード１０４Ｈに至るルート上の枝１０２に付与されたラベルの文字で表される文字列は「出羽富士」である。一方、ルートノードからノード１０ＢＡに至るルート上の枝１０２Ａに付与されたラベルの文字で表される文字列は「富士」であり、最長接尾辞「富士」が一致する。この場合もステップ２６６の判定が肯定されることで、現在のノード１０４Ｈから第２のノードとしてのノード１０４Ｂへ向かうフェイリアリンク１０６Ｂが追加される。
【００７６】
図１３に示す他のノード１０４については、所定の条件に該当する第２のノードが存在しないので、ステップ２６６の判定が否定されることで、他の各ノード１０４からルートノード１００へ向かうフェイリアリンク１０６が追加される。なお、図１３では、図の錯綜を避けるため、他の各ノード１０４からルートノード１００へ向かうフェイリアリンク１０６の図示を省略している。
【００７７】
ステップ２６８又はステップ２７０の判定を行うとステップ２７２へ移行する。ステップ２７２において、フェイリアリンク追加部２６は、フェイリアリンクの追加を未判定のノードが有るか否かについて、幅優先探索を行って判定する。ステップ２７２の判定が肯定された場合はステップ２６２へ戻り、ステップ２７２の判定が否定される迄、ステップ２６２〜ステップ２７２を繰り返す。ステップ２７２の判定が否定されるとフェイリアリンク追加処理を終了する。
【００７８】
フェイリアリンク追加処理を終了すると、図３に示す名寄せ処理のステップ１６０へ移行する。ステップ１６０において、置換元文字列探索部２８及び文字列置換部３０は、文字列探索・置換処理を行う。以下、図１４を参照して文字列探索・置換処理を説明する。
【００７９】
文字列探索・置換処理のステップ２８０において、置換元文字列探索部２８は、クレンジング処理部によるクレンジング処理を経たデータを置換対象文字列として読み込む。次のステップ２８２において、置換元文字列探索部２８は、置換対象文字列における処理対象の文字の位置を識別するための変数ｉに１を設定する。またステップ２８４において、置換元文字列探索部２８は、トライ木構築部２４によって構築され、フェイリアリンク追加部２６によってフェイリアリンクが追加されたトライ木のルートノード１００へ移動する。
【００８０】
次のステップ２８６において、置換元文字列探索部２８は、置換対象文字列の先頭からｉ番目の文字を抽出する。ステップ２８８において、置換元文字列探索部２８は、現在のノードから延びている枝のうち、ステップ２８６で抽出したｉ番目の文字がラベルとして付与された枝を探索する。次のステップ２９０において、置換元文字列探索部２８は、ステップ２８８の探索によって該当する枝が発見されたか否か判定する。
【００８１】
ステップ２９０の判定が肯定された場合はステップ２９６へ移行し、ステップ２９６において、置換元文字列探索部２８は、ステップ２８８の探索によって発見された該当する枝の先に存在するノード１０４へ移動し、ステップ２９８へ移行する。また、ステップ２９０の判定が否定された場合はステップ２９２へ移行し、ステップ２９２において、置換元文字列探索部２８は、現在のノードがルートノード１００か否か判定する。ステップ２９２の判定が否定された場合はステップ２９４へ移行し、ステップ２９４において、置換元文字列探索部２８は、現在のノード１０４から延びているフェイリアリンク１０６を辿って新たなノード１０４へ移動し、ステップ２９８へ移行する。
【００８２】
ステップ２９８において、置換元文字列探索部２８は、ステップ２９６又はステップ２９４でのノードの移動における移動先のノード１０４にＩＤが付与されているか否か判定する。ステップ２９８の判定が否定された場合はステップ３０２へ移行する。また、ステップ２９８の判定が肯定された場合はステップ３００へ移行する。ステップ３００において、置換元文字列探索部２８は、移動先のノード１０４に付与されているＩＤとマッチング位置(現在の文字の置換対象文字列内の位置とルートノード１００からの距離との差)をマッチング情報として記録し、ステップ３０２へ移行する。なお、先のステップ２９２の判定が肯定された場合、ルートノード１００にはルートノード１００からのフェイリアリンクが付加されていないので、ステップ３０２へ移行する。
【００８３】
ステップ３０２において、置換元文字列探索部２８は、上記の処理でフェイリアリンクを辿ってノードを移動したか(ステップ２９４の処理を行ったか)否か判定する。ステップ３０２の判定が肯定された場合はステップ２８８に戻り、ｉ番目の文字がラベルとして付与された枝の再探索を行う。また、ステップ３０２の判定が否定された場合はステップ３０４へ移行する。
【００８４】
ステップ３０４において、置換元文字列探索部２８は、先のステップ２８６で抽出した文字が置換対象文字列の末尾の文字か否か判定する。ステップ３０４の判定が否定された場合はステップ３０６へ移行し、ステップ３０６において、置換元文字列探索部２８は、変数ｉを１だけインクリメントし、ステップ２８６に戻る。これにより、ステップ３０４の判定が否定される迄、ステップ２８６〜ステップ３０６が繰り返される。
【００８５】
上述したステップ２８６〜ステップ３０６について、置換対象文字列が「出羽富士山富士山」で、図１３に示すフェイリアリンク付きのトライ木を用いる場合を例に挙げ、更に説明する。
【００８６】
まず、置換対象文字列「出羽富士山富士山」から１番目の文字"出"が抽出され、ステップ２８８の探索で枝１０２Ｅが抽出され、ノード１０４Ｅへ移動される。ノード１０４ＥにはＩＤが付与されていないので、ステップ２９８の判定は否定される。
【００８７】
次に、置換対象文字列「出羽富士山富士山」から２番目の文字"羽"が抽出され、ステップ２８８の探索で枝１０２Ｆが抽出され、ノード１０４Ｆへ移動される。ノード１０４ＦにはＩＤが付与されていないので、ステップ２９８の判定は否定される。
【００８８】
次に、置換対象文字列「出羽富士山富士山」から３番目の文字"富"が抽出され、ステップ２８８の探索で枝１０２Ｇが抽出され、ノード１０４Ｇへ移動される。ノード１０４ＧにはＩＤが付与されていないので、ステップ２９８の判定は否定される。
【００８９】
続いて、置換対象文字列「出羽富士山富士山」から４番目の文字"士"が抽出され、ステップ２８８の探索で枝１０２Ｈが抽出され、ノード１０４Ｈへ移動される。ノード１０４ＨにはＩＤ＝４が付与されているので、ステップ２９８の判定が肯定され、マッチング情報としてＩＤ＝４とマッチング位置＝０が記録される。
【００９０】
次に、置換対象文字列「出羽富士山富士山」から５番目の文字"山"が抽出され、ステップ２８８の探索では該当する枝が抽出されず、フェイリアリンク１０６Ｂを辿ってノード１０４Ｂへ移動される。ノード１０４ＢにはＩＤ＝３が付与されているので、ステップ２９８の判定が肯定され、マッチング情報としてＩＤ＝３とマッチング位置＝２が記録される。また、ステップ３０２の判定が肯定されることで、文字"山"がラベルとして付与された枝の再探索が行われ、枝１０２Ｃが抽出され、ノード１０４Ｃへ移動される。ノード１０４ＢにはＩＤ＝１が付与されているので、ステップ２９８の判定が肯定され、マッチング情報としてＩＤ＝１とマッチング位置＝２が記録される。
【００９１】
次に、置換対象文字列「出羽富士山富士山」から６番目の文字"富"が抽出され、ステップ２８８の探索では該当する枝が抽出されず、図示しないフェイリアリンクを辿ってルートノード１００へ移動される。また、ステップ３０２の判定が肯定されることで、文字"富"がラベルとして付与された枝の再探索が行われ、枝１０２Ａが抽出され、ノード１０４Ａへ移動される。ノード１０４ＡにはＩＤが付与されていないので、ステップ２９８の判定は否定される。
【００９２】
続いて、置換対象文字列「出羽富士山富士山」から７番目の文字"士"が抽出され、ステップ２８８の探索で枝１０２Ｂが抽出され、ノード１０４Ｂへ移動される。ノード１０４ＢにはＩＤ＝３が付与されているので、ステップ２９８の判定が肯定され、マッチング情報としてＩＤ＝３とマッチング位置＝５が記録される。
【００９３】
次に、置換対象文字列「出羽富士山富士山」から８番目の文字"山"が抽出され、ステップ２８８の探索で枝１０２Ｃが抽出され、ノード１０４Ｃへ移動される。ノード１０４ＣにはＩＤ＝１が付与されているので、ステップ２９８の判定が肯定され、マッチング情報としてＩＤ＝１とマッチング位置＝５が記録される。
【００９４】
上記のようにして、置換対象文字列に含まれる置換元文字列の探索が完了すると、ステップ３０４の判定が肯定されてステップ３０８へ移行する。ステップ３０８において、置換元文字列探索部２８は、上記処理で記録したマッチング情報に最先最長優先を適用することで置換元文字列を特定する。例えば、先の例で抽出された置換元文字列及び対応するマッチング情報は次の表１に示す通りである。
【００９５】
【表１】
2014044498.tif 000003
【００９６】
表１のうち、１行目〜３行目のマッチング情報(4,0),(3,2),(1,2)については、マッチング情報(4,0)が置換対象文字列上で先に位置しており、かつ置換元文字列の長さも長いので、マッチング情報(4,0)に対応する置換元文字列「出羽富士」が選択される。また表１のうち、４,５行目のマッチング情報(3,5),(1,5)については、マッチング情報(1,5)の方が置換元文字列の長さが長いので、マッチング情報(1,5)に対応する置換元文字列「富士山」が選択される。結果として、置換対象文字列「出羽富士山富士山」のうち１〜４文字目の「出羽富士」と６〜８文字目の「富士山」が置換元文字列として特定されることになる(<<出羽富士>>山<<富士山>>)。
【００９７】
次のステップ３１０において、文字列置換部３０は、置換対象文字列のうちステップ３０８で特定された置換元文字列を、統合置換テーブルに前記置換元文字列と対応付けて登録されている置換先文字列へ各々置換する。前述のように、統合置換テーブルは複数種の置換テーブルに登録された置換パターンを統合したものであるので、ステップ３１０の１回の文字列置換により、複数種の置換パターンを統合した置換パターンに基づく文字列の置換が行われる。例えば、図４(Ｂ)に示すデータに対して文字列探索・置換処理を行った結果の一例を図４(Ｃ)に示す。図４(Ｃ)に示すデータは、図４(Ｂ)と比較すれば明らかなように、"id"＝001のデータの"name"の文字列に対しては、濁音を除去する置換と、「ウェア」から「ウエア」への置換が行われている。また、"id"＝002のデータの"name"の文字列に対しては、「ＭＷ」を「ミトルウエア」へ置換する略称正式化が行われている。
【００９８】
次のステップ３１２において、置換元文字列探索部２８は、他の置換対象文字列が有るか否か判定する。ステップ３１２の判定が肯定された場合にはステップ２８０に戻り、ステップ３１２の判定が否定される迄、ステップ２８０〜ステップ３１２を繰り返す。ステップ３１２の判定が否定されると文字列探索・置換処理を終了する。
【００９９】
文字列探索・置換処理を終了すると、図３に示す名寄せ処理のステップ１６２へ移行する。ステップ１６２において、マッチング処理部２０は、文字列探索・置換処理を経たデータをレコード単位で比較し、比較したレコードが同一人のデータかを表す評価値を演算し、評価値が閾値以上のレコードを同一人のデータと判定するマッチング処理を行う。マッチング処理結果の一例を図４(Ｄ)に示す。図４(Ｄ)は、"id"＝001のデータと"id"＝002のデータの評価値が100、"id"＝003のデータと"id"＝006のデータの評価値が90であることを示している。
【０１００】
そして、次のステップ１６４において、マッチング結果統合部２２は、マッチング処理部２０によるマッチング処理の結果に基づき、同一人のデータと判定されたレコードを単一のレコードに統合する名寄せ処理を行う。これにより、マスタＤＢ９６に重複登録された同一人のデータが統合されることで、データの冗長性を低下させることができる。
【０１０１】
このように、本実施形態では、文字列置換を行うにあたり、文字列置換に適用する複数種の置換テーブルを単一の統合置換テーブルに予め統合するので、置換対象文字列に対する置換元文字列の探索が１回で済む。また、統合置換テーブルに登録された置換元文字列からフェイリアリンク付きのトライ木を構築し、フェイリアリンク付きのトライ木を用いて文字列探索・置換処理を行うので、探索処理が置換対象文字列１文字当り１回で済む。従って、変換対象文字列に含まれる置換元文字列を置換先文字列へ置換する際の処理時間を短縮することができる。
【０１０２】
なお、上記では端末装置４０からの指示によりアプリケーションサーバ３８が名寄せ処理を行う態様を説明したが、これに限定されるものではなく、開示の技術は単一のコンピュータで実現することも可能である。
【０１０３】
また、上記では開示の技術に係る文字列置換をマスタＤＢ９６の名寄せ処理に適用した態様を説明したが、これに限定されるものではなく、開示の技術に係る文字列置換は単独で用いてもよいし、名寄せ以外の処理と組み合わせて用いるようにしてもよい。
【０１０４】
また、上記では日本語の文字列に対する文字列置換に適用した態様を説明したが、これに限定されるものではなく、日本語以外の言語で記述された文字列に対する文字列置換に適用することも可能である。
【０１０５】
また、上記では開示の技術に係る文字列置換プログラムの一例である名寄せ処理プログラム５６がアプリケーションサーバ３８の記憶部５０に予め記憶（インストール）されている態様を説明した。しかし、これに限定されるものではなく、開示の技術に係る文字列置換プログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【０１０６】
本明細書に記載された全ての文献、特許出願及び技術規格は、個々の文献、特許出願及び技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。
【０１０７】
以上の実施形態に関し、更に以下の付記を開示する。
【０１０８】
（付記１）
置換元文字列と置換先文字列とが対応付けられて登録された複数種の置換テーブルを単一の置換テーブルに統合する統合部と、
複数のノードと、一対の前記ノードの間を連結し１文字のラベルが付与された複数の枝と、を含み、一端が同一のノードに連結された個々の枝に付与された前記ラベルの文字が互いに相違し、ルートノードから何れかのノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列が、置換先文字列と対応付けられた置換元文字列に一致し、かつ前記何れかのノードに前記置換元文字列に対応する識別情報が付与されたトライ木(図１１)を、前記統合部によって統合された置換テーブルに登録されている前記置換元文字列を網羅するように構築するトライ木構築部と、
前記トライ木構築部によって構築された前記トライ木に含まれる前記ルートノードから第１のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列の最長接尾辞が、前記ルートノードから前記第１のノードと異なる第２のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列に一致する場合に、前記第１のノードから前記第２のノードへ向かうフェイリアリンクを追加することを、前記トライ木に含まれる全てのノードを前記第１のノードとして各々行うフェイリアリンク追加部と、
置換対象文字列の先頭から１文字ずつ取り出すと共に、前記トライ木の前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に前記取り出した文字がラベルとして付与された枝が存在せず、現在のノードに前記フェイリアリンクの基端が連結されている場合は、前記フェイリアリンクの先端に連結されたノードへ移動し、移動先のノードに識別情報が付与されている場合は識別情報を記録することを、前記置換対象文字列から全ての文字を取り出す迄繰り返すことで、前記置換対象文字列に含まれる前記置換元文字列を探索する探索部と、
を含む文字列置換装置。
【０１０９】
（付記２）
前記統合部は、複数種の置換テーブルに、同一の前記置換元文字列が異なる前記置換先文字列と対応付けられて登録されていた場合に、複数種の置換テーブルのうち適用順が先の置換テーブルに登録されていた前記置換元文字列と前記置換先文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う付記１記載の文字列置換装置。
【０１１０】
（付記３）
前記統合部は、第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列としての前記第２の文字列と前記置換先文字列としての第３の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列としての前記第３の文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う付記１又は付記２記載の文字列置換装置。
【０１１１】
（付記４）
前記統合部は、第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列に含まれる第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列として前記第２の文字列のうち前記第３の文字列を前記第４の文字列に置き換えた文字列との組、及び、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う付記１〜付記３の何れか１項記載の文字列置換装置。
【０１１２】
（付記５）
前記統合部は、第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列を含む第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列との組、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組、及び、前記置換元文字列として前記第１の文字列に前記第３の文字列のうち前記第２の文字列に含まれない文字列を加えた文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う付記１〜付記４の何れか１項記載の文字列置換装置。
【０１１３】
（付記６）
前記複数種の置換テーブルには、異体字変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、濁音除去変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、漢数字変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、英数字半角化変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、及び、略称正式化変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブルのうち、２つ以上の置換テーブルが含まれる付記１〜付記６の何れか１項記載の文字列置換装置。
【０１１４】
（付記７）
前記探索部によって探索された前記置換対象文字列に含まれる前記置換元文字列を、前記置換元文字列と対応付けられた置換先文字列に置換する置換部を更に備えた付記１〜付記６の何れか１項記載の文字列置換装置。
【０１１５】
（付記８）
前記探索部は、記録した前記識別情報に対応する前記置換元文字列のうち、長さがより長く、前記置換対象文字列上で重複していない前記置換元文字列を、前記置換対象文字列に含まれる前記置換元文字列として選択する付記１〜付記７の何れか１項記載の文字列置換装置。
【０１１６】
（付記９）
前記トライ木構築部は、前記置換先文字列と対応付けられた前記置換元文字列の先頭から１文字ずつ取り出すと共に、前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に、前記取り出した文字がラベルとして付与された枝が存在しない場合は、前記取り出した文字以降の文字がラベルとして付与された枝とノードを新たに作成し、前記置換元文字列の末尾に到達した場合は最後のノードに前記置換元文字列に対応する識別情報を付与することを、前記統合部によって統合された置換テーブルに登録されている全ての前記置換元文字列に対して各々行うことで、前記統合された置換テーブルに登録されている前記置換元文字列を網羅するように前記トライ木を構築する付記１〜付記８の何れか１項記載の文字列置換装置。
【０１１７】
（付記１０）
コンピュータで、
置換元文字列と置換先文字列とが対応付けられて登録された複数種の置換テーブルを単一の置換テーブルに統合し、
複数のノードと、一対の前記ノードの間を連結し１文字のラベルが付与された複数の枝と、を含み、一端が同一のノードに連結された個々の枝に付与された前記ラベルの文字が互いに相違し、ルートノードから何れかのノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列が、置換先文字列と対応付けられた置換元文字列に一致し、かつ前記何れかのノードに前記置換元文字列に対応する識別情報が付与されたトライ木を、前記統合した置換テーブルに登録されている前記置換元文字列を網羅するように構築し、
前記構築した前記トライ木に含まれる前記ルートノードから第１のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列の最長接尾辞が、前記ルートノードから前記第１のノードと異なる第２のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列に一致する場合に、前記第１のノードから前記第２のノードへ向かうフェイリアリンクを追加することを、前記トライ木に含まれる全てのノードを前記第１のノードとして各々行い、
置換対象文字列の先頭から１文字ずつ取り出すと共に、前記トライ木の前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に前記取り出した文字がラベルとして付与された枝が存在せず、現在のノードに前記フェイリアリンクの基端が連結されている場合は、前記フェイリアリンクの先端に連結されたノードへ移動し、移動先のノードに識別情報が付与されている場合は識別情報を記録することを、前記置換対象文字列から全ての文字を取り出す迄繰り返すことで、前記置換対象文字列に含まれる前記置換元文字列を探索する
ことを含む文字列置換方法。
【０１１８】
（付記１１）
前記複数種の置換テーブルに、同一の前記置換元文字列が異なる前記置換先文字列と対応付けられて登録されていた場合に、複数種の置換テーブルのうち適用順が先の置換テーブルに登録されていた前記置換元文字列と前記置換先文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う付記１０記載の文字列置換方法。
【０１１９】
（付記１２）
第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列としての前記第２の文字列と前記置換先文字列としての第３の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列としての前記第３の文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う付記１０又は付記１１記載の文字列置換方法。
【０１２０】
（付記１３）
第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列に含まれる第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列として前記第２の文字列のうち前記第３の文字列を前記第４の文字列に置き換えた文字列との組、及び、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う付記１０〜付記１２の何れか１項記載の文字列置換方法。
【０１２１】
（付記１４）
第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列を含む第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列との組、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組、及び、前記置換元文字列として前記第１の文字列に前記第３の文字列のうち前記第２の文字列に含まれない文字列を加えた文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う付記１０〜付記１３の何れか１項記載の文字列置換方法。
【０１２２】
（付記１５）
前記複数種の置換テーブルには、異体字変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、濁音除去変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、漢数字変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、英数字半角化変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、及び、略称正式化変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブルのうち、２つ以上の置換テーブルが含まれる付記１０〜付記１４の何れか１項記載の文字列置換方法。
【０１２３】
（付記１６）
前記探索した前記置換対象文字列に含まれる前記置換元文字列を、前記置換元文字列と対応付けられた置換先文字列に置換する付記１０〜付記１５の何れか１項記載の文字列置換方法。
【０１２４】
（付記１７）
前記記録した前記識別情報に対応する前記置換元文字列のうち、長さがより長く、前記置換対象文字列上で重複していない前記置換元文字列を、前記置換対象文字列に含まれる前記置換元文字列として選択する付記１０〜付記１６の何れか１項記載の文字列置換方法。
【０１２５】
（付記１８）
前記置換先文字列と対応付けられた前記置換元文字列の先頭から１文字ずつ取り出すと共に、前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に、前記取り出した文字がラベルとして付与された枝が存在しない場合は、前記取り出した文字以降の文字がラベルとして付与された枝とノードを新たに作成し、前記置換元文字列の末尾に到達した場合は最後のノードに前記置換元文字列に対応する識別情報を付与することを、前記統合した置換テーブルに登録されている全ての前記置換元文字列に対して各々行うことで、前記統合した置換テーブルに登録されている前記置換元文字列を網羅するように前記トライ木を構築する付記１０〜付記１７の何れか１項記載の文字列置換方法。
【０１２６】
（付記１９）
コンピュータに、
置換元文字列と置換先文字列とが対応付けられて登録された複数種の置換テーブルを単一の置換テーブルに統合し、
複数のノードと、一対の前記ノードの間を連結し１文字のラベルが付与された複数の枝と、を含み、一端が同一のノードに連結された個々の枝に付与された前記ラベルの文字が互いに相違し、ルートノードから何れかのノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列が、置換先文字列と対応付けられた置換元文字列に一致し、かつ前記何れかのノードに前記置換元文字列に対応する識別情報が付与されたトライ木を、前記統合した置換テーブルに登録されている前記置換元文字列を網羅するように構築し、
前記構築した前記トライ木に含まれる前記ルートノードから第１のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列の最長接尾辞が、前記ルートノードから前記第１のノードと異なる第２のノードに至るルート上の複数の枝に付与された前記ラベルの文字で表される文字列に一致する場合に、前記第１のノードから前記第２のノードへ向かうフェイリアリンクを追加することを、前記トライ木に含まれる全てのノードを前記第１のノードとして各々行い、
置換対象文字列の先頭から１文字ずつ取り出すと共に、前記トライ木の前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に前記取り出した文字がラベルとして付与された枝が存在せず、現在のノードに前記フェイリアリンクの基端が連結されている場合は、前記フェイリアリンクの先端に連結されたノードへ移動し、移動先のノードに識別情報が付与されている場合は識別情報を記録することを、前記置換対象文字列から全ての文字を取り出す迄繰り返すことで、前記置換対象文字列に含まれる前記置換元文字列を探索する
ことを含む処理を行わせるための文字列置換プログラム又は前記文字列置換プログラムを記録した記録媒体。
【０１２７】
（付記２０）
前記複数種の置換テーブルに、同一の前記置換元文字列が異なる前記置換先文字列と対応付けられて登録されていた場合に、複数種の置換テーブルのうち適用順が先の置換テーブルに登録されていた前記置換元文字列と前記置換先文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う付記１９記載の文字列置換方法。
【０１２８】
（付記２１）
第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列としての前記第２の文字列と前記置換先文字列としての第３の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列としての前記第３の文字列との組を前記単一の置換テーブルに登録することにより、前記統合を行う付記１９又は付記２０記載の文字列置換プログラム又は記録媒体。
【０１２９】
（付記２２）
第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列に含まれる第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての前記第１の文字列と前記置換先文字列として前記第２の文字列のうち前記第３の文字列を前記第４の文字列に置き換えた文字列との組、及び、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う付記１９〜付記２１の何れか１項記載の文字列置換プログラム又は記録媒体。
【０１３０】
（付記２３）
第１の置換テーブルに、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列とが対応付けられて登録され、第２の置換テーブルに、前記置換元文字列として前記第２の文字列を含む第３の文字列と前記置換先文字列としての第４の文字列とが対応付けられて登録され、かつ、前記第１の置換テーブルが前記第２の置換テーブルよりも適用順が先の場合に、前記置換元文字列としての第１の文字列と前記置換先文字列としての第２の文字列との組、前記置換元文字列としての第３の文字列と前記置換先文字列としての第４の文字列との組、及び、前記置換元文字列として前記第１の文字列に前記第３の文字列のうち前記第２の文字列に含まれない文字列を加えた文字列と前記置換先文字列としての第４の文字列との組を、前記単一の置換テーブルに登録することにより、前記統合を行う付記１９〜付記２２の何れか１項記載の文字列置換プログラム又は記録媒体。
【０１３１】
（付記２４）
前記複数種の置換テーブルには、異体字変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、濁音除去変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、漢数字変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、英数字半角化変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブル、及び、略称正式化変換が行われるように前記置換元文字列と前記置換先文字列とが対応付けて登録された置換テーブルのうち、２つ以上の置換テーブルが含まれる付記１９〜付記２３の何れか１項記載の文字列置換プログラム又は記録媒体。
【０１３２】
（付記２５）
前記探索した前記置換対象文字列に含まれる前記置換元文字列を、前記置換元文字列と対応付けられた置換先文字列に置換する付記１９〜付記２４の何れか１項記載の文字列置換プログラム又は記録媒体。
【０１３３】
（付記２６）
前記記録した前記識別情報に対応する前記置換元文字列のうち、長さがより長く、前記置換対象文字列上で重複していない前記置換元文字列を、前記置換対象文字列に含まれる前記置換元文字列として選択する付記１９〜付記２５の何れか１項記載の文字列置換プログラム又は記録媒体。
【０１３４】
（付記２７）
前記置換先文字列と対応付けられた前記置換元文字列の先頭から１文字ずつ取り出すと共に、前記ルートノードを初期ノードとし、一端が現在のノードに連結された枝の中に取り出した文字がラベルとして付与された枝が存在する場合は、前記枝の他端に連結されたノードへ移動し、一端が現在のノードに連結された枝の中に、前記取り出した文字がラベルとして付与された枝が存在しない場合は、前記取り出した文字以降の文字がラベルとして付与された枝とノードを新たに作成し、前記置換元文字列の末尾に到達した場合は最後のノードに前記置換元文字列に対応する識別情報を付与することを、前記統合した置換テーブルに登録されている全ての前記置換元文字列に対して各々行うことで、前記統合した置換テーブルに登録されている前記置換元文字列を網羅するように前記トライ木を構築する付記１９〜付記２６の何れか１項記載の文字列置換プログラム又は記録媒体。
【実施例】
【０１３５】
次に、開示の技術のうち、複数種の置換テーブルを単一の統合置換テーブルに統合することにより、処理時間を短縮できることを確認するために、本願発明者が行った解析検討について説明する。
【０１３６】
まず、トライ木の構築に要する処理時間について検討する。トライ木は、置換元文字列１文字当り１回の処理で構築できる。また、各枝にラベル付けする文字の種類は有限の固定値である(文字が英字でも漢字でも同じ)。このため、置換テーブル内の置換パターンの数をｌ、各置換パターンにおける置換元文字列の長さをp1,p2,…,pkとすると、トライ木の構築に要する処理時間Ｔtrieは次の(１)式で与えられる。
Ｔtrie＝Ｏ(p1)＋Ｏ(p2)＋…＋Ｏ(pl)
＝Ｏ(p1＋p2＋…＋pl)
＝Ｏ(ｐ)  …(１)
但し、ｐは置換テーブル内の置換元文字列の長さの総和である。
【０１３７】
また、フェイリアリンクの追加については、各ノードに対して一定時間で算出可能であり、フェイリアリンクの追加に要する処理時間Ｔfailurelinkは、トライ木の構築に要する処理時間Ｔtrieよりも十分に小さいので、次の(２)式が成り立つ。
Ｔtrie＋Ｔfailurelink≒Ｔtrie＝Ｏ(ｐ)  …(２)
【０１３８】
また、文字列探索・置換処理のうち、文字列の探索(マッチング)については、置換対象文字列１文字当り１回の処理で済み、ＩＤが付与されたノードに到達する度にマッチング情報を出力するものである。また、文字列の置換は、最終的に置換対象と判定された置換元文字列の数のみ処理が行われる。このため、置換対象文字列の長さをｎ、置換対象文字列に含まれる置換元文字列の数をｋ、最終的に置換対象と判定された置換元文字列の数をｑとすると、文字列の探索に要する処理時間Ｔmatching、文字列の置換に要する処理時間Ｔreplaceは次の(３)式となる。
Ｔmatching＋Ｔreplace＝Ｏ(ｎ＋ｋ)＋Ｏ(ｑ)＝Ｏ(ｎ＋ｋ＋ｑ)  …(３)
【０１３９】
従って、全体の処理時間は次の(４)式で表される。
Ｔtrie＋Ｔfailurelink＋Ｔmatching＋Ｔreplace
＝Ｏ(ｐ)＋Ｏ(ｎ＋ｋ)＋Ｏ(ｑ)
＝Ｏ(ｐ＋ｎ＋ｋ＋ｑ)  …(４)
【０１４０】
ｍ種類の置換テーブルの統合を行わずに文字列置換を行った場合、各々の置換テーブル内の置換元文字列の長さの総和をＰi、変換対象文字列の長さの総和をＮi、置換対象文字列に含まれる置換元文字列の数をＫiとする。また、最終的に置換対象と判定された置換元文字列の数をＱiとする。但し、ｉは1＜ｉ＜ｍである。すると、ｍ種類の置換テーブルの統合を行わずに文字列置換を行った場合の処理時間Ｔnot-unifiedは次の(５)式で表される。
Ｔnot-unified＝Ｏ(Ｐ1＋Ｎ1＋Ｋ1＋Ｑ1)＋…＋Ｏ(Ｐm＋Ｎm＋Ｋm＋Ｑm)  …(５)
【０１４１】
ここで、全ての置換テーブル内の置換元文字列の長さの総和をＰとする。
Ｐ＝Ｐ1＋Ｐ2＋…＋Ｐm
また、全ての探索処理でマッチした置換元文字列の数をＫとする。
Ｋ＝Ｋ1＋Ｋ2＋…＋Ｋm
また、全ての置換処理で置換した置換元文字列の数をＱとする。
Ｑ＝Ｑ1＋Ｑ2＋…＋Ｑm
変換対象文字列の長さの総和を各処理で同一(＝Ｎ)とみなす。
Ｎ1＋Ｎ2＋…＋Ｎm＝Ｎ
すると、先の(５)式は次の(６)式に書替えられる。
Ｔnot-unified＝Ｏ(Ｐ＋ｍＮ＋Ｋ＋Ｑ)  …(６)
【０１４２】
一方、ｍ種類の置換テーブルの統合を行って文字列置換を行った場合、統合置換テーブル内の置換元文字列の長さの総和をＰ'、変換対象文字列の長さの総和をＮ'、置換対象文字列に含まれる置換元文字列の数をＫ'とする。また、最終的に置換対象と判定された置換元文字列の数をＱ'とする。すると、ｍ種類の置換テーブルの統合を行って文字列置換を行った場合の処理時間Ｔunifiedは次の(７)式で表される。
Ｔunified＝Ｏ(Ｐ'＋Ｎ'＋Ｋ'＋Ｑ')  …(７)
【０１４３】
ここで、(６)式で表される時間Ｔnot-unifiedと(７)式で表される時間Ｔunifiedの比較の前提として、置換テーブルの統合前と統合後で変換対象文字列の長さの総和は同じとみなす(Ｎ＝Ｎ')。
【０１４４】
また、置換テーブルの統合によって置換元文字列の長さの総和が増加したとしても、変換対象文字列の長さの総和が置換元文字列の長さの総和より十分大きければ、処理時間への影響は殆ど無いとみなすことができる(Ｐ≪Ｎ)。元々、名寄せは膨大なデータの中から重複するデータを発見することが目的であり、マスタＤＢ９６内の置換対象文字列の総和は、置換元文字列の長さの総和よりも十分大きいと考えてよい。
【０１４５】
また、変換対象文字列に対して逐次置換が発生することはなく、変換対象文字列の長さの総和は、置換対象文字列に含まれる置換元文字列の数Ｋや、最終的に置換対象と判定された置換元文字列の数Ｑよりも十分大きいと考えてよい(Ｋ≪Ｎ,Ｑ≪Ｎ)。
【０１４６】
以上の前提を踏まえ、ｍ種類の置換テーブルの統合を行わずに文字列置換を行った場合に対する、ｍ種類の置換テーブルの統合を行って文字列置換を行った場合の処理時間の比率を演算すると、次の(８)式が得られる。
【０１４７】
【数１】
2014044498.tif 000004
【０１４８】
上記の(８)式より、上記の処理時間の比率は、１／(置換テーブルの数ｍ)よりも若干大きい程度にまで小さくなる(処理時間が短縮される)との知見が得られた。
【０１４９】
上記知見を確認するために、本願発明者は、置換テーブルの統合を行わずに文字列置換(名寄せ)を行った場合と、置換テーブルの統合を行って文字列置換(名寄せ)を行った場合の処理時間を各々計測して比較する実験を行った。名寄せ対象のマスタＤＢはレコード数が約430,000の企業名リストであり、１６個の置換テーブルを使用した。処理時間の計測結果を次の表２に示す。
【０１５０】
【表２】
2014044498.tif 000005
【０１５１】
表２より明らかなように、置換テーブルの統合を行うことで処理時間が大幅に短縮されることが確認された。表２に示す計測結果における処理時間の比率は、1/11.98程度であり、１／ｍ＝1/16には達していないが、原因としてはストレージのＩ／Ｏ性能の影響を受けたことが考えられる。
【符号の説明】
【０１５２】
１０  名寄せ処理装置
１４  置換テーブル記憶部
１６  置換テーブル統合部
１８  ＤＦＡ置換部
２０  マッチング処理部
２２  マッチング結果統合部
２４  トライ木構築部
２６  フェイリアリンク追加部
２８  置換元文字列探索部
３０  文字列置換部
３２  マスタＤＢ記憶部
３６  コンピュータ・システム
３８  アプリケーションサーバ
４０  端末装置
４２  ＤＢサーバ
４４  コンピュータ・ネットワーク
４６  ＣＰＵ
４８  メモリ
５０  記憶部
５６  名寄せ処理プログラム
９６  マスタＤＢ
１０２  枝
１０４  ノード
１０６  フェイリアリンク
【図１】
2014044498.tif 000006
【図２】
2014044498.tif 000007
【図３】
2014044498.tif 000008
【図４】
2014044498.tif 000009
【図５】
2014044498.tif 000010
【図６】
2014044498.tif 000011
【図７】
2014044498.tif 000012
【図８】
2014044498.tif 000013
【図９】
2014044498.tif 000014
【図１０】
2014044498.tif 000015
【図１１】
2014044498.tif 000016
【図１２】
2014044498.tif 000017
【図１３】
2014044498.tif 000018
【図１４】
2014044498.tif 000019