以下、図面を参照しながら、本発明の実施の形態について説明する。
図1は、本発明の実施の形態に共通する突合処理装置の構成の一例を示すブロック図である。図1に図示されている突合処理装置10は、データベース読み取り部11、突合処理部12を有している。また、突合処理装置10には、複数のデータベースが記憶された記憶媒体20、操作入力部30、表示部40が接続されている。
データベース読み取り部11は、記憶媒体20に記憶されている複数のデータベース(図1のデータベースA及びB)を読み取る機能を有している。突合処理装置10によって読み取られたデータベースは、突合処理部12が処理を行うために、例えば突合処理装置10内の主記憶装置(メインメモリ、図1には不図示)などに一時的に記憶される。
突合処理部12は、データベース読み取り部11によって読み取られた複数のデータベース(図1のデータベースA及びB)内の各レコードの突合処理を行う機能を有しており、レコード比較部13、突合結果生成部14、突合結果出力部15を備えている。
レコード比較部13は、複数のデータベース(図1のデータベースA及びB)のそれぞれの各レコードに含まれる文字列情報を相互に比較して、文字列情報の一致又は不一致を検出する突合処理を行う機能を有している。また、レコード比較部13は分節設定部16を有している。分節設定部16は、所定の分節構造に係る規則に従って各レコードに含まれる文字列情報を分節化し、文字列情報に対して複数の分節を設定する機能を有している。なお、文字列情報の分節化とは、文字列情報を区分けして複数の部分(各部分は少なくとも1文字以上を含む)に分けることであり、本明細書では、区分けされた部分を分節と呼ぶ。文字列情報の分節化によって、文字列情報に対して、例えば後述する図4に示されているように複数の分節が設定される。
突合結果生成部14は、レコード比較部13による比較結果に基づいて、複数のデータベース(図1のデータベースA及びB)のそれぞれの各レコードに関する突合結果を生成する機能を有している。突合結果生成部14は、複数のデータベース(図1のデータベースA及びB)のそれぞれの各レコードの突合結果を、例えば後述する突合コード(突合結果を統合したコード情報)として生成することが可能である。突合結果出力部15は、突合結果生成部14によって生成された突合結果を出力して、データベース内のデータとして記録させたり表示部40に表示させたりする機能を有している。
また、記憶媒体20は、データベースを記憶する機能を有しており、例えば、ハードディスク、光記録媒体、磁気記録媒体、不揮発性メモリなどにより実現可能である。なお、記憶媒体20は、ネットワークなどを介して突合処理装置10がアクセス可能な場所に配置されていてもよい。なお、図1には複数のデータベースとして2つのデータベース(データベースA及びB)が同一の記憶媒体20に記憶されている状態が図示されているが、複数のデータベースはそれぞれ異なる記憶媒体20に記憶されていてもよい。以下では、2つのデータベースにおける突合処理が行われる場合について主に説明するが、3つ以上のデータベースにおける突合処理が行われてもよい。
記憶媒体20に記憶されているデータベースはデータの集合体であり、文字列情報を含む複数のデータを有している。データベースに含まれているデータは、例えば、所定の格納形式(例えば、表形式)に基づいて、レコード単位でデータベースに格納されている。なお、各レコードに含まれる文字列情報は任意の種類の情報であり、例えば市町村、大字、小字、地番、枝番などの階層構造を有する住所情報などが含まれ得る。また、複数のデータベースに含まれるレコード数は同一であってもよく、あるいは異なっていてもよい。
また、操作入力部30は、突合処理装置10におけるユーザ操作を可能とする機能を有しており、例えばマウスやキーボードなどの入力インタフェースにより実現可能である。操作入力部30を用いることで、ユーザは、突合処理装置10に読み取らせるデータベースの指定、突合処理における設定、突合処理の開始指示、表示部40における情報の表示指示などを始めとした様々な設定及び指示を突合処理装置10に入力することが可能である。
また、表示部40は、複数のデータベースのそれぞれに格納されているデータや突合処理部12によって生成された突合結果などを、ユーザが視認可能な情報として提供する機能を有しており、例えばモニタ又はディスプレイなどによって実現可能である。また、操作入力部30及び表示部40は、操作入力機能と表示機能が一体化されたタッチパネルなどによって実現されてもよい。
なお、図1では、突合処理装置10の各機能がブロックによって模式的に図示されているが、これらのブロックで表されている各機能は、例えば、ハードウェア又はCPU(Central Processing Unit:中央処理装置)がソフトウェア(プログラム)を実行することによって実現可能である。突合処理装置10は、例えば汎用PC(Personal Computer:パーソナルコンピュータ)によって実現可能であり、突合処理装置10における各処理は、本発明の実施の形態における各処理(例えば、後述の図2A〜2Cに示すフローチャートに含まれる各処理)の実行命令が記述されたプログラムをCPUが実行することで実現可能である。
また、図1には不図示であるが、汎用PCで実現される突合処理装置10は、データやプログラムなどを一時的に記憶する主記憶装置(メインメモリ)を備えており、例えば、データベース読み込み部11によって読み込まれたデータベース内のデータ、処理中に変更又は生成されたデータ、CPUで実行すべきプログラムなどを主記憶装置に一時的に記憶しながら、本発明の実施の形態における処理を行うことが可能である。
次に、図2A〜2Cを参照しながら、本発明の実施の形態における突合処理について説明する。図2Aは本発明の実施の形態に共通する突合処理の概要を示すフローチャート、図2Bは本発明の実施の形態に共通する突合処理における事前設定処理(図2Aに示すステップS100の事前設定処理)の一例を示すフローチャート、図2Cは本発明の実施の形態に共通する突合処理における突合コード設定処理(図2Aに示すステップS200の突合コード設定処理)の一例を示すフローチャートである。なお、図2A〜2Cに示すフローチャートの各処理は、図1に図示されている突合処理装置10により実行される。以下では、本発明に対する理解が容易となるよう、突合処理を行う対象とする2つのデータベースA及びBの各レコードに、図3に示す文字列情報が含まれている場合を一例に挙げながら説明する
図2Aに示すように、本発明の実施の形態における突合処理は、事前設定処理(ステップS100)と、突合コード設定処理(ステップS200)とに大別される。ステップS100の事前設定処理では、後続の突合コード設定処理において使用されるパラメータなどの設定が行われる。また、ステップS200の突合コード設定処理では、実際に突合処理の対象となる複数のデータベース(例えば、データベースA及びB)内のレコードを比較し、各レコードに対して突合結果を示す情報(例えば、突合コード)を付与する処理が行われる。
事前設定処理では、図2Bに示すように、突合処理装置10は、記憶媒体20に記憶されている2つのデータベースA及びBを読み出し、これらのデータベースA及びBに含まれている各レコードの突合コード欄を初期化するとともに(例えば、初期値として『0』を設定)、各レコードに対して共通の分節構造を設定し、さらに、その分節構造に応じたフィルタを設定する(ステップS101)。なお、設定された分節構造及びフィルタに関する情報は、後続の処理で用いるために突合処理装置10によって保持される。
ステップS101で設定される分節構造は、各レコードに含まれる文字列情報を所定の文字数ごとに分節化した構造であり、文字列情報に対して分節構造を設定することで、文字列情報が複数の分節によって構成されているとみなすことができるようになる。例えば、図4に示すように、データベースA及びBの各レコード(10桁の文字列情報を含む)に対して、上位4桁(左から1桁目〜4桁目)の文字列を含む分節S1、中位3桁(左から5桁目〜7桁目)の文字列を含む分節S2、下位3桁(左から8桁目〜10桁目)の文字列を含む分節S3の3つの分節を設定することが可能である。
なお、ステップS101では、データベースA及びBの各レコードに含まれる文字列情報の長さ(文字数)や、後続の突合コード設定処理において比較する文字列情報の位置などに応じて、任意の分節構造を設定することが可能である。例えば、図4の例では、文字列情報に対して3つの分節を設定するとともに、各分節の長さを左から順に4桁、3桁、3桁となるよう設定しているが、分節の個数及び長さは任意に設定可能である。また、図4の例では、文字列情報全体を包含するように(すなわち、各分節の長さの総和が文字列情報全体の長さと等しくなるように)分節を設定しているが、文字列情報の一部(端部又は途中を除いた一部)のみに対して分節を設定してもよい。また、ステップS101において設定される分節構造として、文字列情報に対してあらかじめ設定されている分節構造を利用してもよい。例えば、文字列情報として住所情報が含まれている場合には、市町村、大字、小字、地番、枝番などの階層を各分節として設定することが可能である。
また、ステップS101において設定されるフィルタは、設定された分節構造に含まれる各分節のうち、後続の突合コード設定処理においてどの分節の組み合わせを比較対象とするかを設定するためのものである。例えば、図4の例のように文字列情報に対して3つの分節が設定された場合、その分節構造に対応するフィルタとして、3つの分節の組み合わせを比較対象とするよう設定することが可能である。
図5Aは、図4の例のように文字列情報に対して3つの分節が設定された場合のフィルタの一例、及び、フィルタに対応して設定されている突合コードの一例を模式的に示す図である。図5Aの縦方向の配列(行)は各フィルタの識別情報(LVL=1〜7)を表し、図5Aの横方向の配列(列)は各フィルタが用いられた場合に比較対象とする分節(S1〜S3)を表している。
図5Aに模式的に示されているフィルタは、後続の突合コード設定処理においてレコードの検索が行われる際(後述する図2CのステップS207の処理)に用いられる。各フィルタ内の『比較』と記載されている分節は、データベースA及びBの各レコードに関して共通の文字列情報が存在するかどうかの判断が行われることを表す。一方、ハッチングが施された分節は、共通の文字列情報に関する判断が行われないことを表す。具体的には、例えばLVL=1のフィルタは、すべての分節S1〜S3において『比較』と記載されている。したがって、LVL=1のフィルタを用いた場合には、すべての分節S1〜S3(この例では10桁の文字列情報全体)において共通の文字列情報が存在するかどうかの判断が行われる。また、例えばLVL=2のフィルタは、分節S3にはハッチングが施されており、分節S1及びS2において『比較』と記載されている。したがって、LVL=2のフィルタを用いた場合には、分節S1及びS2の両方において共通の文字列情報が存在するかどうかの判断が行われる一方、分節S3については判断が行われない。
また、図5Aには、各フィルタを用いて共通の文字列情報を検出した場合に、レコードに設定される突合コードが示されている。この突合コードは分節の個数に等しい桁数を有しており、突合コードの各桁と各分節の位置とが対応している。例えば、図5Aに示す例では、文字列情報は3つの分節に区切られており、各分節に対応して突合コードも3桁に設定されている。
突合コードは、各フィルタに固有のコードである。突合コードの各桁は分節S1〜S3のそれぞれに対応しており、共通の文字列情報が存在するかどうかの判断が行われる分節(図5Aの『比較』と記載されている分節)に対応する桁には、値『1』が設定されている。また、共通の文字列情報が存在するかどうかの判断が行われない分節(図5Aのハッチングが施された分節)に対応する桁には、『_』(アンダーバー)が設定されている。
また、突合コードは、対応するフィルタを用いて共通の文字列情報が存在するかどうかの判断が行われた結果、フィルタに設定されているすべての分節で共通の文字列情報を持つレコードがデータベースA及びBの両方に存在している場合、これらのレコードに対して設定される。例えば突合コード『111』が設定されたレコードは、分節S1〜S3のすべてで共通の文字列情報を持つレコードがデータベースA及びBの両方に存在していると判断されたものであることを表している。また、例えば突合コード『_11』が設定されたレコードは、分節S2及びS3で共通の文字列情報を持つレコードがデータベースA及びBの両方に存在していると判断されたものであることを表している。したがって、あるレコードに設定されている突合コードを参照すれば、そのレコードが、データベースA及びBの両方に共通のレコードであって、当該共通のレコードがどの分節で共通の文字列情報を持っているかを把握することが可能となる。
また、図5B及び図5Cは、文字列情報に対して4つの分節及び5つの分節がそれぞれ設定された場合のフィルタの一例、及び、一致した場合に設定される突合コードの一例を模式的に示す図である。フィルタの個数(すなわち、LVLの数に相当)は、分節構造の分節の個数をNとした場合、最大2N−1個(N=3の場合は最大7個、N=4の場合は最大15個、N=5の場合は最大31個)となる。ただし、必ずしもすべてのフィルタを用いる必要はない。また、後述する突合コード設定処理では、最初にLVL=1のフィルタを使用し、続いてLVLの値をインクリメントしながら、LVL=2のフィルタ、LVL=3のフィルタ、・・・を順次使用する。どのような分節の組み合わせを有するフィルタをどのLVLに設定するかは任意に変更可能であるが、比較対象とする分節の個数がより多いフィルタ(すなわち、図5A〜図5Cにおいて『比較』と記載された箇所がより多いフィルタ)を用いた突合コード設定処理が優先的に実行されるようにすることが望ましい。
なお、上述した図5A〜図5Cは、本発明に係るフィルタのセットの概念を説明するために模式的に示されたものであり、当業者であれば、このようなフィルタのセットを実体的なデータとして準備する必要はなく、文字列情報に含まれる適切な分節を比較対象としたり、比較対象から除外したりするなどの処理を適宜実行することによって実現可能であることは明らかである。
さらに事前準備処理において、突合処理装置10は、後続の突合コード設定処理において最初に用いるフィルタ(初期フィルタ)を変数LVLとして設定する(ステップS103)。ステップS103では任意のフィルタの設定が可能であるが、例えば、図5Aのフィルタのセットにおいて比較対象とする分節の個数が最も多いLVL=1のフィルタを初期フィルタとして設定することが望ましい。また、初期フィルタの設定と共に、突合コード設定処理において用いるフィルタや、最後の処理に用いる最終フィルタなどをユーザが設定できるようにしてもよい。なお、ユーザが明示的に最終フィルタを設定せず、自動的に、すべてのフィルタを用いた処理(すなわち、すべての分節の組み合わせを比較する処理)が行われるように設定されてもよい。
上述の事前設定処理においてパラメータなどの設定が完了した後、突合コード設定処理では、図2Cに示すように、突合処理装置10は、データベースA及びBのそれぞれにおいて、現在設定されているフィルタ(ここでは初期フィルタ)によって規定されている分節内の各レコードの文字列情報を参照して、同一の文字列情報を含むレコード数を算出し、そのレコード数の最大値を抽出する(ステップS201)。例えば、初期フィルタとして図5AのLVL=1のフィルタ(分節S1〜S3を含むフィルタ)が設定されている場合、図4に示すデータベースAの例では、分節S1〜S3において同一の文字列情報を含むレコードはレコードNo.5、6のレコード(同一のレコード数=2)であり、すなわち、レコード数の最大値は2となる。また同様に、図4に示すデータベースBの例では、分節S1〜S3において同一の文字列情報を含むレコードはレコードNo.4〜6のレコード(同一のレコード数=3)であり、レコード数の最大値は3となる。データベースAのレコード数の最大値は値vAMAXに設定され、データベースBのレコード数の最大値は値vBMAXに設定される。これらの値vAMAX及びvBMAXは、後述するループ処理のループ回数として利用される。なお、後述するループ処理においては、そのループ回数をそれぞれのデータベースA及びBのレコードの総数とした場合であっても適切に処理が行われるが、事前に、レコード数の最大値である値vAMAX及びvBMAXをループ回数として設定することで、ループ処理に要する処理時間を低減させることが可能となる。
以上のように、初期フィルタ及び最終フィルタ、データベースA及びBのそれぞれのレコード数の最大値(ループ回数の値vAMAX及びvBMAX)の設定が完了すると、突合処理装置10は、データベースA及びBの各レコードの突合処理を行うことが可能となる。突合処理装置10は、例えば、まずデータベースA内の同一レコード数(変数A1)を1に設定するとともに(ステップS203)、データベースB内の同一レコード数(変数B1)を1に設定して(ステップS205)、これらの条件に合ったレコードをデータベースA及びBのそれぞれから抽出し、共通するレコード(すなわち、同一の文字列情報によって構成されているレコード)を検索する(ステップS207)。なお、ステップS207において、共通の文字列情報を持つ共通のレコードが検出されなかった場合には、突合コードを設定すべきレコードは存在しないと判断し(ステップS209)、ステップS211及びS213の処理は実行されない。
図4に示すデータベースA及びBの例を参照すると、データベースA内に含まれている同一レコード数が1のレコードはレコードNo.1〜4、7、8のレコードであり、データベースB内に含まれている同一レコード数が1のレコードはレコードNo.1〜3、7、8のレコードである。これらのレコードを比較することで、突合処理装置10は、データベースA内のレコードNo.2のレコードとデータベースB内のレコードNo.2のレコードとが、分節S1〜S3において共通の文字列情報『1235792384』を持つ共通のレコードであることを検出する。
そして、突合処理装置10は、データベースA及びBで共通するこれらのレコードに対し、現在設定されているフィルタ(ここでは初期フィルタ)に対応する突合コードを設定する(ステップS211)。突合コードは、例えば図5Aに示す突合コードのように、比較対象とした分節の位置(すなわち、共通の文字列情報が検出された分節の位置)を示す突合コードを用いることが望ましいが、他の様々な方法によって表現することが可能である。このようにして得られた突合コードは、対応するレコードの突合コード欄に書き込まれ(ステップS213)、その結果、例えば図5Aに示す突合コードを用いた場合、データベースA内のレコードNo.2のレコードとデータベースB内のレコードNo.2のレコードに対しては、突合コード『111』が設定される。
突合処理装置10は、変数A1=1、変数B1=1の検索を終了すると、続いて変数B1が値vBMAXに等しいか否かを判断し(ステップS215)、変数B1が値vBMAXに達していない場合には、変数B1を1だけ増加(インクリメント)して(ステップS217)、ステップS207以降の処理を再び行う。また、ステップS215で変数B1が値vBMAXに達したと判断した場合には、変数A1が値vAMAXに等しいか否かを判断し(ステップS219)、変数A1が値vAMAXに達していない場合には、変数A1をインクリメントして(ステップS221)、ステップS205以降の処理を再び行う。このように、ステップS203〜S221の処理により、設定されているフィルタ(ここでは、初期フィルタとして設定されているLVL=1のフィルタ)に対して、1からvAMAXまでの範囲にある変数A1と、1からvBMAXまでの範囲に存在する変数B1との各組み合わせにおいて、データベースAとデータベースBとの間に共通するレコードが存在するか否かが検索され、共通するレコードに対しては、そのレコードの突合コード欄に突合コードが設定される。
この一連の処理によって、図4のデータベースA及びBの例では、データベースA内のレコードNo.2のレコードとデータベースB内のレコードNo.2のレコードにおける突合コードの設定に加え、データベースA内のレコードNo.5、6のレコードとデータベースB内のレコードNo.4〜6のレコードに対して突合コード『111』が設定される(変数A1=2、変数B1=3の条件で得られる)。この結果、例えばデータベースA及びBは、図6に示す状態となる。
変数A1がvAMAXに達し変数B1がvBMAXに達して、すべての同一レコード数についての処理が終了すると、突合処理装置10は、フィルタの識別情報(変数LVL)が最終フィルタに等しいか否かを判断し(ステップS223)、変数LVLが最終フィルタに達していない場合には、フィルタを変更(例えば、変数LVLをインクリメント)して(ステップS225)、ステップS201以降の処理を再び行う。例えば、LVL=1をインクリメントしてLVL=2とした場合、図5Aに示すフィルタのセットの例では、突合コード『11_』に対応するLVL=2のフィルタを用いて、ステップS201以降の処理が再び行われることになる。
変数LVLをインクリメントしてレベル2(変数LVL=2)とした場合に実行されるステップS201以降の処理、さらに変数LVLを上げた状態で実行されるステップS201以降の処理では、既に突合コード欄に突合コードが設定されているレコードについては、ステップS207における検索処理において検索対象から除外する。すなわち、処理の過程でレコードに突合コードがいったん設定された場合、そのレコードの突合コードは変更されないよう制御される。
このようにフィルタを変更しながら突合コードの設定を行うことで、LVL=1のフィルタを用いて得られた突合コードが設定された状態(図6のデータベースA及びBに示す状態)から、さらにLVL=2のフィルタを用いた際に、データベースA内のレコードNo.7のレコードとデータベースB内のレコードNo.7、8のレコードに対して突合コード『11_』が設定され(変数LVL=2、変数A1=1、変数B1=2の条件で得られる)、LVL=3のフィルタを用いた際に、データベースA内のレコードNo.4のレコードとデータベースB内のレコードNo.3のレコードに対して突合コード『1_1』が設定され(変数LVL=3、変数A1=1、変数B1=1の条件で得られる)、LVL=5のフィルタを用いた際に、データベースA内のレコードNo.1のレコードとデータベースB内のレコードNo.1のレコードに対して突合コード『1__』が設定され(変数LVL=5、変数A1=1、変数B1=1の条件で得られる)、LVL=6のフィルタを用いた際に、データベースA内のレコードNo.3のレコードとデータベースB内のレコードNo.9のレコードに対して突合コード『_1_』が設定される(変数LVL=6、変数A1=1、変数B1=1の条件で得られる)。この結果、例えばデータベースA及びBは、図7に示す状態となる。
そして、初期フィルタ(例えば図5AのLVL=1のフィルタ)から最終フィルタ(例えば図5Aのレベル7のフィルタ)までの突合処理が終了すると、突合処理装置10は、突合コード欄が初期値『0』のまま残っているレコードについて、どのレベルにおいても一致する文字列情報が検索されなかったことを示す突合コード(完全不一致コードと呼ぶ)を設定する(ステップS227)。完全不一致コードは、例えば『999』などのようにすることが可能であるが、その他の任意の文字列又は記号としてもよく、あるいは初期値『0』をそのまま残しておいてもよい(この場合、完全不一致コードは『0』)。この結果、例えばデータベースA及びBは図8に示す状態となり、これによって突合処理は完了する。
なお、データベースA及びBの各レコードへの突合コードは、最初に読み出された元のデータベースA及びB内に設定されてもよく、あるいは、元のデータベースA及びBを複製した新たなデータベース内に設定されてもよい。さらに、元のデータベースA及びBを複製して新たなデータベースを作成する場合、これらのデータベースA及びBの内容を統合した1つの統合データベースを作成し、その中の各レコードに突合コードが設定されてもよい。
図8に示すようにデータベースA及びBの各レコードに設定された突合コードは、データベースA及びB内のそれぞれに含まれる文字列情報に関して、どの分節において共通する文字列情報が存在しているのか(突合コードの値『1』の位置)を表しており、突合コードから一致/不一致の状況を容易に読み取ることができるようになっている。
また、さらに突合コードを拡張して、データベースA内に共通の文字列情報を有するレコード数が何個存在しており、データベースB内に共通の文字列情報を有するレコード数が何個存在しているのかを把握できるようにしてもよい。例えば、上述の例において、データベースA内の2個のレコードNo.5、6と、データベースB内の3個のレコードNo.4〜6は、突合コード『111』で表されているように分節S1〜S3において共通の文字列情報を有している。この突合コード『111』に対して、データベースA及びB内のそれぞれにおける個数が分かるように付加し(例えば、データベースAのレコード数、データベース内のレコード数の順に並べる)、突合コードを『111:23』などのように表してもよい。また、このように拡張された突合コードによって、ユーザは、データベースA及びB内の共通する文字列情報を持つレコード数を容易に把握できるようになる。
また、データベース内に共通の文字列情報を有する複数のレコード(2個以上のレコード)が存在している場合、上述のようにレコード数を示すのではなく、単に複数存在していることを示すだけでもよい。例えば、データベース内に共通の文字列情報を有するレコード数が1個のみ存在しているレコードについては値『1』で表し、レコード数が2個以上存在しているレコードについては、たとえ3個以上のレコードが存在する場合であっても値『2』で表すようにしてもよい。これによって、2つのデータベースに存在するレコード数の関係が1対1の場合には『11』、1対多の場合には『12』又は『21』、多対多の場合には『22』などのように表すことが可能となる。2つのデータベースに存在するレコード数の関係が1対1、1対多、多対多のいずれであるかを把握できるようにするだけでも十分に有用である。
例えば、上述の例における突合コード『111:23』は、『111:22』(末尾の『22』は、データベースA内に2個以上のレコード、データベースB内に2個以上のレコードが存在していることを示す)と表される。上記のように、データベース内に共通の文字列情報を有するレコード数が2個以上存在しているレコードについて、値『2』で表す突合コードを設定した一例を図9に示す。なお、図9では、桁数を合わせるために完全不一致コードは『999:99』と設定されている。
また、突合処理装置10は、各レコードに突合データが設定されたデータベースA及びBの中から、特定の突合コードが設定されているレコードのみを抽出して、そのレコードのみを表示画面上に表示したり、そのレコードのみを含むデータベースを新たに作成及び保存したりしてもよい。例えば図9に示すように単数又は複数のレコード数の識別情報が付加された突合コードが設定されたデータベースA及びBの例において、突合処理装置10がユーザ入力や他の装置又はプログラムから特定の突合コード『11_』の出力指示を受けた場合には、図10に示すように、データベースA内のレコードNo.7のレコードとデータベースB内のレコードNo.7、8のレコードとを抽出し、それぞれのレコードが存在するデータベースの識別子を付与した状態で表示してもよい。異なるデータベースA及びBにおいて同一の突合コードが設定されたレコードは相互に関連している可能性が高く、このように1つの表示画面にまとめて表示することで、ユーザがレコードの一致/不一致の状況を容易に把握できるようになり、不一致となったレコードの修正を行う際の作業効率を向上させることが可能となる。
なお、図2A〜2Cに示すフローチャートを拡張することで、3つ以上のデータベースにおける突合処理を行う場合にも対応可能であることは明らかである。例えばデータベースA及びBに加えて、さらにデータベースCを含む3つのデータベースにおける突合処理を行う場合には、ステップS201においてデータベースCのレコードの最大値vCMAXを抽出し、データベースC内のレコード数の変数C1を1からvCMAXまでインクリメントしながら、ステップS207においてデータベースA、B及びCで共通するレコードを検索できるようなループ処理を実行することによって、各データベース内のレコード同士の組み合わせを漏れなく比較できるようにすることが望ましい。なお、3つ以上のデータベースにおける突合処理を行った場合も上記の突合コードをそのまま使用することができる。また、レコード数を示す情報を突合コードに付加する場合には、データベース数に応じて桁数を増やせばよく、例えば、突合コード『111:121』(末尾の3桁は3つのデータベースのそれぞれに存在するレコード数に対応)などのようにすればよい。
<実施例>
本発明に係る突合処理装置10は、2つのデータベース間の差異を発見することができる。こうした差異は、例えば、本来は同一の情報を持つべき2つのデータベースの一方に含まれているタイプミスやOCR(Optical Character Recognition:光学文字認識)による読み取りのミスや、データベース管理者やデータ更新時期の違いによって生じたものである。
また、本発明に係る突合処理装置10が処理対象とするデータベースの各レコードに含まれている文字列情報は、例えば、数字のみによって構成されていてもよく、あるいは、漢字、仮名、アルファベット、記号などによって構成されていてもよい。さらに、本発明では、文字列情報に対して分節構造を設定することを前提としているが、この分節構造の設定においては、住所情報などのように元から階層的に設定されている階層構造を利用してもよく、あるいは、突合処理装置10のユーザが独自の方法で文字列情報を分節化してもよい。
また、本発明に係る突合処理装置10が処理対象とするデータベースの種類は特に限定されるものではない。例えば、住所情報を含むデータベース、ネットワークアドレス情報やドメイン情報を含むデータベース、マイナンバーなどの個人情報を含むデータベース、顧客管理情報を含むデータベース、財務会計情報を含むデータベース、商品の在庫情報を含むデータベースなどを始めとした様々な種類のデータベースを処理対象とすることが可能である。
以下では、住所情報を含む台帳データベースと、地図などを表す画像情報に関連付けられて同じく住所情報を含む地図データベースを用意し、本発明の実施の形態における突合処理装置10によって実際に突合処理を行った実施例について説明する。
この実施例において用意された台帳データベース及び地図データベースには、同一地域の住所情報が同一の格納形式で格納されている。ただし、それぞれのデータベースの管理者及び更新時期などが異なっており、相互のデータベースにおける各レコードは完全には一致していない。また、それぞれのデータベースにおいてレコードの追加や削除が行われた結果、レコード数が異なっていることも考えられる。
各レコードには、階層構造を有する住所情報が文字列情報として格納されている。なお、文字列情報は23桁の数字の配列であり、最初の3桁は市町村、次の8桁は大字、次の4桁は小字、次の5桁は地番、最後の3桁は枝番にそれぞれ対応している。例えば、文字列情報『32200000004005800084005』は、最初の『322』が市町村、次の『00000004』が大字、次の『0058』が小字、次の『00084』が地番、最後の『005』が枝番を表している。本実施例における突合処理では、この住所情報が持つ階層構造に基づいて、市町村、大字、小字、地番、枝番の5つの分節を設定し、図5Cに模式的に示されているフィルタのセットを用いている。
本発明の実施の形態における突合処理装置10により、上記の条件下で実際に突合処理を行った結果を図11〜図13に示す。図11〜図13には、ユーザによって指定された突合コードが設定されているレコードのみを台帳データベース及び地図データベースのそれぞれから抽出し、表形式で表示画面上に表示した状態が示されている。これらの表示状態は、上述した図10の表示状態に相当するものである。
図11〜図13のフィールド『種別』の値『1』は台帳データベース内のレコードであることを表し、値『2』は地図データベース内のレコードであることを表している。また、図11〜図13のフィールド『市町村』、『大字』、『小字』、『地番』、『枝番』は各レコードの文字列情報に設定された各分節(住所情報の各階層)を含み、フィールド『CODE』は突合コードを含んでいる。なお、文字列情報である住所情報は5つの分節が設定されており、突合コードも各分節に対応した5桁の数字(さらに、台帳データベースのレコード数と地図データベースのレコード数も付加されている)を含んでいる。
図11には、突合コード『11_11』が設定されているレコードを抽出して表示画面上に表示した状態が図示されている。例えば、図11のテーブルの1番目及び2番目のレコードは、それぞれ台帳データベース及び地図データベース内のレコードであり、これらのレコードは対応関係を有している。図11のテーブルの1番目及び2番目のレコードは、突合コード『11_11』が示すとおり、「市町村」、「大字」、「地番」、「枝番」に共通した文字列情報が含まれている一方、「小字」は異なっている。また、突合コードの末尾に付加された『11』が示すとおり、図11のテーブルの1番目及び2番目のレコードは、台帳データベース及び地図データベースにおいて1対1に対応している。
また、図12には、突合コード『11_1_』が設定されているレコードを抽出して表示画面上に表示した状態が図示されている。例えば、図12のテーブルの1番目及び2番目のレコードは、それぞれ地図データベース及び台帳データベース内のレコードであり、これらのレコードは対応関係を有している。図12のテーブルの1番目及び2番目のレコードは、突合コード『11_1_』が示すとおり、「市町村」、「大字」、「地番」に共通した文字列情報が含まれている一方、「小字」、「枝番」は異なっている。また、突合コードの末尾に付加された『11』が示すとおり、図11のテーブルの1番目及び2番目のレコードは、台帳データベース及び地図データベースにおいて1対1に対応している。
また、図13には、突合コード『111_1』が設定されているレコードを抽出して表示画面上に表示した状態が図示されている。例えば、図13のテーブルの1番目及び3番目のレコードは、それぞれ地図データベース及び台帳データベース内のレコードであり、これらのレコードは対応関係を有している。図13のテーブルの1番目及び3番目のレコードは、突合コード『111_1』が示すとおり、「市町村」、「大字」、「小字」、「枝番」に共通した文字列情報が含まれている一方、「地番」は異なっている。また、突合コードの末尾に付加された『11』が示すとおり、図13のテーブルの1番目及び3番目のレコードは、台帳データベース及び地図データベースにおいて1対1に対応している。
なお、地図データベース内の住所情報が地図を表示するための画像情報と関連付けられていることを利用して、地図データベース内に格納されている情報に基づいて作成及び表示された地図を参照することで、本発明に係る突合結果の確認及び修正を行ってもよい。
例えば、図11のテーブルの3番目及び4番目のレコードは、それぞれ地図データベース及び台帳データベース内のレコードであり、これらのレコードは対応関係を有している。具体的には、図11のテーブルの3番目及び4番目のレコードは突合コード『11_11:11』が示すとおり、1対1に対応するレコードであり、「市町村」、「大字」、「地番」、「枝番」に共通した文字列情報が含まれている一方、「小字」のみ異なっている。より詳細には、図11のテーブルの3番目のレコード(地図データベース内のレコード)は「小字」の値が『0170』であるのに対し、4番目のレコード(台帳データベース内のレコード)は「小字」の値が『0172』である点でのみ異なっている。上記の突合結果から、図11のテーブルの3番目及び4番目のレコードのどちらか一方において、「小字」の値に誤りがあることが推測できるが、『0170』及び『0172』のどちらの値が誤っているかを特定することは容易ではない。
このような場合、地図データベース内の情報を用いて、突合結果の確認対象となる位置を含む地図を表示部40の表示画面に表示することで、この地図を参照したユーザは、台帳データベース又は地図データベースのどちらのレコードの値が誤っているかを容易に推測することが可能となる。
図14には、地図データベース内に格納されている情報に基づいて、図11のテーブルの3番目のレコード(地図データベース内のレコード)に係る住所周辺の地図を表示画面上に表示した状態が図示されている。地図データベース内の各レコード(住所情報を含む)は、地図上の特定の住所を含む区画を表しており、図14では、各区画を示す画像と共に、対応する住所(文字列)が表示されている。例えば、図11のテーブルの3番目のレコードは、図14の地図内の区画Aに対応しており、当該3番目のレコードに含まれる住所を表す文字列『0172 00032−000』がこの区画A上に重畳表示されている。
また、図14の地図では、「小字」の値が『0170』の区画と『0172』の区画の双方が表示されており、『0170』の区画が視覚的に強調されるよう着色表示されている。なお、図14の例では、『0170』の区画にハッチングが施されているが、このハッチングが特定色の着色を表している。なお、『0172』の区画についても同様に、着色表示が行われてもよい(ただし、『0170』の区画とは異なる色であることが望ましい)。
この地図を参照したユーザは、その周辺の区画との着色の違いから、「小字」が『0172』の領域内に、「小字」が『0170』に設定された区画Aが孤立しており、飛び地の状態になっていることを視覚的に把握することができる。その結果、ユーザは、区画Aに設定されている「小字」の値『0170』(地図データベース内のレコードの値)は誤りであり、突合処理で得られた1対1に対応する台帳データベース内のレコードに含まれる「小字」の値『0172』が正しい値である可能性が高いと推測でき、図11のテーブルの3番目のレコードの「小字」の値を『0170』から『0172』に変更すべきであると判断することができる。
なお、ここでは、突合処理の結果を参照して地図データベースと台帳データベースとの間で不整合が生じているレコードを得た後に、地図データベース内の情報に基づいて表示される地図を用いて当該不整合の確認を行う態様を示したが、異なる態様として、地図データベース内の情報に基づいて表示される地図を参照して視覚的に違和感を覚える区画(例えば、飛び地など)を特定した後に、突合処理の結果を参照して、当該区画に対応する台帳データベースのレコードの確認を行うようにしてもよい。また、地図データベース内の情報に基づいて表示される地図上に、突合処理によって得られた情報(例えば、突合コードや、1対1に対応する台帳データベースのレコードに含まれる文字列情報など)を重ね合わせて表示してもよい。
また、図11〜図13に示すテーブルには、突合処理によって得られた突合結果を表示する際に、ユーザによるレコードの比較を容易とする特徴が含まれている。以下、突合処理を行った結果を表示するテーブルにおいて、ユーザの視認性及び利便性を向上させるための特徴について説明する。
図11〜図13のテーブルは、例えば『市町村』、『大字』、『小字』フィールドなどを基準としたソート表示を行うという特徴を有している。この特徴により、共通の文字列情報を持つレコードが隣接した行に表示され、共通の文字列情報を持つレコード同士を比較する際におけるユーザの視認性を向上させることが可能となる。なお、異なるデータベース内のレコードが隣接した行に表示されるため、テーブル全体では、台帳データベース内のレコード(『種別』=『1』)と、地図データベース内のレコード(『種別』=『2』)が入れ子になって表示されるという特徴がある。
また、図11〜図13のテーブルは、比較した2つのデータベース(台帳データベース及び地図データベース)のそれぞれのレコード内の文字列情報を異なるフィールドに表示するという特徴を有する。具体的には、各レコードの地番及び枝番が、そのレコードが台帳データベース内のレコードである場合には、台帳データベースの『地番』及び『枝番』フィールドに表示され、地図データベース内のレコードである場合には、地図データベースの『地番』及び『枝番』フィールドに表示されるようにする。このように、台帳データベースのレコードに含まれる文字列情報を表示するフィールドと、地図データベースのレコードに含まれる文字列情報を表示するフィールドとをそれぞれ分けることによって、ユーザは、各レコードが台帳データベース及び地図データベースのどちらに含まれているものであるかを即座に判断できるようになる。
また、本発明に係る突合処理の結果として、データベースAとデータベースBとにおいて完全に一致し、かつ、1対1に対応しているレコード(すなわち、上述の例において、突合コード『111:11』や『11111:11』が設定されるレコード)が得られた場合であっても、その突合結果が必ずしも正しいと言えないこともある。そこで、このように1対1に対応していると判断されたレコードに関して、さらに、この突合結果が正しいかどうかを定量的に検証できるようにしてもよい。
1対1に対応していると判断されたレコードに関する突合結果を確認する場合、例えば、比較した2つのデータベース(台帳データベース及び地図データベース)のそれぞれのレコード内に含まれている共通の項目を利用することが可能である。以下、図15及び図16を参照しながら説明する。
図15には、突合コード『11111:11』が設定されている6個のレコード((以下、上から順に第1〜第6レコードと呼ぶ))を抽出して表示画面上に表示した状態が図示されている。ただし、図15のテーブルには、各レコードに含まれている『面積』フィールドが設定されている。この『面積』フィールドは、台帳データベース及び地図データベース内のそれぞれのレコードに設定されており、『面積』フィールドには、各レコードに格納された住所情報に関連する土地の面積(地図面積)が格納されている。台帳データベース及び地図データベースにおいて1対1に対応しているレコードであるならば、共通の項目である『面積』フィールドの数値(土地面積)も等しいはずである。この関係を利用して、台帳データベース及び地図データベースにおいて1対1に対応していると判断されたレコードについて、さらに『面積』フィールド内の数値を比較し、両者が一致している場合には1対1の突合結果は正しいと判断することによって、突合結果の検証を行うことが可能である。
なお、共通の項目に含まれる情報が等しいか否かを判断する際、例えば数値の差が所定の範囲(例えば、数パーセント)内に収まる場合には、共通の項目に含まれる情報は実質的に等しい(すなわち、1対1の突合結果は正しい)と判断してもよい。この所定の範囲は、ユーザが自由に設定することが可能である。
図15に図示されている第1〜第6レコードのうち、第1及び第2レコードは『市町村』、『大字』、『小字』、『地番』、『枝番』のすべてにおいて共通の文字列情報『20600021000000356001』を含み、第3及び第4レコードは『市町村』、『大字』、『小字』、『地番』、『枝番』のすべてにおいて共通の文字列情報『20600021000000356002』を含み、第5及び第6レコードは『市町村』、『大字』、『小字』、『地番』、『枝番』のすべてにおいて共通の文字列情報『20600021000000356003』を含む。また、第1、第3及び第6レコードは台帳データベース内のレコードであり、第2、第4及び第5レコードは地図データベース内のレコードである。また、図15のテーブルでは、『市町村』、『大字』、『小字』、『地番』、『枝番』のすべてにおいて共通の文字列情報を持つレコードが隣接した行に表示されている。
上述のように、図15のテーブルには、各レコードの『面積』フィールドが表示されている。例えば、第1及び第2レコードは突合処理において1対1に対応していると判断されたレコードであるが、第1レコードの『面積』フィールド及び第2レコードの『面積』フィールドの数値は共に『946』で等しいことから、第1及び第2レコードが1対1に対応しているという突合結果は正しいと判断することができる。また、第3レコードの『面積』フィールドの数値は『1470』、第4レコードの「面積」フィールドの数値は『1452』であり、両方の数値はほぼ等しいことから、第3及び第4レコードが1対1に対応しているという突合結果は正しいと判断することができる。また、第5レコードの『面積』フィールドの数値は『1603』、第6レコードの『面積』フィールドの数値は『810』であり、両方の数値は大きく異なることから、第5及び第6レコードが1対1に対応しているという突合結果は誤りであると判断することができる。
なお、上記では、例えば第3レコードの『面積』フィールドの数値『1470』と、第4レコードの「面積」フィールドの数値『1452』とがほぼ等しいと判断しているが、この判断は、ユーザが自由に設定可能な判断基準に依存する。例えば、両方の数値の差(ここでは『18』)がどちらか一方の数値又は両方の数値の平均値の5パーセント以内であれば、両方の数値は実質的に等しいと判断する場合には、第3及び第4レコードが1対1に対応しているという突合結果は正しいと判断される。一方、例えば、両方の数値の差(ここでは『18』)がどちらか一方の数値又は両方の数値の平均値の1パーセント以内であれば、両方の数値は実質的に等しいと判断する場合には、第3及び第4レコードが1対1に対応しているという突合結果は誤りであると判断される。
なお、1対1に対応していると判断されたレコードに対して上記の検証を行い、その検証結果を各レコードに設定してもよい。例えば、1対1に対応しているという突合結果が誤りであると判断されたレコードにフラグを設定したり、テーブルで表示する際にレコードの色を変えて強調表示したりすることが可能である。
また、図16に示すように、『面積』フィールドの数値をプロットした散布図を作成し、突合結果が正しいかどうかをユーザが視覚的に判別できるようにしてもよい。図16には、1対1に対応していると判断された2つのレコードの『面積』フィールドの数値をX座標(横軸)及びY座標(縦軸)とした点が多数プロットされている。1対1に対応していると判断された2つのレコードの『面積』フィールドの数値がほぼ等しい場合には、プロットされた点は、Y=Xの直線上又はこの直線に近い位置に配置される。したがって、Y=Xの直線から大きく離れた位置にプロットされた点は、誤った突合結果を表しているとみなすことができる。
なお、図16に示すような散布図において、例えば、ユーザが設定した判断基準を示す直線を表示してもよく、当該判断基準を超えて突合結果が誤りであると判断される点の色を変えて強調表示してもよい。
なお、上述の例では、台帳データベース内のレコードと地図データベース内のレコードに共通の項目として『面積』フィールドを利用する場合について説明したが、比較する複数のデータベース内のレコードに設定されている共通の項目であれば、その他の項目を用いてもよい。台帳データベース及び地図データベースの例では、土地の面積のほかに、例えば、その土地で栽培されている作物、その土地の用途を表す地目、その土地の周囲長、などを始めとして、様々な項目を利用することが可能である。また、ここでは台帳データベース及び地図データベースの例を挙げて説明しているが、他の任意の種類のデータデータベースにおいても同様に、比較するデータベース内のレコードに設定されている共通の項目を適宜選択することが可能である。