JP4834054B2 - 情報処理装置、情報処理方法及びプログラム - Google Patents

情報処理装置、情報処理方法及びプログラム Download PDF

Info

Publication number
JP4834054B2
JP4834054B2 JP2008296002A JP2008296002A JP4834054B2 JP 4834054 B2 JP4834054 B2 JP 4834054B2 JP 2008296002 A JP2008296002 A JP 2008296002A JP 2008296002 A JP2008296002 A JP 2008296002A JP 4834054 B2 JP4834054 B2 JP 4834054B2
Authority
JP
Japan
Prior art keywords
record
link
thread
rule
identity
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2008296002A
Other languages
English (en)
Other versions
JP2010122908A (ja
Inventor
康夫 内田
雄 坂口
宏之 下澤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NS Solutions Corp
Original Assignee
NS Solutions Corp
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 NS Solutions Corp filed Critical NS Solutions Corp
Priority to JP2008296002A priority Critical patent/JP4834054B2/ja
Publication of JP2010122908A publication Critical patent/JP2010122908A/ja
Application granted granted Critical
Publication of JP4834054B2 publication Critical patent/JP4834054B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Description

本発明は、情報処理装置、情報処理方法及びプログラムに関する。
従来、多くの企業においてユーザ情報の管理を行っている。しかしながら、一つのシステム内で同一ユーザのユーザ情報が複数登録されていたり、複数のシステムにそれぞれ同一ユーザのユーザ情報が登録されていたりする場合がある。このような場合、一般的に、同一ユーザのユーザ情報を一つにまとめる所謂名寄せが行われる。
名寄せの方法としては、例えば特許文献1が知られている。
特開2003−76838号公報
しかし、上記方法の場合、データの内容によっては処理回数が膨大となり現実的な時間内に名寄せ処理ができないおそれがある。
本発明はこのような問題点に鑑みなされたもので、処理対象のデータが多い場合であっても速やかに名寄せを実行可能にする技術を提供することを目的とする。
そこで、本発明は、同一性の判定対象のレコードの数と、同一性の判定に係るルールの数と、に基づき、テーブルの各セルを所定の値で初期化したリンクテーブルを作成するリンクテーブル作成手段と、前記ルールを識別するルール識別子と、前記ルール識別子で識別されるルールに基づき同一と判定されたレコードを識別するレコード識別子の組と、を含むデータに基づき、前記リンクテーブル作成手段で作成され、前記所定の値で初期化された前記リンクテーブルの該当するセルに、レコード間の同一性を表すリンクをリング状に設定するリンク設定手段と、を有することを特徴とする。
係る構成とすることにより、レコード間の同一性を表すリンクをリング状に設定することができ、リンクテーブルが単純化され、並列処理することができるので、処理対象のデータが多い場合であっても速やかに名寄せを実行可能にする技術を提供することができる。
なお、所定の値とは、例えば、後述するゼロ(0)に対応する。また、データとは、例えば、後述するファイル生成部で生成されるファイル等に対応する。また、リンクをリング状に設定するとは、後述するように、例えば、4から6、6から10、10から4等の様に枝分かれがなく、サイクリック(巡回的)にリンクを張る(リンクを設定する)こと等に対応する。
また、本発明は、情報処理方法及びプログラムとしてもよい。
本発明によれば、処理対象のデータが多い場合であっても速やかに名寄せを実行可能にする技術を提供することができる。
以下、本発明の実施形態について図面に基づいて説明する。
<実施形態1>
図1は、情報処理装置(コンピュータ)1のハードウェア構成の一例を示す図である。図1に示されるように情報処理装置1は、ハードウェア構成として、CPU11を含む。
CPU11が、記憶装置13に記憶されている、プログラムに基づき処理を行うことによって、後述する機能、又はフローチャートに係る処理を実現する。
また、CPU11には、バス10を介して、入力装置12、記憶装置13及び表示装置14が接続されている。記憶装置13は、例えば、ROM、RAM、ハードディスク装置等からなり、上述した各プログラム以外に、プログラムに基づく処理で用いられるデータ(例えば後述するファイルやテーブル等)を記憶する。表示装置14は、情報を表示する例えばディスプレイ等である。入力装置12は、情報を入力する例えばキーボード及び/又はマウス等である。
なお、図1では説明の簡略化のため、CPUは1つしか図示していないが、処理の高速化等のため、情報処理装置は、複数のCPUを有していてもよい。
図2は、情報処理装置1の機能構成の一例を示す図である。図2に示されるように、情報処理装置1は、機能構成として、ファイル生成部21と、リンクテーブル作成部22と、リンク設定部23と、制御部24と、を含む。
ファイル生成部21は、同一性の判定対象のレコードと、同一性の判定に係るルールと、に基づき、後述する図6に示すようなファイルを生成する。
リンクテーブル作成部22は、同一性の判定に係るルールのルール数と、同一性の判定対象のレコードのレコード数と、に基づき、テーブルの各セルを所定の値(本実施形態の例ではゼロ)で初期化したリンクテーブルを作成する。
リンク設定部23は、ファイル生成部21で生成されたファイルに基づき、リンクテーブル作成部22で作成された各セルがゼロで初期化されたリンクテーブルの該当するセルに、レコード間の同一性を表すリンクをリング状(環状)に設定する。
制御部24は、複数のスレッドを生成し、生成したスレッドに対してリンクテーブルのレコード番号を割り振る。前記スレッドは、割り振られたレコード番号で識別されるレコード(リンクテーブルのレコード)に関する各ルールのリンク先を再帰的に辿り、同一性を表すレコード番号の組(図6のファイルに示されるような組)を生成する。また、制御部24は、出力スレッドを生成する。出力スレッドは、各スレッドが生成したレコード番号の組に含まれるレコード番号の最大値又は最小値に基づいて、重複するレコード番号の組を排除し、重複するレコード番号の組を排除した結果のレコード番号の組を、名寄せの結果として出力する。
図3は、同一性の判定対象のレコードを含む入力データの一例を示す図である。
図3に示されるように、本実施形態では、入力データとして、住所コード、補助住所(番地以下の住所を示すコード)、カナ氏名、生年月日、電話番号(電話)等のフィールドからなるテキストファイルを想定している。また、入力データの各フィールドはクレンジング済みであり、同一性の判定は文字列の完全一致により判断できる状態になっているものとする。この入力データは、例えば、情報処理装置1とネットワークを介して接続された他の装置から入力される。
ここで、図3に示される※1、※2、・・・で示されるレコードは、以下のルールに基づき、同一個人のレコードであると判定することができるレコードであることを示している。
(ルール1):電話が一致した場合、同一個人のレコード
(ルール2):住所コード、補助住所、カナ氏名、生年月日が一致した場合、同一個人のレコード
なお、これらのルールは、例えばルールファイル等に記述されているものとする。入力データと同様、このルールファイルも、例えば、情報処理装置1とネットワークを介して接続された他の装置から入力される。
ファイル生成部21がルール1に基づき、図3に示される入力データから同一個人のレコードのレコード番号を同じグループになるよう分類した結果の一例を図4に示す。また、ファイル生成部21がルール2に基づき、図3に示される入力データから同一個人のレコードのレコード番号を同じグループになるよう分類した結果の一例を図5に示す。
ファイル生成部21は、分類した結果(図4の(A)及び図5の(B))を合わせて1ファイルにする。なお、このとき、ファイル生成部21は、複数のレコード番号を含むエントリーのみを抽出し、ファイルに記述する。また、ファイル生成部21は、ルールを識別するルール番号と、前記ルールに基づき同一と判定されたレコードのレコード番号の組(グループ)と、を対応付けてファイルに記述する。図6は、ファイル生成部21が生成したファイルの一例を示す図である。
次に、リンクテーブル作成部22は、図3に示されるような同一性の判定対象のレコード数と、同一性の判定に係る上述したルールの数(ルール数)と、に基づき、テーブルの各セルをゼロで初期化したリンクテーブルを作成する。なお、レコード数1億、ルール数13の場合、リンクテーブルの大きさは5GB程度となった。
次に、リンク設定部23は、ファイル生成部21で生成された、図6に示すようなファイルに基づき、リンクテーブル作成部22で生成され、ゼロで初期化された前記リンクテーブルの該当するセルに、レコード間の同一性を表すリンクをリング状に設定する。
例えば、ファイル生成部21で生成されたファイルに
ルール番号が1、同一個人を表すレコード番号の組が3,5
と記述されていた場合、リンク設定部23は、図7に示されるように、ルール1の列のレコード番号3のセルに、レコード番号5へのリンク(レコード間の同一性を表すリンク)を設定する。
より詳細にリンク設定部23の処理を説明すると、リンク設定部23は、ファイル生成部21で生成された、図6に示すようなファイルを1レコードずつ読みながら、グループ(ファイルの1レコードに含まれるレコード番号の集合)のレコード間の関係をリンクとしてリング状に設定する。このとき、リンク設定部23は、図6に示されるようなファイルのレコードに含まれるルール番号の列でリンクを設定する(リンクを張る)。
例えば、ファイル生成部21で生成されたファイルに
ルール番号が3、同一個人を表すレコード番号の組が4,6,10
と記述されていた場合、リンク設定部23は、図8に示されるように、ルール3の列のレコード番号4のセルに、レコード番号6へのリンク(レコード間の同一性を表すリンク)を、また、レコード番号6のセルに、レコード番号10へのリンクを、また、レコード番号10のセルに、レコード番号4へのリンクを設定する。つまり、リンク設定部23は、4から6、6から10、10から4等の様に枝分かれがなく、かつ、サイクリックにリンクを設定する。なお、レコード間にリンクを設定する際、リンク設定部23は、全てのレコードをリンクに沿って辿ることができればよいため、設定する順序は問わずにリンクを設定する。
なお、レコード間にリンクを設定する際、リンク設定部23は、全てのレコードをリンクに沿って辿ることができればよいため、設定する順序は問わずにリンクを設定する。
例えば、ファイル生成部21で生成されたファイルに
ルール番号が4、同一個人を表すレコード番号の組が7,4,11,2
と記述されていた場合、リンク設定部23は、図9に示されるように、ルール4の列のレコード番号7のセルに、レコード番号4へのリンクを、また、レコード番号4のセルに、レコード番号11へのリンクを、また、レコード番号11のセルに、レコード番号2へのリンクを、また、レコード番号2のセルに、レコード番号7へのリンクを設定する。つまり、上述したように、リンク設定部23は、レコード間にリンクをリング状に設定する際、レコード番号の昇順、降順でリンクを設定する必要がない。
リンク設定部23が上述した処理を繰り返すことによって、リンクテーブルにリンクがリング状に設定される。ファイル生成部21で生成されたファイルの各レコードに対するセル群(図9の例では、網掛けの部分)は、前記ファイルの各レコード間で重なることがないため、リンク設定部23におけるリンク設定の処理(リンク生成の処理)は、排他制御なしで前記ファイルのレコード毎に並列に処理することができる。
また、リンク設定部23が、リンクをリング状に設定することによって、リンクテーブルが単純化され、処理対象のデータが多い場合であっても速やかに名寄せを実行可能にする技術を提供することができる。
リンク設定部23が、ファイル生成部21で生成されたファイルの全レコードに対してリンク設定の処理を実行すると、次に、制御部24は、複数のスレッドを生成し、生成したスレッドに対してリンクテーブルのレコード番号を割り振る。前記スレッドは、割り振られたレコード番号で識別されるレコード(リンクテーブルのレコード)に関する各ルールのリンク先を再帰的に辿り、同一性を表すレコード番号の組を生成させる。また、制御部24は、出力スレッドを生成する。出力スレッドは、前記複数のスレッドが生成したレコード番号の組に含まれるレコード番号の最大値又は最小値に基づいて、重複するレコード番号の組を排除し、排除した結果のレコード番号の組を名寄せの結果として出力する。
以下、制御部24の処理をより具体的に説明する。
制御部24は、出力済み集合オブジェクトt0、出力キューq1、出力スレッド01を生成する。
また、制御部24は、スレッドa1〜akを生成し、それぞれのスレッドに対応する集合オブジェクトt1〜tkを生成する。ここで、kは、例えばCPUの数等、情報処理装置1のハードウェアリソースに基づいて制御部24が決定する値である。
制御部24は、1番から図6のファイルのレコード数n番までの各レコード番号mについて、以下の処理をラウンドロビン等でスレッドa1〜akに振り分け、並列で実行させる。ここで、図10は、スレッドと、並列処理と、の関係の一例を示す図である。
スレッドanは、レコード番号mのルール1〜ルールrに含まれるリンクを再帰的に辿り、通ったレコード番号の集合sとsに含まれるレコード番号の最大値maxを取得する。ここで、nは、k以下の正の整数である。なお、スレッドanは、辿ったレコード番号を集合tnに追加する。なお、スレッドanは、同一のレコード番号が集合tnに含まれている場合には、それ以上、再帰的にリンクを辿らない。
スレッドanは、リンクを再帰的に辿った結果の、集合sとレコード番号の最大値maxとの組を、出力キューq1に投入する。
出力スレッドo1は、出力キューq1からsとmaxとの組を取り出し、出力済み集合t0にmaxが含まれているか否かを確認する。出力スレッドo1は、t0にmaxが含まれている場合には何もせず、t0にmaxが含まれていなければt0にmaxを追加し、sに含まれるレコード番号をファイルに出力する。
以下、図11に示されるように、レコード数が7、ルール数が2のリンクテーブルを例に、スレッドによる処理及びマルチスレッドを説明する。
制御部24は、2つのスレッド、スレッドa1と、スレッドa2と、を生成し、a1には、奇数番のレコード(つまり、レコード1、3、5、7)を、a2には、偶数版のレコード(つまり、レコード2、4、6、8)を割り振ったものとする。
まず、スレッドa1は、探索したレコードを入れておく変数t1を以下のように初期化する。
t1={}
次に、スレッドa1は、レコード番号1に対する処理を行う。
スレッドa1は、レコード番号1がt1に含まれているか否かを判定する。この例の場合、t1=[]なので、レコード番号1は、t1に含まれていない。したがって、スレッドa1は、変数を以下のように初期化する。
s={1}
max=1
また、スレッドa1は、レコード番号1をt1に追加する。
その結果、t1={1}となる。
スレッドa1は、図12に示されるように、リンクテーブルのレコード番号1の行に注目すると、レコード1を起点とするリンクの先はレコード5であることが分かる。
よって、スレッドa1は、レコード番号5がt1に含まれているか否かを確認する。この例の場合、t1={1}なので、レコード番号5は含まれていない。よって、スレッドa1は、レコード5はまだリンクを辿っていないと判断し、t1に5を追加する。
また、スレッドa1は、sに5を追加する。また、スレッドa1は、max=1と、5と、を比較し、大きい方の値(5)で、maxを更新する。
結果として、
t1={1,5}
s={1,5}
max=5
となる。
次に、スレッドa1は、図13に示されるように、レコード番号5の行に注目すると、レコード5を起点とするリンクの先はレコード1であることが分かる。
したって、スレッドa1は、レコード番号1がt1に含まれているか否かを確認する。
上述したように、t1={1,5}であるため、レコード番号1は既にt1に含まれている。よって、スレッドa1は、レコード1は既に辿っていると判断する。レコード1から辿ることができる全てのレコードを辿り終えたため、スレッドa1は、(s,max)=({1,5},5)をq1に投入する。
次に、スレッドa1は、レコード番号3に対する処理を行う。
スレッドa1は、レコード番号3がt1に含まれているか否かを判定する。この例の場合、t1=[1,5]なので、レコード番号3は、t1に含まれていない。したがって、スレッドa1は、変数を以下のように初期化する。
s={3}
max=3
また、スレッドa1は、レコード番号3をt1に追加する。
その結果、t1={1,5,3}となる。
スレッドa1は、図14に示されるように、リンクテーブルのレコード番号3の行に注目すると、レコード3を起点とするリンクの先はレコード7であることが分かる。
よって、スレッドa1は、レコード番号7がt1に含まれているか否かを確認する。この例の場合、t1={1,5,3}なので、レコード番号7は含まれていない。よって、スレッドa1は、レコード7はまだリンクを辿っていないと判断し、t1に7を追加する。
また、スレッドa1は、sに7を追加する。また、スレッドa1は、max=3と、7と、を比較し、大きい方の値(7)で、maxを更新する。
結果として、
t1={1,5,3,7}
s={3,7}
max=7
となる。
次に、スレッドa1は、図15に示されるように、レコード番号7の行に注目すると、レコード7を起点とするリンクの先はレコード3とレコード4とであることが分かる。
したって、スレッドa1は、レコード番号3がt1に含まれているか否かを確認する。
上述したように、t1={1,5,3,7}であるため、レコード番号3は既にt1に含まれている。よって、スレッドa1は、レコード3は既に辿っていると判断する。
また、スレッドa1は、レコード番号4がt1に含まれているか否かを確認する。
上述したように、t1={1,5,3,7}であるため、レコード番号4はt1に含まれていない。よって、スレッドa1は、レコード4はまだリンクを辿っていないと判断し、t1に4を追加する。
また、スレッドa1は、sに4を追加する。また、スレッドa1は、max=7と、4と、を比較し、大きい方の値(7)で、maxを更新する。
結果として、
t1={1,5,3,7,4}
s={3,7,4}
max=7
となる。
次に、スレッドa1は、図16に示されるように、レコード番号4の行に注目すると、レコード4を起点とするリンクの先はレコード7であることが分かる。
したって、スレッドa1は、レコード番号7がt1に含まれているか否かを確認する。
上述したように、t1={1,5,3,7,4}であるため、レコード番号7は既にt1に含まれている。よって、スレッドa1は、レコード7は既に辿っていると判断する。レコード3から辿ることができる全てのレコードを辿り終えたため、スレッドa1は、(s,max)=({3,7,4},7)をq1に投入する。
次に、スレッドa1は、レコード番号5に対する処理を行う。
スレッドa1は、レコード番号5がt1に含まれているか否かを判定する。この例の場合、t1=[1,5,3,7,4]なので、レコード番号5は、t1に含まれている。よって、スレッドa1は、レコード番号5は既に辿っていると判断する。
次に、スレッドa1は、レコード番号7に対する処理を行う。
スレッドa1は、レコード番号7がt1に含まれているか否かを判定する。この例の場合、t1=[1,5,3,7,4]なので、レコード番号7は、t1に含まれている。よって、スレッドa1は、レコード番号7は既に辿っていると判断する。
以上で、スレッドa1の処理は終了する。
スレッドa2も同様の処理を行うため、ここでは説明を省略する。
ここで、スレッドa1と、スレッドa2と、は同時に処理を進めるため、各スレッドから出力キューに投入される(s,max)の投入の順番は処理の度に異なる可能性がある。出力キューq1に図17に示されるような順番で(s,max)が投入されたものとする。なお、出力スレッドo1は、(s,max)が投入される度に、出力キューq1から読み出すため、図17のように全ての(s,max)が出力キューq1に滞留しているわけではない。
以下、出力スレッドo1のより具体的な処理の一例を説明する。
出力スレッドo1は、変数を以下のように初期化する。
t0={}
次に、出力スレッドo1は、出力キューq1から一番先に投入された要素(s,max)=({1,5},5)を取り出す。
出力スレッドo1は、(s,max)=({1,5},5)のmaxの値=5がt0に含まれているか否かを確認する。この例の場合、t0={}なので含まれていない。
よって、出力スレッドo1は、s={1,5}に含まれるレコード番号1と、レコード番号5と、が同一人物であるという名寄せの結果を結果ファイル等に出力し、t0にmax=5を追加する。その結果、t0={5}となる。
次に、出力スレッドo1は、出力キューq1から、次の要素(s,max)=({2,6},6)を取り出す。
出力スレッドo1は、(s,max)=({2,6},6)のmaxの値=6がt0に含まれているか否かを確認する。この例の場合、t0={5}なので含まれていない。
よって、出力スレッドo1は、s={2,6}に含まれるレコード番号2と、レコード番号6と、が同一人物であるという名寄せの結果を結果ファイル等に出力し、t0にmax=6を追加する。その結果、t0={5,6}となる。
次に、出力スレッドo1は、出力キューq1から、次の要素(s,max)=({3,7,4},7)を取り出す。
力スレッドo1は、(s,max)=({3,7,4},7)のmaxの値=7がt0に含まれているか否かを確認する。この例の場合、t0={5,6}なので含まれていない。
よって、出力スレッドo1は、s={3,7,4}に含まれるレコード番号3と、レコード番号7と、レコード番号4と、が同一人物であるという名寄せの結果を結果ファイル等に出力し、t0にmax=7を追加する。その結果、t0={5,6,7}となる。
次に、出力スレッドo1は、出力キューq1から、次の要素(s,max)=({4,7,3},7)を取り出す。
出力スレッドo1は、(s,max)=({4,7,3},7)のmaxの値=7がt0に含まれているか否かを確認する。この例の場合、t0={5,6,7}なので含まれている。よって、出力スレッドo1は、既に同じ結果を出力済みであるため、何もしない。
出力スレッドo1は、出力キューq1に処理すべき要素が無くなったので出力処理を終了する。
t0、t1〜tkは、要素数の上限が図6に示されるファイルのレコード数なので、Bitmap等を使って実装することで高速に処理をすることができる。また、図10に示されるような、複数のスレッドによる並列処理は、排他制御せずに実行することができる。結果として、重複する結果が出力キューに投入されることになるが、maxの値に基づき、重複するレコード番号の組を排除している。なお、上述した例では、出力スレッドo1は、max(つまり最大値)の値に基づいて、重複を排除しているが、min(つまり最小値)の値に基づいて、重複を排除するようにしてもよい。
また、図10に示されるように、複数のスレッドによって、出力キューq1に書き込みが行われるが、投入する単位をある程度まとめた単位とすることで、排他制御のオーバーヘッドを無視できるレベルに抑えることができる。また、出力済み集合tのチェックはスレッドo1単体で行うため、排他制御は不要である。よって、Bitmap等を使って実装することで高速に処理をすることができる。
以下、フローチャートを用いて、上述した処理を説明する。
図18は、図6に示すようなファイルを生成するファイル生成処理の一例を示すフローチャートである。
ステップS10において、ファイル生成部21は、ルール番号Rに1を設定する。
ステップS11において、ファイル生成部21は、ルール番号Rが入力等されたルール数以下か否かを判定する。ファイル生成部21は、ルール番号Rがルール数以下の場合、ステップS12に進み、ルール番号Rがルール数以下でない場合、図18に示す処理を終了する。
ステップS12において、ファイル生成部21は、カレントレコード番号Cに1を設定し、ハッシュテーブルHをクリアする。
ステップS13において、ファイル生成部21は、カレントレコード番号Cが入力等されたレコード数以下か否かを判定する。ファイル生成部21は、カレントレコード番号Cがレコード数以下の場合、ステップS14に進み、カレントレコード番号Cがレコード数以下でない場合、ステップS18に進む。
ステップS14において、ファイル生成部21は、カレントレコード番号Cからルール番号Rのルールが指定するフィールドの組Tを取得する。
ステップS15において、ファイル生成部21は、ステップS14で取得したフィールドの組Tがブランクを含むか否かを判定する。ファイル生成部21は、フィールドの組Tがブランクを含む場合、ステップS17に、ブランクを含まない場合、ステップS16に進む。
ステップS16において、ファイル生成部21は、ハッシュテーブルに、キー=フィールドの組Tに対応する集合にカレントレコード番号Cを追加する。
ステップS17において、ファイル生成部21は、カレントレコード番号Cを一つインクリメントする。ステップS17の処理の後、ファイル生成部21は、ステップS13に処理を戻す。
ステップS18において、ファイル生成部21は、ハッシュテーブルHの各キーに対応する集合の要素をファイルに出力する。但し、ファイル生成部21は、要素数が1のものは出力しない。
ステップS19において、ファイル生成部21は、ルール番号Rを一つインクリメントする。ステップS19の処理の後、ファイル生成部21は、ステップS11に処理を戻す。
図19は、リンク設定部23による処理及び制御部24による処理の一例を示すフローチャートである。なお、リンクテーブル作成部22におけるリンクテーブルの生成は既に終了しているものとする。
ステップS20において、リンク設定部23は、入力データ(図22の処理で作成されたファイル)から1レコード読み込み、カレントレコード番号Cに設定する。
ステップS21において、リンク設定部23は、読み込んだレコードが入力データのEOF(End Of File)か否かを判定する。リンク設定部23は、読み込んだレコードが入力データのEOFであった場合、ステップS23に進み、読み込んだレコードが入力データのEOFでない場合、ステップS22に進む。
ステップS22において、リンク設定部23は、リンクテーブルLにカレントレコード番号Cの内容を設定する。
一方、ステップS23において、制御部24は、スレッドa1〜akと、各スレッドに対応する集合オブジェクトt1〜tkと、を作成する。なお、制御部24は、処理するレコード番号の範囲を指定してスレッドa1〜akを生成する。例えば、制御部24は、a1に対してはn(=レコード数)以下のkの倍数+1、a2に対してはn以下のkの倍数+2、・・・、akはn以下の倍数等とスレッドにレコード番号を割り当てる。
ステップS24において、制御部24は、出力済み集合オブジェクトt0、出力キューq1、出力スレッドo1を作成する。
ステップS25において、制御部24は、出力スレッドo1による処理の終了を待つ。
図20は、スレッドa1の処理の一例を示すフローチャートである。なお、スレッドa2〜akも処理の内容は同様である。
ステップS30において、スレッドa1は、レコード番号Nに1を代入する。
ステップS31において、スレッドa1は、レコード番号Nが入力等されたレコード数以下か否かを判定する。スレッドa1は、レコード番号Cがレコード数以下の場合、ステップS32に進み、レコード番号Cがレコード数以下でない場合、ステップS35に進む。
ステップS32において、スレッドa1は、リンクテーブルLのレコード番号Nについて、リンクを再帰的に辿り、通ったレコード番号の集合sと、sに含まれるレコード番号の最大値maxと、を取得する。スレッドa1は、同一のレコード番号が集合tnに含まれている場合には、それ以上、再帰的にリンクを辿らず、辿ったレコード番号を集合tnに追加する。
ステップS33において、スレッドa1は、sと、maxと、の組を出力キューq1に投入する。
ステップS34において、スレッドa1は、レコード番号にkを加え、ステップS31に戻る。
一方、ステップS35において、スレッドa1は、NULL値をq1に投入する。
図21は、スレッドo1の処理の一例を示すフローチャートである。
ステップS40において、スレッドo1は、a1〜akのうち、終了したスレッドの数を表すDに0(ゼロ)を代入し、初期化する。
ステップS41において、スレッドo1は、q1から要素を取り出し、変数Eに代入する。
ステップS42において、スレッドo1は、EがNULLか否かを判定する。スレッドo1は、EがNULLでない場合、ステップS43に進み、EがNULLの場合、ステップS47に進む。なお、これは、処理対象となるレコード番号の処理を全て終えたことを意味する値としてNULL値を用いた場合の例である。q1に投入する、処理を全て終えたことを意味する値として他の値を用いてもよい。
ステップS43において、スレッドo1は、Eからsとmaxとを抽出し、(s,max)に追加する。
ステップS44において、スレッドo1は、t0にmaxが含まれるか否かを判定する。t0にmaxが含まれている場合、ステップS41に進み、t0にmaxが含まれていない場合、ステップS45に進む。
ステップS45において、スレッドo1は、t0にmaxを追加する。
ステップS46において、スレッドo1は、sに含まれるレコード番号の組をファイルに出力する。
一方、ステップS47において、スレッドo1は、Dの値を1つインクリメントする。ステップS48において、スレッドo1は、Dがkに達したか否かを判定する。スレッドo1は、Dがkに達した場合、図21に示す処理を終了し、Dがkに達していない場合、ステップS41に進む。
以上、上述した本実施形態によれば、処理対象のデータが多い場合であっても速やかに名寄せを実行可能にする技術を提供することができる。
<実施形態2>
上述した実施形態では、制御部24は、複数スレッドを生成し、複数スレッドに並列処理を実行させる例を用いて説明を行った。しかしながら、制御部24は、図22に示されるように、1スレッドのみを生成し、上述した名寄せの制御を実行するようにしてもよい。
制御部24は、スレッドa1(メインスレッドでもよい)と、集合オブジェクトt1と、を生成する。スレッドa1は、各レコード番号m(m=1、2、・・・、n)について、以下の処理を行う。
スレッドa1は、レコード番号mのルール1〜ルールrのリンク先を再帰的に辿る。このときスレッドa1は、リンクを辿る際に、レコード番号を集合オブジェクトt1に追加し、既に集合オブジェクトt1にレコード番号が含まれている場合は、そのレコード番号以降のリンク先は辿らない。そして、スレッドa1は、結果ファイル等に同一個人のレコード番号の組を出力する。
同一個人を表す複数のレコード番号を出力する方法として、例えば、スレッドa1は、同一個人のレコード番号を1行に出力する。このとき、スレッドa1は、同じ個人がファイル中で連続するように出力し、別の個人に代わるときにマーク(例えば改行等)を入れる。
以上、上述した本実施形態によれば、制御部24による制御(又は作り)を単純化することができる。そのため、メンテナンス等も容易に行うことができる。
以上、上述した各実施形態によれば、処理対象のデータが多い場合であっても速やかに名寄せを実行可能にする技術を提供することができる。
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
情報処理装置(コンピュータ)1のハードウェア構成の一例を示す図である。 情報処理装置1の機能構成の一例を示す図である。 同一性の判定対象のレコードを含む入力データの一例を示す図である。 入力データから同一個人のレコードのレコード番号を同じグループになるよう分類した結果の一例を示す図である。 入力データから同一個人のレコードのレコード番号を同じグループになるよう分類した結果の一例を示す図である。 ファイル生成部21が生成したファイルの一例を示す図である。 リンクの一例を示す図である。 リンク設定の一例を示す図(その1)である。 リンク設定の一例を示す図(その2)である。 スレッドと、並列処理と、の関係の一例を示す図である。 スレッドの処理を説明するためのリンクテーブルの一例を示す図(その1)である。 スレッドの処理を説明するためのリンクテーブルの一例を示す図(その2)である。 スレッドの処理を説明するためのリンクテーブルの一例を示す図(その3)である。 スレッドの処理を説明するためのリンクテーブルの一例を示す図(その4)である。 スレッドの処理を説明するためのリンクテーブルの一例を示す図(その5)である。 スレッドの処理を説明するためのリンクテーブルの一例を示す図(その6)である。 出力キューq1の一例を示す図である。 図6に示すようなファイルを生成するファイル生成処理の一例を示すフローチャートである。 リンク設定部23による処理及び制御部24による処理の一例を示すフローチャートである。 スレッドa1の処理の一例を示すフローチャートである。 スレッドo1の処理の一例を示すフローチャートである。 1スレッドの一例を示す図である。
符号の説明
11 CPU
12 入力装置
13 記憶装置
14 表示装置

Claims (7)

  1. 同一性の判定対象のレコードの数と、同一性の判定に係るルールの数と、に基づき、テーブルの各セルを所定の値で初期化したリンクテーブルを作成するリンクテーブル作成手段と、
    前記ルールを識別するルール識別子と、前記ルール識別子で識別されるルールに基づき同一と判定されたレコードを識別するレコード識別子の組と、を含むデータに基づき、前記リンクテーブル作成手段で作成され、前記所定の値で初期化された前記リンクテーブルの該当するセルに、レコード間の同一性を表すリンクをリング状に設定するリンク設定手段と、
    を有することを特徴とする情報処理装置。
  2. スレッドを生成し、生成したスレッドに対して前記リンクテーブルのレコード識別子を割り振る制御手段を更に有し、
    前記スレッドは、割り振られたレコード識別子で識別されるレコードに関する各ルールのリンク先を再帰的に辿り、同一性を表すレコード識別子の組を生成することを特徴とする請求項1に記載の情報処理装置。
  3. 前記制御手段は、複数の前記スレッドを生成し、生成したスレッドに対して前記リンクテーブルのレコード識別子を割り振ることを特徴とする請求項2に記載の情報処理装置。
  4. 前記制御手段は、出力スレッドを生成し、
    前記出力スレッドは、前記複数のスレッドが生成したレコード識別子の組に含まれるレコード識別子の最大値又は最小値に基づいて、重複するレコード識別子の組を排除し、排除した結果のレコード識別子の組を名寄せの結果として出力することを特徴とする請求項3に記載の情報処理装置。
  5. 同一性の判定対象のレコードと、同一性の判定に係るルールと、に基づき、前記データを生成するデータ生成手段を更に有することを特徴とする請求項1乃至4の何れか1項に記載の情報処理装置。
  6. 情報処理装置における情報処理方法であって、
    同一性の判定対象のレコードの数と、同一性の判定に係るルールの数と、に基づき、テーブルの各セルを所定の値で初期化したリンクテーブルを作成するリンクテーブル作成ステップと、
    前記ルールを識別するルール識別子と、前記ルール識別子で識別されるルールに基づき同一と判定されたレコードを識別するレコード識別子の組と、を含むデータに基づき、前記リンクテーブル作成ステップで作成され、前記所定の値で初期化された前記リンクテーブルの該当するセルに、レコード間の同一性を表すリンクをリング状に設定するリンク設定ステップと、
    を有することを特徴とする情報処理方法。
  7. コンピュータを、
    同一性の判定対象のレコードの数と、同一性の判定に係るルールの数と、に基づき、テーブルの各セルを所定の値で初期化したリンクテーブルを作成するリンクテーブル作成手段と、
    前記ルールを識別するルール識別子と、前記ルール識別子で識別されるルールに基づき同一と判定されたレコードを識別するレコード識別子の組と、を含むデータに基づき、前記リンクテーブル作成手段で作成され、前記所定の値で初期化された前記リンクテーブルの該当するセルに、レコード間の同一性を表すリンクをリング状に設定するリンク設定手段と、
    して機能させることを特徴とするプログラム。
JP2008296002A 2008-11-19 2008-11-19 情報処理装置、情報処理方法及びプログラム Active JP4834054B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008296002A JP4834054B2 (ja) 2008-11-19 2008-11-19 情報処理装置、情報処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008296002A JP4834054B2 (ja) 2008-11-19 2008-11-19 情報処理装置、情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2010122908A JP2010122908A (ja) 2010-06-03
JP4834054B2 true JP4834054B2 (ja) 2011-12-07

Family

ID=42324193

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008296002A Active JP4834054B2 (ja) 2008-11-19 2008-11-19 情報処理装置、情報処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP4834054B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4869448B1 (ja) * 2011-07-08 2012-02-08 株式会社ぐるなび 名寄せ管理システム
CN109615554B (zh) * 2018-12-06 2022-08-02 苏州市伽顿服饰有限公司 基于智能制造的同步数据系统及其运行方法、同步方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6647479B1 (en) * 2000-01-03 2003-11-11 Avid Technology, Inc. Computer file system providing looped file structure for post-occurrence data collection of asynchronous events
DE10104831A1 (de) * 2001-02-01 2002-08-08 Sap Ag Datenstruktur für Informationssysteme
JP3662866B2 (ja) * 2001-09-04 2005-06-22 株式会社みずほ銀行 名寄せ処理方法及び名寄せ処理プログラム

Also Published As

Publication number Publication date
JP2010122908A (ja) 2010-06-03

Similar Documents

Publication Publication Date Title
JP6638484B2 (ja) 情報処理装置、類似検索プログラム、及び類似検索方法
KR100992169B1 (ko) 정보 분석프로세스 추천 설계시스템 및 방법
JPWO2008107997A1 (ja) 帳票種識別プログラム、帳票種識別方法および帳票種識別装置
JP2010541092A5 (ja)
Abdelwahab et al. UofL at SemEval-2016 Task 4: Multi domain word2vec for Twitter sentiment classification
JP2024107473A (ja) 情報処理装置、情報処理方法及びプログラム
CN108509545B (zh) 一种文章的评论处理方法及系统
JP4834054B2 (ja) 情報処理装置、情報処理方法及びプログラム
WO2016056236A1 (ja) 情報処理装置、情報処理方法、及び、記録媒体
WO2008062822A1 (fr) Dispositif d'exploration de texte, procédé d'exploration de texte et programme d'exploration de texte
JP2012181605A (ja) データ分析支援装置およびプログラム
CN112860850B (zh) 人机交互方法、装置、设备及存储介质
JP2016024510A (ja) 問題構造抽出支援システム、問題構造抽出支援方法及びプログラム
JP6435939B2 (ja) データ分類プログラム、データ分類方法およびデータ分類装置
JP7087931B2 (ja) 探索プログラム、探索方法及び探索装置
JP6121828B2 (ja) 静的解析装置、静的解析方法、および、コンピュータ・プログラム
JP4870732B2 (ja) 情報処理装置、名寄せ方法及びプログラム
JP2011128688A (ja) 文字同定装置及び文字同定方法
JP6665576B2 (ja) 支援装置、支援方法及びプログラム
CN111858610B (zh) 数据行号分配方法和装置、存储介质、电子设备
WO2014170965A1 (ja) 文書処理方法、文書処理装置および文書処理プログラム
CN114841604A (zh) 协作任务处理方法、装置、设备及计算机可读存储介质
JP5758262B2 (ja) 類似文書可視化装置、類似文書可視化方法およびプログラム
JP6842436B2 (ja) 情報処理装置、情報処理方法、及びプログラム
JP5175607B2 (ja) 決定木作成装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110502

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110913

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110922

R150 Certificate of patent or registration of utility model

Ref document number: 4834054

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140930

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250