(57)【特許請求の範囲】
【請求項１】
複数の項目にそれぞれ関連付けられたデータを有する入力個票を逐次取得する取得部と、
前記取得部が取得した前記入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票に逐次変換する変換部とを備え、
前記変換部は、前記入力個票を前記匿名化済個票と同一の出力個票に変換することができない場合に、該匿名化済個票が有する項目に関連付けられたすべてのデータを他のデータに置換した置換個票に変換する
情報処理装置。
【請求項２】
前記規則は、前記入力個票を、各項目に関連付けられたデータが該入力個票の各項目に関連付けられたデータまたは該データを置換した他のデータと同一である出力個票に変換する規則である
請求項１に記載の情報処理装置。
【請求項３】
前記規則は、前記匿名化済個票が有する項目およびデータに対応する複数階層の判定枝を有し、各階層の該判定枝により出力個票が定められ、
前記変換部は、前記入力個票の項目に関連付けられたデータが前記判定枝に対応する場合に該判定枝を選択し、選択した該判定枝によって定められた出力個票に入力個票を変換する
請求項１または請求項２に記載の情報処理装置。
【請求項４】
前記入力個票、前記匿名化済個票および前記出力個票は、匿名化項目と非匿名化項目とを含み、
前記変換部は、前記入力個票を前記匿名化済個票のうちのいずれか一つの匿名化済個票の匿名化項目と同一の匿名化項目を有するとともに、前記入力個票の前記非匿名化項目と同一の非匿名化項目を有する出力個票に変換する
請求項１から請求項３のいずれか一つに記載の情報処理装置。
【請求項５】
前記規則は、
入力ノードと、
前記匿名化済個票に関連付けられており、前記入力ノードから遷移可能な複数の受容ノードと、
前記入力ノードから前記受容ノードに至る遷移の条件を示す複数の判定枝と、
前記判定枝に接続された複数のノードとを備える
有限オートマトンである請求項１から請求項４のいずれか一つに記載の情報処理装置。
【請求項６】
前記有限オートマトンは、
入力ノードから一の受容ノードにつながる一のノード列に含まれるノードから、他のノード列に含まれるノードに遷移するバイパス枝を備える請求項５に記載の情報処理装置。
【請求項７】
ネットワーク回線を介して、複数の項目にそれぞれ関連付けられたデータを有する入力個票を逐次取得し、
取得した入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票に逐次変換し、
前記入力個票を前記匿名化済個票と同一の出力個票に変換することができない場合に、該匿名化済個票が有する項目に関連付けられたすべてのデータを他のデータに置換した置換個票に変換し、
変換した出力個票を送信する
処理をコンピュータに実行させる情報処理方法。
【請求項８】
複数の項目にそれぞれ関連付けられたデータを有する入力個票を逐次取得し、
取得した入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票に逐次変換し、
前記入力個票を前記匿名化済個票と同一の出力個票に変換することができない場合に、該匿名化済個票が有する項目に関連付けられたすべてのデータを他のデータに置換した置換個票に変換する
処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
元データを、ｋ−匿名性を備えるように加工するｋ−匿名化の手法が提案されている（特許文献１）。過去に取得したストリームデータに対してｋ−匿名性を満たすように匿名化する規則を算出し、新たに取得したストリームデータを匿名化する手法が提案されている（特許文献２）。
【０００３】
その他に、元データ中の個票の各項目に記録されたデータを木構造状に階層化し、出現頻度のカウント結果に基づいて各個票の項目を一般化する匿名化の手法が提案されている（特許文献３）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２００２／１６９７９３号明細書
【特許文献２】特開２０１３−８０３７５号公報
【特許文献３】国際公開第２０１１−１４５４０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１および特許文献３に開示されている手法は、あらかじめ収集した個票を匿名化する手法である。逐次発生する追加の個票を適切に処理するためには、当初処理した個票と追加の個票とを合わせて処理する必要があり、データの処理に時間を要する。そのため、追加の個票が逐次発生する場合には、匿名化の処理が困難である。
【０００６】
特許文献２には、逐次発生する追加の個票を処理する手法が開示されている。しかし、追加の個票と、過去に処理した個票との共通点が少ない場合には、匿名性を確保できず、追加の個票から個人を特定することが可能となる場合がある。
【０００７】
一つの側面では、逐次発生する追加の個票の匿名化に要する処理負荷を軽減する情報処理装置等を提供することを目的とする。
【課題を解決するための手段】
【０００８】
情報処理装置は、複数の項目にそれぞれ関連付けられたデータを有する入力個票を逐次取得する取得部と、前記取得部が取得した前記入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票に逐次変換する変換部とを備え、前記変換部は、前記入力個票を前記匿名化済個票と同一の出力個票に変換することができない場合に、該匿名化済個票が有する項目に関連付けられたすべてのデータを他のデータに置換した置換個票に変換する。
【発明の効果】
【０００９】
一つの側面では、逐次発生する追加の個票の匿名化に要する処理負荷を軽減できる。
【図面の簡単な説明】
【００１０】
【図１】情報処理システムの構成を示す説明図である。
【図２】元データの例を示す説明図である。
【図３】匿名化済データＤＢのレコードレイアウトを示す説明図である。
【図４】匿名化オートマトンの作成過程を示す説明図である。
【図５】匿名化オートマトンの作成過程を示す説明図である。
【図６】匿名化オートマトンの作成過程を示す説明図である。
【図７】匿名化オートマトンを示す説明図である。
【図８】ストリーミングデータの例を示す説明図である。
【図９】匿名化処理後のストリーミングデータの例を示す説明図である。
【図１０】プログラムの処理の流れを示すフローチャートである。
【図１１】階層木作成のサブルーチンの処理の流れを示すフローチャートである。
【図１２】ノード削減のサブルーチンの処理の流れを示すフローチャートである。
【図１３】バイパス追加のサブルーチンの処理の流れを示すフローチャートである。
【図１４】バイパス追加のサブルーチンの処理の流れを示すフローチャートである。
【図１５】匿名化のサブルーチンの処理の流れを示すフローチャートである。
【図１６】実施の形態２の匿名化処理後のストリーミングデータの例を示す説明図である。
【図１７】実施の形態２の匿名化オートマトンを示す説明図である。
【図１８】実施の形態２のプログラムの処理の流れを示すフローチャートである。
【図１９】実施の形態３のストリーミングデータの例を示す説明図である。
【図２０】実施の形態３の匿名化処理後のストリーミングデータの例を示す説明図である。
【図２１】実施の形態３の匿名化のサブルーチンの処理の流れを示すフローチャートである。
【図２２】実施の形態４の階層木の作成過程を示す説明図である。
【図２３】実施の形態４の階層木の作成過程を示す説明図である。
【図２４】実施の形態４の階層木作成のサブルーチンの処理の流れを示すフローチャートである。
【図２５】実施の形態５の情報処理システムの構成を示す説明図である。
【図２６】実施の形態５のプログラムの処理の流れを示すフローチャートである。
【図２７】実施の形態６のプログラムの処理の流れを示すフローチャートである。
【図２８】実施の形態７の情報処理装置の動作を示す機能ブロック図である。
【図２９】実施の形態８の情報処理システムの構成を示す説明図である。
【発明を実施するための形態】
【００１１】
［実施の形態１］
図１は、情報処理システム１０の構成を示す説明図である。情報処理システム１０は、サーバ１１、第１クライアント２１および第２クライアント２５を備える。サーバ１１、第１クライアント２１および第２クライアント２５は、ネットワークを介して接続されている。
【００１２】
サーバ１１は、サーバＣＰＵ（Central Processing Unit）１２、主記憶装置１３、補助記憶装置１４、通信部１５およびバスを備える。本実施の形態のサーバ１１は、ストリーミングデータの匿名化の処理を行う情報処理装置である。本実施の形態のサーバ１１は、汎用のパーソナルコンピューター、大型計算機等の情報機器等である。また、本実施の形態のサーバ１１は、大型計算機上で動作する仮想マシンでも良い。
【００１３】
サーバＣＰＵ１２は、本実施の形態に係るプログラムを実行する演算制御装置である。サーバＣＰＵ１２には、一または複数のＣＰＵまたはマルチコアＣＰＵ等が使用される。サーバＣＰＵ１２は、バスを介してシミュレーション装置１０を構成するハードウェア各部と接続されている。
【００１４】
主記憶装置１３は、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）、フラッシュメモリ等の記憶装置である。主記憶装置１３には、サーバＣＰＵ１２が行う処理の途中で必要な情報およびサーバＣＰＵ１２で実行中のプログラムが一時的に保存される。
【００１５】
補助記憶装置１４は、ＳＲＡＭ、フラッシュメモリ、ハードディスクまたは磁気テープ等の記憶装置である。補助記憶装置１４には、サーバＣＰＵ１２に実行させるプログラム、匿名化済データＤＢ（Data Base）３１、匿名化オートマトン３２およびプログラムの実行に必要な各種情報が保存される。通信部１５は、ネットワークとの通信を行うインターフェイスである。
【００１６】
第２クライアント２５は、入力個票を逐次取得してネットワークに送るクライアントである。第２クライアント２５は、店舗等に設置された情報端末および一般消費者等が使用するパソコン、タブレット、スマートフォンなどの情報機器である。以後の説明では第２クライアント２５を操作するユーザを第２ユーザと記載する。
【００１７】
入力個票は、たとえばＷｅｂサイトの会員登録、通信販売の取引記録、ポイントカードのポイント付与記録等から取得する。入力個票は、複数の項目に対応するデータを含む所定の形式で、第２クライアント２５からネットワークに逐次送られる。
【００１８】
第１クライアント２１は、たとえばマーケティング等に匿名化済データを活用するユーザが使用するクライアントである。匿名化済データについては後述する。本実施の形態の第１クライアント２１は、汎用のパーソナルコンピューター、大型計算機等の情報機器を使用する。以後の説明では、第１クライアント２１を操作するユーザを第１ユーザと記載する。第１クライアント２１は、入力個票をサーバＣＰＵ１２が匿名化した出力個票を逐次受け取る。
【００１９】
なお、第１クライアント２１および第２クライアント２５は、サーバ１１と同様にＣＰＵ、主記憶装置、補助記憶装置および通信部を備える。さらに、第１クライアント２１および第２クライアント２５は、キーボード、タッチパネル、マウス等の入力インターフェイスおよび液晶ディスプレイ、有機ＥＬディスプレイ、プリント等の出力インターフェイスを備える。第１クライアント２１および第２クライアント２５の内部構成については、図示を省略する。
【００２０】
図２は、元データの例を示す説明図である。元データは本実施の形態の情報処理システム１０とは別の情報処理装置に保存されている。元データは、たとえばＷｅｂサイトの会員登録、通信販売の取引記録、ポイントカードのポイント付与記録等のデータである。図２の１つの行は、元データに含まれる１個の個票を示す。個票は、たとえば一人分の会員登録情報、または一回の取引の記録等、一つの塊として取り扱われるデータである。図２では、例として郵便番号、生年、性別の３つの項目を含む個票を示す。なお、図２では郵便番号の上３桁のみを記録した例を示す。
【００２１】
元データの個票にはこれらの他にたとえば住所、氏名、電話番号、メールアドレス、家族構成、購買した商品、支払い方法等の項目が含まれる場合がある。したがって、元データには個人情報が含まれる可能性がある。個人情報が含まれる元データを二次利用することは、法的に制限されている。図２に示す元データには、数十個から数百万個程度の個票が記録されている。なお、以下の説明では元データの個票を元データ個票と記載する。
【００２２】
図３は、匿名化済データＤＢ３１のレコードレイアウトを示す説明図である。匿名化済データＤＢ３１は、匿名化済データを記録するＤＢである。
【００２３】
匿名化済データについて説明する。匿名化済データとは個票から個人を特定できないように加工したデータを意味する。匿名化済データは、たとえばマーケティング分析、サービスの最適化等に利用することができる。以後の説明では、匿名化済データを利用することを二次利用と記載する。
【００２４】
どの個票にも、同一内容の個票が当該個票自身も含めてｋ個以上存在する状態を、ｋ−匿名性という。ここでｋは２以上の整数である。ｋ−匿名性が確保されていれば、個票と紐付けられる個人をｋ人未満に絞り込んで特定することができない。本実施の形態の匿名化済データＤＢ３１は、ｋ−匿名性を有する。
【００２５】
なお、本実施の形態の匿名化済データＤＢ３１は、たとえばＰｋ−匿名性を有しても良い。Ｐｋ−匿名性とは、個票から個人を特定することができる可能性が１／ｋ未満である状態を意味する。
【００２６】
匿名化済データＤＢ３１は、郵便番号フィールド、生年フィールドおよび性別フィールドを有する。郵便番号フィールドには、郵便番号が記録されている。なお、図３では郵便番号の上３桁のみを記録した例を示す。生年フィールドには、年齢が記録されている。性別フィールドには、性別が記録されている。郵便番号フィールド、年齢フィールドおよび性別フィールドに記録された「＊」については後述する。
【００２７】
匿名化済データＤＢ３１は、１個の匿名化済個票について１つのレコードを有する。匿名化済データＤＢ３１は、これらの他にたとえば住所、氏名、電話番号、メールアドレス、家族構成、購買した商品、支払い方法等を匿名化した情報を記録するフィールドを有しても良い。
【００２８】
匿名化は、本実施の形態の情報処理システム１０とは別の情報処理装置で行われる。図３中の匿名化済データＤＢ３１は、図２に示す元データを匿名化した例を示す。元データの１行目の元データ個票を匿名化したデータが、匿名化済データＤＢ３１の１行目のレコードである。
【００２９】
元データと匿名化済データとの関係について説明する。図２の１行目に記載した元データ個票については、郵便番号、年齢、性別の３項目とも図３の匿名化済データＤＢ３１の１レコード目に記録されている。元データに同一内容の元データ個票が複数含まれており、元データ個票から個人を特定することができない場合には、このように元データ個票と同一の匿名化済個票が匿名化済データＤＢ３１に含まれていても良い。
【００３０】
図２の２行目に記載した元データ個票については、性別を「＊」に置換して図３の匿名化済データＤＢ３１の２レコード目に記録されている。ここで「＊」は性別を隠したことを意味している。性別を隠すことにより、性別だけが異なる複数の元データ個票が同一の匿名化済個票に変換される。このように元データ個票を処理することにより、元データが所定の条件の匿名性を備える匿名化済データに変換される。
【００３１】
各項目のデータを「＊」で置換することを、以後の説明では一般化と記載する。一般化は、元データ個票を匿名化する手法の一つである。元データの３行目については、生年を「＊」に置換した匿名化済個票が匿名化済データＤＢ３１に記録されている。ここで「＊」は年齢を一般化したことを意味している。
【００３２】
データに使用しない値または符号等であれば、たとえば「−」、「／」、「９９９」等の任意の値または符号等を「＊」の代わりに使用することができる。以後の説明では、一般化に使用する値または符号等を一般化符号と記載する。なお、項目によって異なる一般化符号を使用しても良い。
【００３３】
元データを匿名化する方法は、一般化に限定しない。たとえば、住所を都道府県名で置き換える、氏名をイニシヤルで置き換える、一部の項目のデータを他の個票の同じ項目のデータと入れ替える、一部の項目を削除する等の方法で、元データを匿名化することができる。また、これらの方法と一般化とを組み合わせても良い。本実施の形態の情報処理装置１０は、任意の方法で匿名化した匿名化済データＤＢ３１を使用することができる。
【００３４】
匿名化済データＤＢ３１は、数十個から数百万個程度のレコードを有する。すなわち匿名化済データＤＢ３１には、数十個から数百万個程度の匿名化済個票が記録されている。
【００３５】
図４から図６は、匿名化オートマトン３２の作成過程を示す説明図である。図７は、匿名化オートマトン３２を示す説明図である。匿名化オートマトン３２は、入力個票を受け付けて、所定の規則に基づく処理を行い、匿名化した匿名化済個票に変換する仮想的な機械である。すなわち、匿名化オートマトン３２は、入力個票を匿名化する処理の規則を表現した仮想的な機械である。匿名化オートマトン３２は、匿名化済データＤＢ３１に記録された匿名化済個票に基づいて作成される有限オートマトンである。匿名化オートマトン３２が入力個票を処理する手順については後述する。
【００３６】
図４は、匿名化オートマトン３２を作成する第１の段階である階層木を示す。サーバＣＰＵ１２は、図３を使用して説明した匿名化済データＤＢ３１に記録された匿名化済個票を入力として、図４に示す階層木を作成する。階層木は、親ノード６０、中間ノード６１および受容ノード６３を有する。親ノード６０および中間ノード６１は円で示す。受容ノード６３は二重楕円で示す。以後の説明では、親ノード６０、中間ノード６１および受容ノード６３をまとめてノードと記載する場合がある。
【００３７】
親ノード６０、中間ノード６１および受容ノード６３は実線で示す遷移枝６５で接続されている。中間ノード６１および受容ノード６３には、それぞれ一本の遷移枝６５が入力する。
【００３８】
中間ノード６１からは１本以上の遷移枝６５が出力する。遷移枝６５を選択する条件は、各々の矢印の近傍のラベルに表示してある。受容ノード６３は、匿名化済データＤＢ３１に記録されている各匿名化済個票と対応している。受容ノード６３からは遷移枝６５が出力しない。
【００３９】
階層木は、第１階層の親ノード６０から第４階層の受容ノード６３までの四階層の階層構造を有する。階層の数は、匿名化済データＤＢ３１のフィールドの数に１を加算した数である。一の階層に含まれる中間ノード６１とその次の階層に含まれる中間ノード６１または受容ノード６３とを結ぶ遷移枝６５のラベルは、匿名化済データＤＢ３１の１つのフィールドに含まれるデータである。
【００４０】
親ノード６０、中間ノード６１および受容ノード６３を示す円または二重楕円内の「ｎ」に続く番号は、図３を使用して説明した匿名化ＤＢ３１のレコードを上から順番に処理した場合に、サーバＣＰＵ１２がノードを生成する順番を示す。
【００４１】
以後の説明では、中間ノード６１を特定する必要がある場合には円内に示す記号を用いて、たとえば中間ノード６１ｎ２のように記載する。同様に、受容ノード６３を特定する必要がある場合には二重楕円内に示す記号を用いて、たとえば受容ノード６３ｎ４のように記載する。
【００４２】
以下の図および説明では、受容ノード６３は項目の名称を省略して表示する。たとえば図４の受容ノード６３ｎ１６に記載された「＊，２０，女」は、郵便番号は「＊」、年齢は「２０」、性別は「女」であることを意味している。
【００４３】
サーバＣＰＵ１２が、図４に示す階層木を作成する方法について説明する。サーバＣＰＵ１２は、親ノード６０を作成する。サーバＣＰＵ１２は、図中に「ｎ１」と示すように、親ノード６０に１番の番号を付与する。
【００４４】
サーバＣＰＵ１２は、匿名化済ＤＢ３１から１番目のレコード「１９８，５０，男」を取得する。サーバＣＰＵ１２は、親ノード６０から出力する遷移枝６５および中間ノード６１ｎ２を追加する。サーバＣＰＵ１２は、追加した遷移枝６５に、１番目のレコードの第１フィールドに記録されたデータに対応するラベル「〒：１９８」を付与する。追加した遷移枝６５は、郵便番号が「１９８」である入力個票が親ノード６０に入力した場合に、サーバＣＰＵ１２が行う処理が中間ノード６１ｎ２に遷移することを意味する。
【００４５】
サーバＣＰＵ１２は、中間ノード６１ｎ２から出力する遷移枝６５および中間ノード６１ｎ３を追加する。サーバＣＰＵ１２は、追加した遷移枝６５に、１番目のレコードの第２フィールドに記録されたデータに対応するラベル「年：５０」を付与する。
【００４６】
次の第３フィールドは、１番目のレコードの最後のフィールドであるので、サーバＣＰＵ１２は、中間ノード６１ｎ３から出力する遷移枝６５および受容ノード６３ｎ４を追加する。サーバＣＰＵ１２は、追加した遷移枝６５に、１番目のレコードの第３フィールドに記録されたデータに対応するラベル「性：男」を付与する。サーバＣＰＵ１２は、受容ノード６３ｎ４に第１レコードに記録された匿名化済個票「１９８，５０，男」を関連付ける。
【００４７】
サーバＣＰＵ１２は、匿名化済データＤＢ３１から２番目のレコード「１９８，２０，＊」を取得する。サーバＣＰＵ１２は、作成中の階層木の親ノード６０から、２番目のレコードの第１フィールドに記録されたデータに対応する遷移枝６５が出ているか否かを判定する。郵便番号が「１９８」である遷移枝６５は既に存在する。したがって、サーバＣＰＵ１２はその遷移枝６５の先の中間ノード６１ｎ２を次の処理対象とする。
【００４８】
サーバＣＰＵ１２は、作成中の階層木の中間ノード６１ｎ２から、２番目のレコードの第２フィールドに記録されたデータに対応する遷移枝６５が出ているか否かを判定する。生年が「２０」である遷移枝６５は存在しない。したがって、サーバＣＰＵ１２は、中間ノード６１ｎ２から出力する遷移枝６５および中間ノード６１ｎ５を追加する。サーバＣＰＵ１２は、追加した遷移枝６５に、２番目のレコードの第２フィールドに記録されたデータに対応するラベル「年：２０」を付与する。サーバＣＰＵ１２は作成した中間ノード６１ｎ５を次の処理対象とする。
【００４９】
サーバＣＰＵ１２は、作成中の階層木の中間ノード６１ｎ５から、２番目のレコードの第３フィールドに記録されたデータに対応する遷移枝６５が出ているか否かを判定する。中間ノード６１ｎ５から出力する遷移枝６５はまだ存在しない。次の第３フィールドは、２番目のレコードの最後のフィールドであるので、サーバＣＰＵ１２は、中間ノード６１ｎ５から出力する遷移枝６５および受容ノード６３を追加する。サーバＣＰＵ１２は、追加した遷移枝６５に、２番目のレコードの第３フィールドに記録されたデータに対応するラベル「性：＊」を付与する。サーバＣＰＵ１２は、受容ノード６３ｎ６に第２レコードに記録された匿名化済個票「１９８，２０，＊」を関連付ける。
【００５０】
サーバＣＰＵ１２は、以後同様にして匿名化済データＤＢ３１からレコードを取得し、親ノード６０から順番に対応する遷移枝６５の有無を判定し、無い場合には遷移枝６５およびノードを階層木に追加する。サーバＣＰＵ１２が、匿名化済データＤＢ３１に含まれるすべてのレコードを処理することにより、図４に示す階層木が完成する。
【００５１】
図５は、匿名化オートマトン３２を作成する第２の段階が終了した状態を示す。サーバＣＰＵ１２は、第２の段階では、図４を使用して説明した階層木から、不要なノードを削除する。具体的には、図４の階層木から中間ノード６１ｎ５および中間ノード６１ｎ９が削除されている。
【００５２】
中間ノード６１の削除について説明する。一般化符号「＊」の遷移枝６５のみが出力している中間ノード６１は、匿名化オートマトン３２による処理に寄与していない。サーバＣＰＵ１２は、一般化符号「＊」の遷移枝６５のみが出力している中間ノード６１を階層木から削除する。サーバＣＰＵ１２は、削除した中間ノード６１に入力していた遷移枝６５を、削除した中間ノード６１から出力していた遷移枝６５の先の中間ノード６１または受容ノード６３に接続する。
【００５３】
さらに具体的に説明する。サーバＣＰＵ１２は、各中間ノード６１から出力している遷移枝６５のラベルが一般化符号「＊」のみであるか否かを順次判定する。たとえば中間ノード６１ｎ５からは、「性：＊」の遷移枝６５のみが出力している。サーバＣＰＵ１２は、中間ノード６１ｎ５および「性：＊」の遷移枝６５を消去する。サーバＣＰＵ１２は、中間ノード６１ｎ５に入力していた「年：２０」のラベルが付与された遷移枝６５を、「性：＊」の遷移枝６５と接続していた受容ノード６３ｎ６に接続する。
【００５４】
図６は、匿名化オートマトン３２を作成する第３の段階を説明する説明図である。第３の段階では、サーバＣＰＵ１２はバイパス枝６７（図７参照）を作成する。バイパス枝６７は、一部の中間ノード６１から出力し、別の中間ノード６１または受容ノード６３に入力する。
【００５５】
サーバＣＰＵ１２は、図５を使用して説明した作成途中の匿名化オートマトン３２からノード列６９を作成する。サーバＣＰＵ１２は、ノード列６９に１から始まる連番で番号を付与する。また、サーバＣＰＵ１２は、各ノード列６９内のノードに、親ノード６０側を１として連番で番号を付与する。
【００５６】
１つのノード列６９は、親ノード６０と、一つの受容ノード６３と、両者の間の中間ノード６１とを含む。サーバＣＰＵ１２は、受容ノード６３と同じ数のノード列６９を作成する。サーバＣＰＵ１２は、一のノード列６９に含まれる中間ノード６１から出力し、他のノード列６９に含まれる中間ノード６１に入力するバイパス枝６７を作成する。
【００５７】
以後の説明では、サーバＣＰＵ１２が、左端のノード列６９から連番で番号を付与した場合を例にして説明する。
【００５８】
サーバＣＰＵ１２は、第１ノード列６９の第１ノードである親ノード６０から処理を開始する。サーバＣＰＵ１２は、親ノード６０が受容ノード６３であるか否かを判定する。サーバＣＰＵ１２は、親ノード６０は受容ノード６３では無いと判定する。サーバＣＰＵ１２は、親ノード６０から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。親ノード６０から、一般化符号「＊」のラベルを付与された遷移枝６５が出力しているので、サーバＣＰＵ１２は第１ノード列６９６の第２ノードである。中間ノード６１ｎ２を次の処理対象とする。
【００５９】
サーバＣＰＵ１２は、中間ノード６１ｎ２が受容ノード６３であるか否かを判定する。サーバＣＰＵ１２は、中間ノード６１ｎ２は受容ノード６３では無いと判定する。サーバＣＰＵ１２は、中間ノード６１ｎ２から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。中間ノード６１ｎ２から、一般化符号「＊」のラベルを付与された遷移枝６５が出力しているので、サーバＣＰＵ１２は第１ノード列６９の第３ノードである、中間ノード６１ｎ３を次の処理対象とする。
【００６０】
サーバＣＰＵ１２は、中間ノード６１ｎ３が受容ノード６３であるか否かを判定する。サーバＣＰＵ１２は、中間ノード６１ｎ３は受容ノード６３では無いと判定する。サーバＣＰＵ１２は、中間ノード６１ｎ３から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。中間ノード６１ｎ３から、一般化符号「＊」のラベルを付与された遷移枝６５は出力していないので、サーバＣＰＵ１２は中間ノード６１ｎ３から出力するバイパス枝６７の作成可否を判定する処理を開始する。
【００６１】
中間ノード６１ｎ３から出力するバイパス枝６７の作成可否を判定する処理について説明する。処理中の中間ノード６１ｎ３は親ノード６０では無いので、サーバＣＰＵ１２は第１ノード列６９内の一つ前のノードである中間ノード６１ｎ２を判定対象とする。
【００６２】
サーバＣＰＵ１２は、中間ノード６１ｎ２から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。中間ノード６１ｎ２から、一般化符号「＊」のラベルを付与された遷移枝６５が出力しているので、サーバＣＰＵ１２は、その遷移枝６５が入力する中間ノード６１ｎ７が、第１ノード列６９に含まれているか否かを判定する。中間ノード６１ｎ７は、第１ノード列６９に含まれていないので、サーバＣＰＵ１２は、中間ノード６１ｎ３から出力して、中間ノード６１ｎ７に向かうバイパス枝６７を作成する。以上によりサーバＣＰＵ１２は、中間ノード６１ｎ３の処理を終了する。サーバＣＰＵ１２は第１ノード列６９の第４ノードである、受容ノード６３ｎ４を次の処理対象とする。
【００６３】
受容ノード６３ｎ４は、第１ノード列６９の最後のノードであるので、サーバＣＰＵ１２は、第２ノード列６９の処理に移動する。サーバＣＰＵ１２は、第２ノード列６９の第１ノードである親ノード６０から処理を開始する。親ノード６０および中間ノード６１ｎ２の処理は、第１ノード列６９で説明した処理と同一であるので、説明を省略する。なお、サーバＣＰＵ１２は、一度処理したノードを記憶しておき、２回目以降の処理を省略しても良い。サーバＣＰＵ１２は第２ノード列６９の第３ノードである。受容ノード６３ｎ６を次の処理対象とする。
【００６４】
受容ノード６３ｎ４は、第２ノード列６９の最後のノードであるので、サーバＣＰＵ１２は、第３ノード列６９の処理に移動する。サーバＣＰＵ１２は、第３ノード列６９の第１ノードである親ノード６０から処理を開始する。親ノード６０および中間ノード６１ｎ２の処理は、第１ノード列６９で説明した処理と同一であるので、説明を省略する。サーバＣＰＵ１２は第３ノード列６９の第３ノードである。中間ノード６１ｎ７を次の処理対象とする。
【００６５】
サーバＣＰＵ１２は、中間ノード６１ｎ７が受容ノード６３であるか否かを判定する。サーバＣＰＵ１２は、中間ノード６１ｎ７は受容ノード６３では無いと判定する。サーバＣＰＵ１２は、中間ノード６１ｎ７から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。中間ノード６１ｎ７から、一般化符号「＊」のラベルを付与された遷移枝６５が出力していないので、サーバＣＰＵ１２は中間ノード６１ｎ７から出力するバイパス枝６７の作成可否を判定する処理を開始する。
【００６６】
中間ノード６１ｎ７から出力するバイパス枝６７の作成可否を判定する処理について説明する。処理中の中間ノード６１ｎ７は親ノード６０では無いので、サーバＣＰＵ１２は第３ノード列６９内の一つ前のノードである中間ノード６１ｎ２を判定対象とする。
【００６７】
サーバＣＰＵ１２は、中間ノード６１ｎ２から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。中間ノード６１ｎ２から、一般化符号「＊」のラベルを付与された遷移枝６５が出力しているので、サーバＣＰＵ１２は、その遷移枝６５が入力する中間ノード６１ｎ７が、第３ノード列６９に含まれているか否かを判定する。中間ノード６１ｎ７は、第３ノード列６９に含まれているので、サーバＣＰＵ１２は、第３ノード列６９内のもう一つ前のノードである親ノード６０を判定対象とする。
【００６８】
サーバＣＰＵ１２は、親ノード６０から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。親ノード６０から、一般化符号「＊」のラベルを付与された遷移枝６５が出力しているので、サーバＣＰＵ１２は、その遷移枝６５が入力する中間ノード６１ｎ１２が、第３ノード列６９に含まれているか否かを判定する。中間ノード６１ｎ１２は、第３ノード列６９に含まれていないので、サーバＣＰＵ１２は、中間ノード６１ｎ７から出力して、中間ノード６１ｎ１２に向かうバイパス枝６７を作成する。以上によりサーバＣＰＵ１２は、中間ノード６１ｎ７の処理を終了する。サーバＣＰＵ１２は第３ノード列６９の第４ノードである、受容ノード６３ｎ８を次の処理対象とする。
【００６９】
バイパス枝６７の作成を断念する例について、第５ノード列６９を例にして説明する。サーバＣＰＵ１２は、第５ノード列６９の第１ノードである親ノード６０から処理を開始する。親ノード６０の処理は、第１ノード列６９で説明した処理と同一であるので、説明を省略する。サーバＣＰＵ１２は第５ノード列６９内の第２ノードである、中間ノード６１ｎ１２を次の処理対象とする。
【００７０】
サーバＣＰＵ１２は、中間ノード６１ｎ１２が受容ノード６３であるか否かを判定する。サーバＣＰＵ１２は、中間ノード６１ｎ１２は受容ノード６３では無いと判定する。サーバＣＰＵ１２は、中間ノード６１ｎ１２から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。中間ノード６１ｎ１２から、一般化符号「＊」のラベルを付与された遷移枝６５が出力していないので、サーバＣＰＵ１２は中間ノード６１ｎ１２から出力するバイパス枝６７の作成可否を判定する処理を開始する。
【００７１】
中間ノード６１ｎ１２から出力するバイパス枝６７の作成可否を判定する処理について説明する。処理中の中間ノード６１ｎ１２は親ノード６０では無いので、サーバＣＰＵ１２は第５ノード列６９内の一つ前のノードである親ノード６０を判定対象とする。
【００７２】
サーバＣＰＵ１２は、親ノード６０から一般化符号「＊」のラベルを付与された遷移枝６５またはバイパス枝６７が出力しているか否かを判定する。親ノード６０から、一般化符号「＊」のラベルを付与された遷移枝６５が出力しているので、サーバＣＰＵ１２は、その遷移枝６５が入力する中間ノード６１ｎ１２が、第５ノード列６９に含まれているか否かを判定する。中間ノード６１ｎ１２は、第５ノード列６９に含まれているので、サーバＣＰＵ１２は、第５ノード列６９から中間ノード６１ｎ１２に向かうバイパス枝６７を作成できないと判定する。
【００７３】
判定対象は親ノード６０であるので、サーバＣＰＵ１２はバイパス枝６７を作成せずに中間ノード６１ｎ１２の処理を終了する。
【００７４】
以上の処理を繰り返すことにより、サーバＣＰＵ１２は一のノード列６９から他のノード列６９に遷移するバイパス枝６７を作成する。すべてのノードの処理が完了することにより、匿名化オートマトン３２が完成する。
【００７５】
図７は、完成した匿名化オートマトン３２を示す。匿名化オートマトン３２は、親ノード６０、中間ノード６１および受容ノード６３を有する。親ノード６０、中間ノード６１および受容ノード６３は実線で示す遷移枝６５および破線で示すバイパス枝６７で接続されている。中間ノード６１は、入力個票を処理する途中過程を示す。遷移枝６５およびバイパス枝６７は、入力個票を処理する経路を示す。遷移枝６５およびバイパス枝６７は、本実施の形態の判定枝の例である。
【００７６】
親ノード６０からは１本以上の遷移枝６５が出力する。中間ノード６１には、１本の遷移枝６５が入力する。中間ノード６１からは１本以上の遷移枝６５が出力する。受容ノード６３には、１本の遷移枝６５が入力する。受容ノード６３から出力する遷移枝６５は存在しない。バイパス枝６７は、一部の中間ノード６１から出力し、別の中間ノード６１または受容ノード６３に入力する。
【００７７】
匿名化オートマトン３２を使用して、サーバＣＰＵ１２が入力個票を処理する方法の概略を説明する。外部から親ノード６０に入力個票が入力される。入力個票は、遷移枝６５、バイパス枝６７および中間ノード６１を経由して、受容ノード６３に到達する。遷移枝６５およびバイパス枝６７を選択する条件は、各々の矢印の近傍のラベルに表示されている。到達した受容ノード６３は、入力個票を匿名化した結果を示す。受容ノード６３は、匿名化済データＤＢ３１に記録されている匿名化済個票のいずれか一つと対応している。
【００７８】
図８は、ストリーミングデータの例を示す説明図である。ストリーミングデータは、第２クライアント２５が逐次生成してネットワークに送出する入力個票である。図８の１行が、１個の入力個票を示す。サーバＣＰＵ１２は、通信部１５を介して入力個票を逐次受信する。サーバＣＰＵ１２が入力個票を受信するタイミングおよび受信する入力個票の数は定まっていない。
【００７９】
図９は、匿名化処理後のストリーミングデータの例を示す説明図である。図９は、図８のデータを、図７を使用して説明した匿名化オートマトン３２を使用して匿名化処理した例を示す。サーバ１１が匿名化オートマトン３２を使用して行う具体的な処理の例を説明する。
【００８０】
サーバＣＰＵ１２が、図８の１行目に示す「１９８，２０，女」の入力個票を第２クライアント２５から取得した場合を例にして説明する。サーバＣＰＵ１２は、入力個票を親ノード６０に入力する。親ノード６０からは、郵便番号によって分かれる遷移枝６５が３本出ている。
【００８１】
入力個票の郵便番号は「１９８」であるので、サーバＣＰＵ１２は、郵便番号が１９８の遷移枝６５に沿って遷移する中間ノード６１ｎＢおよび郵便番号を特定しない一般化符号「＊」の遷移枝６５に沿って遷移する中間ノード６１ｎＦに遷移可能であると判定する。中間ノード６１ｎＢに遷移可能なデータの範囲の方が、中間ノード６１ｎＦに遷移可能なデータの範囲よりも狭いので、サーバＣＰＵ１２は、中間ノード６１ｎＢに向かう遷移枝６５を選択して、中間ノード６１ｎＢに処理を移す。なお、以後の説明では、一般化符号「＊」の遷移枝６５と、それ以外の遷移枝６５とを選択可能である場合の判定については記載を省略する。
【００８２】
中間ノード６１ｎＢからは、年齢によって分かれる遷移枝６５が３本出ている。入力個票の年齢は２０であるので、サーバＣＰＵ１２は「１９８，２０，＊」の受容ノード６３に向かう遷移枝６５を選択する。受容ノード６３に到達したので、サーバＣＰＵ１２は、「１９８，２０，女」の入力個票を匿名化処理した結果は、「１９８，２０，＊」であると判定する。
【００８３】
サーバＣＰＵ１２が、図８の２行目に示す「１９８，３０，男」の入力個票を第２クライアント２５から取得した場合を例にして説明する。サーバＣＰＵ１２は、入力個票を親ノード６０に入力する。親ノード６０からは、郵便番号によって分かれる遷移枝６５が３本出ている。入力個票の郵便番号は「１９８」であるので、サーバＣＰＵ１２は中間ノード６１ｎＢに向かう遷移枝６５を選択して、中間ノード６１ｎＢに処理を移す。
【００８４】
中間ノード６１ｎＢからは、年齢によって分かれる遷移枝６５が３本出ている。入力個票の年齢は３０であるので、一般化符号「＊」以外の２本の遷移枝６５のいずれのラベルとも一致しない。サーバＣＰＵ１２は、一般化符号である「＊」にあてはまると判定して、中間ノード６１ｎＤに向かう遷移枝６５を選択する。
【００８５】
中間ノード６１ｎＤからは、性別によって分かれる遷移枝６５が２本出ている。入力個票の性別は男であるので、サーバＣＰＵ１２は、「１９８，＊，男」の受容ノード６３に向かう遷移枝６５を選択する。受容ノード６３に到達したので、サーバＣＰＵ１２は、「１９８，３０，男」の入力個票を匿名化処理した結果は、「１９８，＊，男」であると判定する。
【００８６】
サーバＣＰＵ１２が、図８の５行目に示す「１９８，６０，女」の入力個票を第２クライアント２５から取得した場合を例にして説明する。サーバＣＰＵ１２は、入力個票を親ノード６０に入力する。親ノード６０からは、郵便番号によって分かれる遷移枝６５が３本出ている。入力個票の郵便番号は「１９８」であるので、サーバＣＰＵ１２は中間ノード６１ｎＢに向かう遷移枝６５を選択して、中間ノード６１ｎＢに処理を移す。
【００８７】
中間ノード６１ｎＢからは、年齢によって分かれる遷移枝６５が３本出ている。入力個票の年齢は６０であるので、３本の遷移枝６５のいずれのラベルとも一致しない。サーバＣＰＵ１２は、一般化符号「＊」にあてはまると判定して、中間ノード６１ｎＤに向かう遷移枝６５を選択する。
【００８８】
中間ノード６１ｎＤからは、性別によって分かれる遷移枝６５が２本出ている。入力個票の性別は女であるので、２本の遷移枝６５のいずれのラベルとも一致しない。サーバＣＰＵ１２は、一般化符号「＊」にあてはまると判定して、中間ノード６１ｎＦに向かうバイパス枝６７を選択する。
【００８９】
中間ノード６１ｎＦからは、年齢によって分かれる遷移枝６５が２本出ている。入力個票の年齢は６０であるので、２本の遷移枝６５のいずれのラベルとも一致しない。また、中間ノード６１ｎＤからは、「＊」のラベルの遷移枝６５およびバイパス枝６７は出力していない。したがって、サーバＣＰＵ１２は、入力個票を受容ノード６３に当てはめることはできない。サーバＣＰＵ１２は、「１９８，６０，女」の入力個票を匿名化処理した結果は、すべての項目を一般化符号に置換した「＊，＊，＊」であると判定する。以後の説明では、すべての項目を一般化符号に置換した個票を置換個票という。
【００９０】
以上に説明した匿名化オートマトン３２による処理を簡単にまとめる。サーバＣＰＵ１２は、取得した入力個票を親ノード６０に入力する。サーバＣＰＵ１２は、匿名化オートマトン３２の遷移枝６５およびバイパス枝６７に沿ってノードを遷移させる。以後の説明では、遷移枝６５およびバイパス枝６７をまとめて判定枝と記載する。
【００９１】
入力個票と一致する判定枝が無く、「＊」の判定枝が出ている場合には、サーバＣＰＵ１２は「＊」の判定枝を選択する。入力個票と一致する判定枝が無く、「＊」の判定枝も無い場合には、サーバＣＰＵ１２は置換個票が匿名化処理の結果であると判定する。処理が受容ノード６３に到達した場合には、サーバＣＰＵ１２は受容ノード６３の内容が入力拠標を匿名化処理した結果であると判定する。
【００９２】
サーバＣＰＵ１２は、第２クライアント２５から逐次送信される入力個票を受信して、以上に説明した匿名化処理を行う。サーバＣＰＵ１２は匿名化処理の結果である、出力個票を第１クライアント２１に逐次送信する。
【００９３】
図１０は、プログラムの処理の流れを示すフローチャートである。図１０に示すプログラムは、匿名化済みのデータを取得して匿名化オートマトン３２を作成し、ストリーミングデータを匿名化して出力するプログラムである。図１０を使用して、本実施の形態のプログラムの処理の流れを説明する。
【００９４】
サーバＣＰＵ１２は、通信部１５を介してネットワークから匿名化済データＤＢ３１を取得して（ステップＳ５０１）、補助記憶装置１４に記憶する。なお、匿名化済データＤＢ３１は、あらかじめ補助記憶装置１４に記憶されていても良い。
【００９５】
サーバＣＰＵ１２は、階層木作成のサブルーチンを起動する（ステップＳ５０２）。階層木作成のサブルーチンは、匿名化済データＤＢ３１に記録された匿名化済個票に基づいて階層を有する木構造である階層木を作成するサブルーチンである。階層木作成のサブルーチンは、匿名化オートマトン３２を作成する第１の段階のサブルーチンである。階層木作成のサブルーチンの処理の流れは後述する。
【００９６】
サーバＣＰＵ１２は、ノード削減のサブルーチンを起動する（ステップＳ５０３）。ノード削減のサブルーチンは、階層を有する木構造から不要な中間ノード６１および親ノード６０を削除して、中間ノード６１の削減および親ノード６０の変更を行うサブルーチンである。ノード削減のサブルーチンは、匿名化オートマトン３２を作成する第２の段階のサブルーチンである。ノード削減のサブルーチンの処理の流れは後述する。
【００９７】
サーバＣＰＵ１２は、バイパス追加のサブルーチンを起動する（ステップＳ５０４）。バイパス追加のサブルーチンは、作成途中の匿名化オートマトン３２にバイパス枝６７を追加して、匿名化オートマトン３２を完成させるサブルーチンである。バイパス追加のサブルーチンは、匿名化オートマトン３２を作成する第３の段階のサブルーチンである。バイパス追加のサブルーチンの処理の流れは後述する。
【００９８】
サーバＣＰＵ１２は、完成したオートマトン３２を補助記憶装置１４に保存する（ステップＳ５０５）。
【００９９】
第２クライアント２５のＣＰＵは、第２ユーザが入力等を行うことにより生成した入力個票を取得する（ステップＳ６０１）。第２クライアント２５のＣＰＵは取得した入力個票をサーバ１１に送信する（ステップＳ６０２）。
【０１００】
サーバＣＰＵ１２は、入力個票を受信する（ステップＳ５１０）。サーバＣＰＵ１２は、匿名化のサブルーチンを起動する（ステップＳ５１１）。匿名化のサブルーチンは、入力個票をステップＳ５０５で保存したオートマトン３２に入力して、匿名化するサブルーチンである。匿名化のサブルーチンの処理の流れは後述する。
【０１０１】
サーバＣＰＵ１２は、匿名化した出力個票を第１クライアント２１のＣＰＵに送信する（ステップＳ５１２）。第１クライアント２１のＣＰＵは、受信した出力個票を保存する（ステップＳ７０１）。
【０１０２】
サーバＣＰＵ１２は、処理を終了するか否かを判定する（ステップＳ５１５）。処理を終了する場合とは、たとえばネットワークを介してストリーミングデータの処理を終了するという入力を受け付けた場合である。
【０１０３】
処理を終了しないと判定した場合（ステップＳ５１５でＮＯ）、サーバＣＰＵ１２はステップＳ５１０に戻る。処理を終了すると判定した場合（ステップＳ５１５でＹＥＳ）、サーバＣＰＵ１２は処理を終了する。
【０１０４】
図１１は、階層木作成のサブルーチンの処理の流れを示すフローチャートである。階層木作成のサブルーチンは、匿名化済データＤＢ３１に記録された匿名化済個票に基づいて階層を有する木構造を作成するサブルーチンである。図４を使用して説明した階層木は、階層木作成のサブルーチンが図３を使用して説明した匿名化済データＤＢ３１を処理することにより作成した階層木である。
【０１０５】
図１１を使用して、階層木作成の処理の流れを説明する。なお、サーバＣＰＵ１２は、補助記憶装置１４または主記憶装置１３上に階層木を作成および記憶する。
【０１０６】
サーバＣＰＵ１２は、親ノード６０を作成する（ステップＳ８０１）。サーバＣＰＵ１２は、カウンタＩを初期値１に設定する（ステップＳ８０２）。サーバＣＰＵ１２は、変数Ｎを初期値１に設定する（ステップＳ８０３）。サーバＣＰＵ１２は、親ノード６０に１番の番号を付与する。
【０１０７】
サーバＣＰＵ１２は、匿名化済データＤＢ３１からＩ番目のレコードを取得する（ステップＳ８０４）。サーバＣＰＵ１２はカウンタＪを初期値１に設定する（ステップＳ８０５）。
【０１０８】
サーバＣＰＵ１２は、作成中の階層木の第Ｎノードから、ステップＳ８０４で取得したレコードの第Ｊフィールドに記録された階層を示す遷移枝６５が出ているか否かを判定する（ステップＳ８０６）。該当する遷移枝６５が無いと判定した場合には（ステップＳ８０６でＮＯ）、サーバＣＰＵ１２は作成中の階層木に、処理中の匿名化済個票に対応する遷移枝６５およびノードを追加する（ステップＳ８０７）。サーバＣＰＵ１２は、追加したノードに連番の番号を付与する。
【０１０９】
該当する遷移枝６５があると判定した場合（ステップＳ８０６でＹＥＳ）、サーバＣＰＵ１２は変数Ｎを該当する遷移枝６５の先のノードの番号に設定する（ステップＳ８０８）。またステップＳ８０７でノード６１を追加した場合、サーバＣＰＵ１２は変数Ｎを追加したノードの番号に設定する（ステップＳ８０８）。
【０１１０】
サーバＣＰＵ１２は、ステップＳ８０４で取得したレコードのすべてのフィールドの処理を終了したか否かを判定する（ステップＳ８０９）。処理が終了していないと判定した場合（ステップＳ８０９でＮＯ）、サーバＣＰＵ１２はカウンタＪに１を加算する（ステップＳ８１２）。その後、サーバＣＰＵ１２はステップＳ８０６に戻る。
【０１１１】
すべてのフィールドの処理が終了したと判定した場合（ステップＳ８０９でＹＥＳ）、サーバＣＰＵ１２は、匿名化済データＤＢ３１のすべてのレコードの処理が終了したか否かを判定する（ステップＳ８１０）。処理が終了していないと判定した場合（ステップＳ８１０でＮＯ）、サーバＣＰＵ１２はカウンタＩに１を加算する（ステップＳ８１１）。その後、サーバＣＰＵ１２はステップＳ８０３に戻る。
【０１１２】
すべてのレコードの処理が完了したと判定した場合（ステップＳ８１０でＹＥＳ）、サーバＣＰＵ１２は処理を終了する。なお、サーバＣＰＵ１２がステップＳ８０７で追加したノードのうち、出力する遷移枝６５を有するノードは中間ノード６１であり、出力する遷移枝６５を有さないノードは受容ノード６３である。
【０１１３】
図１２は、ノード削減のサブルーチンの処理の流れを示すフローチャートである。ノード削減のサブルーチンは、階層を有する木構造から不要な中間ノード６１および親ノード６０を削除して、中間ノード６１の削減および親ノード６０の変更を行うサブルーチンである。図１２を使用して、ノード削減のサブルーチンの処理の流れを説明する。ノード削減のサブルーチンは、たとえば図４を使用して説明した階層木を、図５を使用して説明したように変更する。
【０１１４】
サーバＣＰＵ１２はカウンタＮを初期値１に設定する（ステップＳ８２１）。サーバＣＰＵ１２は、第Ｎノードから出力する遷移枝６５のラベルが一般化符号「＊」のみであるか否かを判定する（ステップＳ８２２）。
【０１１５】
一般化符号「＊」の遷移枝６５のみであると判定した場合（ステップＳ８２２でＹＥＳ）、サーバＣＰＵ１２は第Ｎノードを削除する（ステップＳ８２３）。サーバＣＰＵ１２は、削除した中間ノード６１に入力していた遷移枝６５を、削除した中間ノード６１の後ろの中間ノード６１または受容ノード６３に接続する。
【０１１６】
一般化符号「＊」の遷移枝６５のみでは無いと判定した場合（ステップＳ８２２でＮＯ）およびステップＳ８２３の終了後、サーバＣＰＵ１２はすべての中間ノード６１の処理を終了したか否かを判定する（ステップＳ８２４）。終了していないと判定した場合（ステップＳ８２４でＮＯ）、サーバＣＰＵ１２はカウンタＮに１を加算する（ステップＳ８２５）。その後、サーバＣＰＵ１２はステップＳ８２２に戻る。
【０１１７】
終了したと判定した場合（ステップＳ８２４でＹＥＳ）、サーバＣＰＵ１２は処理を終了する。
【０１１８】
図１３および図１４は、バイパス追加のサブルーチンの処理の流れを示すフローチャートである。バイパス追加のサブルーチンは、作成途中の匿名化オートマトン３２にバイパス枝６７を追加して、匿名化オートマトン３２を完成させるサブルーチンである。図６、図１３および図１４を使用して、バイパス追加のサブルーチンの処理の流れを説明する。
【０１１９】
サーバＣＰＵ１２はカウンタＭを初期値１に設定する（ステップＳ８３１）。サーバＣＰＵ１２はカウンタＫを初期値１に設定する（ステップＳ８３２）。
【０１２０】
サーバＣＰＵ１２は、第Ｍノード列６９の第Ｋノードが受容ノード６３であるか否かを判定する（ステップＳ８３３）。受容ノード６３では無いと判定した場合（ステップＳ８３３でＮＯ）、第Ｍノード列の第Ｋノードから一般化符号「＊」の遷移枝６５またはバイパス枝６７が出力しているか否かを判定する（ステップＳ８３４）。一般化符号「＊」の遷移枝６５またはバイパス枝６７が出力していないと判定した場合（ステップＳ８３４でＮＯ）、サーバＣＰＵ１２は変数ＡにＫを代入する（ステップＳ８３５）。
【０１２１】
サーバＣＰＵ１２は、変数Ａが１であるか否かを判定する（ステップＳ８３６）。ここで、変数Ａが１である場合は、第Ｍノード列６９の第Ａノードが親ノード６０であることを意味する。変数Ａが１では無いと判定した場合（ステップＳ８３６でＮＯ）、サーバＣＰＵ１２は変数Ａから１を減算する（ステップＳ８３７）。
【０１２２】
サーバＣＰＵ１２は、第Ｍノード列６９の第Ａノードから、一般化符号「＊」の遷移枝６５またはバイパス枝６７が出力しているか否かを判定する（ステップＳ８３８）。一般化符号「＊」の遷移枝６５またはバイパス枝６７が出力していないと判定した場合（ステップＳ８３８でＮＯ）、サーバＣＰＵ１２はステップＳ８３６に戻る。
【０１２３】
一般化符号「＊」の遷移枝６５またはバイパス枝６７が出力していると判定した場合（ステップＳ８３８でＹＥＳ）、サーバＣＰＵ１２は変数Ｎを一般化符号「＊」の遷移枝６５が入力する中間ノード６１の番号に設定する（ステップＳ８３９）。
【０１２４】
サーバＣＰＵ１２は、第Ｍノード列６９が第Ｎ中間ノード６１を含むか否かを判定する（ステップＳ８４０）。第Ｍノード列６９が第Ｎ中間ノード６１を含むと判定した場合（ステップＳ８４０でＹＥＳ）、サーバＣＰＵ１２はステップＳ８３６に戻る。
【０１２５】
第Ｍノード列６９が第Ｎ中間ノード６１を含まないと判定した場合（ステップＳ８４０でＮＯ）、サーバＣＰＵ１２は第Ｍノード列６９の第Ｋノードから、第Ｎ中間ノード６１に向かうバイパス枝６７を作成中のオートマトン３２に追加する（ステップＳ８４１）。バイパス枝６７が選択される条件は、第Ｋノードから出力している遷移枝６５と同じ項目のデータが、一般化符号「＊」であることである。
【０１２６】
第Ｍノード列６９の第Ｋノードが受容ノード６３である場合（ステップＳ８３３でＹＥＳ）、サーバＣＰＵ１２は第Ｍノード列６９の最終ノードまでの処理が完了したか否かを判定する（ステップＳ８４２）。第Ｍノード列６９の第Ｋノードから一般化符号「＊」の遷移枝６５またはバイパス枝６７が出力している場合（ステップＳ８３４でＹＥＳ）も、サーバＣＰＵ１２は第Ｍノード列６９の最終ノードまでの処理が完了したか否かを判定する（ステップＳ８４２）。変数Ａが１である場合（ステップＳ８３６でＹＥＳ）およびステップＳ８４１の終了後も、サーバＣＰＵ１２は第Ｍノード列６９の最終ノードまでの処理が完了したか否かを判定する（ステップＳ８４２）。
【０１２７】
処理が完了していないと判定した場合（ステップＳ８４２でＮＯ）、サーバＣＰＵ１２はカウンタＫに１を加算する（ステップＳ８４３）。その後、サーバＣＰＵ１２はステップＳ８３３に戻る。
【０１２８】
処理が完了したと判定した場合（ステップＳ８４２でＹＥＳ）、サーバＣＰＵ１２はすべてのノード列６９の処理が終了したか否かを判定する（ステップＳ８４４）。終了していないと判定した場合（ステップＳ８４４でＮＯ）、サーバＣＰＵ１２はカウンタＭに１を加算する（ステップＳ８４５）。その後、サーバＣＰＵ１２はステップＳ８３２に戻る。
【０１２９】
終了していると判定した場合（ステップＳ８４４でＹＥＳ）、サーバＣＰＵ１２は処理を終了する。
【０１３０】
図１５は、匿名化のサブルーチンの処理の流れを示すフローチャートである。匿名化のサブルーチンは、入力個票をステップＳ５０５で保存したオートマトン３２に入力して、匿名化するサブルーチンである。図１５を使用して、匿名化のサブルーチンの処理の流れを説明する。
【０１３１】
サーバＣＰＵ１２は、変数Ｎを初期値１に設定する（ステップＳ８６１）。サーバＣＰＵ１２は、第Ｎノードから入力個票に対応する遷移枝６５またはバイパス枝６７が出力しているか否かを判定する（ステップＳ８６２）。
【０１３２】
出力していないと判定した場合（ステップＳ８６２でＮＯ）、サーバＣＰＵ１２はすべての項目が一般化符号「＊」である置換個票を出力データに設定する（ステップＳ８６３）。サーバＣＰＵ１２は、その後処理を終了する。
【０１３３】
出力していると判定した場合（ステップＳ８６２でＹＥＳ）、サーバＣＰＵ１２は変数Ｎを出力している遷移枝６５の先のノードの番号に設定する（ステップＳ８７１）。この際、サーバＣＰＵ１２は、一般化符号「＊」が指定されている遷移枝６５よりも具体的なデータが指定されている遷移枝６５を優先する。
【０１３４】
サーバＣＰＵ１２は、第Ｎノードが受容ノード６３であるか否かを判定する（ステップＳ８７２）。受容ノード６３では無いと判定した場合（ステップＳ８７２でＮＯ）、サーバＣＰＵ１２はステップＳ８６２に戻る。
【０１３５】
受容ノード６３であると判定した場合（ステップＳ８７２でＹＥＳ）、サーバＣＰＵ１２はその受容ノード６３の内容を有する個票を出力データに設定する（ステップＳ８７３）。その後、サーバＣＰＵ１２は処理を終了する。
【０１３６】
本実施の形態によると、匿名化オートマトン３２を使用することにより、ストリーミングデータである入力個票を１個ずつ逐次匿名化することができる。匿名化オートマトン３２の出力は、既存の匿名化済データに含まれている匿名化済個票と一致しているので、入力個票は匿名化される。
【０１３７】
ステップＳ８７１で、一般化符号「＊」が指定されている遷移枝６５よりも具体的なデータが指定されている遷移枝６５を優先することにより、匿名性を確保できる範囲で狭い定義域に入力個票を一般化する。また、バイパス枝６７を使用することにより、適切な受容ノード６３に到達しない場合に別のノード列６９を用いた一般化を試みる。
【０１３８】
本実施の形態によると、過度な一般化を避けながら匿名性を確保することができる。したがって、ストリーミングデータの入力個票に対して、二次利用に適した匿名化を行うことができる。
【０１３９】
なお、匿名化済データＤＢ３１および匿名化オートマトン３２は、ネットワークで接続された外部の記憶装置に記憶されていても良い。
【０１４０】
匿名化済データＤＢ３１を作成する際に匿名化する手法は一般化に限定しない。また、匿名化済データＤＢ３１は、ｋ−匿名性を有するＤＢに限定しない。任意の匿名化手法を用いて、任意の水準の匿名性を有する匿名化済データＤＢ３１を使用することができる。
【０１４１】
［実施の形態２］
実施の形態２は、匿名化する際の項目の優先順位を変更することが可能な情報処理システム１０に関する。なお、実施の形態１と共通する部分については、説明を省略する。
【０１４２】
図１６は、実施の形態２の匿名化処理後のストリーミングデータの例を示す説明図である。図１７は、実施の形態２の匿名化オートマトン３２を示す説明図である。図１６は、図８に示したストリーミングデータを図１７に示す匿名化オートマトン３２を使用して匿名化した結果を示す。
【０１４３】
図１６に示す本実施の形態により匿名化したストリーミングデータと、図９に示す実施の形態１により匿名化したストリーミングデータとの相違点について説明する。本実施の形態では、元データの性別のデータを一般化せずに出力することを優先している。一方、実施の形態１では郵便番号のデータを一般化せずに出力することを優先している。このように、匿名化オートマトン３２を変更することにより、どの項目を優先的に出力するかを変更することができる。なお、性別と郵便番号のどちらを優先することが望ましいかは、匿名化済データを二次利用する目的によって異なる。
【０１４４】
図１８は、実施の形態２のプログラムの処理の流れを示すフローチャートである。図１８を使用して、本実施の形態のプログラムの処理の流れを説明する。
【０１４５】
サーバＣＰＵ１２は、通信部１５を介してネットワークから匿名化済データＤＢ３１を取得して（ステップＳ５０１）、補助記憶装置１４に記憶する。サーバＣＰＵ１２は、あらかじめ補助記憶装置１４に記憶されている項目の優先順位を取得する（ステップＳ５３１）。なお、サーバＣＰＵ１２はネットワークを介して第１クライアント２１等から項目の優先順位を取得しても良い。
【０１４６】
サーバＣＰＵ１２は、ステップＳ５３１で取得した優先順位にしたがって、匿名化済データＤＢ３１のフィールドを入れ替える（ステップＳ５３２）。たとえば、サーバＣＰＵ１２は、最も優先順位が高い項目が記録されたフィールドを第１フィールドに、二番目に優先順位が高い項目が記録されたフィールドを第２フィールドにする。
【０１４７】
サーバＣＰＵ１２は、階層木作成のサブルーチンを起動する（ステップＳ５０２）。以後の処理は、図１０を使用して説明した実施の形態１と同一であるので、説明を省略する。
【０１４８】
前述の図１７は、サーバＣＰＵ１２がステップＳ５３１で性別、年齢、郵便番号の順序の優先順位を取得して作成したオートマトンを示す。
【０１４９】
本実施の形態によると、二次利用の目的に合わせてストリーミングデータを匿名化する情報処理装置を提供することができる。
【０１５０】
［実施の形態３］
実施の形態３は、一部の項目のみを匿名化する情報処理システム１０に関する。なお、実施の形態１と共通する部分については、説明を省略する。
【０１５１】
図１９は、実施の形態３のストリーミングデータの例を示す説明図である。図２０は、実施の形態３の匿名化処理後のストリーミングデータの例を示す説明図である。図１９に示すように、本実施の形態のストリーミングデータは、性別、生年、郵便番号に加えて、疾患の項目を含む入力個票である。図２０に示すように、性別、生年および郵便番号の項目は匿名化を行うが、疾患の項目は匿名化せずに出力する。以後の説明では、匿名化せずに出力する項目を、非匿名化項目と記載する。
【０１５２】
また、本実施の形態においては、匿名化済データＤＢ３１のフィールドの配列順序と、ストリーミングデータの入力個票の項目の配列順序とが異なっている。ストリーミングデータの個票の項目の配列順序は、あらかじめ補助記憶装置１４に記憶されているか、または入力個票に含まれている。
【０１５３】
図２１は、実施の形態３の匿名化のサブルーチンの処理の流れを示すフローチャートである。図２１に示すサブルーチンは、図７を使用して説明したサブルーチンの代わりに使用するサブルーチンである。図２１を使用して、本実施の形態の匿名化のサブルーチンの処理の流れを説明する。
【０１５４】
サーバＣＰＵ１２は、変数Ｎを初期値１に設定する（ステップＳ８６１）。サーバＣＰＵ１２は、第Ｎ中間ノード６１から入力個票に対応する遷移枝６５またはバイパス枝６７が出力しているか否かを判定する（ステップＳ８６２）。
【０１５５】
出力していないと判定した場合（ステップＳ８６２でＮＯ）、サーバＣＰＵ１２は匿名化する対象の項目すべてを一般化符号「＊」で置換したデータを出力データに設定する（ステップＳ８７５）。
【０１５６】
出力していると判定した場合（ステップＳ８６２でＹＥＳ）、サーバＣＰＵ１２は変数Ｎを出力している遷移枝６５の先の中間ノード６１の番号に設定する（ステップＳ８７１）。この際、サーバＣＰＵ１２は、一般化符号「＊」が指定されている遷移枝６５よりも具体的なデータが指定されている遷移枝６５を優先する。
【０１５７】
サーバＣＰＵ１２は、第Ｎノードが受容ノード６３であるか否かを判定する（ステップＳ８７２）。受容ノード６３では無いと判定した場合（ステップＳ８７２でＮＯ）、サーバＣＰＵ１２はステップＳ８６２に戻る。
【０１５８】
受容ノード６３であると判定した場合（ステップＳ８７２でＹＥＳ）、サーバＣＰＵ１２はその受容ノード６３の内容を出力データに設定する（ステップＳ８７３）。ステップＳ８７３およびステップＳ８７５の終了後、サーバＣＰＵ１２は出力データに非匿名化項目を追加する（ステップＳ８７６）。その後、サーバＣＰＵ１２は処理を終了する。
【０１５９】
本実施の形態によると、たとえば疾患名等の二次利用の際に重要度の高い項目のデータを完全に残した状態で、入力個票を匿名化することができる。また、本実施の形態によると匿名化済データＤＢ３１を作成する際の元データとは異なる項目を含むストリーミングデータの入力個票を匿名化することができる。
【０１６０】
なお、サーバＣＰＵ１２はステップＳ８７６の後、本サブルーチンの処理を終了する前に、匿名化済データＤＢ３１に記録されたデータに合わせて出力個票の項目の順番を変更しても良い。このようにすることにより、たとえば第１ユーザが匿名化済データＤＢ３１とストリーミングデータとを組み合わせて使用することが容易に行える。
【０１６１】
［実施の形態４］
実施の形態４は、大きな階層木を作成した後に、不要な遷移枝６５を削除して匿名化オートマトン３２を作成する情報処理システム１０に関する。なお、実施の形態１と共通する部分については、説明を省略する。
【０１６２】
図２２および図２３は、実施の形態４の階層木の作成過程を示す説明図である。図２２について説明する。図２２は、階層木作成の初期段階を示す。図２２では、各階層の中間ノード６１は、それぞれ同一の種類および数の遷移枝６５を有する。なお、図２２および図２３では、受容ノード６３の番号は図示を省略する。
【０１６３】
具体的には、第２階層の中間ノード６１はすべて、年齢が「２０」「５０」「＊」の３本の遷移枝６５を有する。第３階層の中間ノード６１はすべて、性別が「男」「女」「＊」の３本の遷移枝６５を有する。各階層間の遷移枝６５の数は、各フィールドに含まれるデータの種類の数と一致している。各受容ノード６３の内容は、親ノード６０から受容ノード６３に到達するまでに経由する遷移枝６５に対応する。
【０１６４】
図２３は、匿名化済データＤＢ３１に含まれる匿名化済個票と一致しない受容ノード６３を削除する過程を示す。たとえば、図２３の左端に記載した「１９８，２０，男」という個票は、匿名化済データＤＢ３１に含まれていない。サーバＣＰＵ１２は、このような受容ノード６３を階層木から削除することにより、匿名化の処理が不十分な個票を出力することを防止する。
【０１６５】
サーバＣＰＵ１２は、受容ノード６３を削除する場合には、その受容ノード６３に入力する遷移枝６５も削除する。この際、出力する遷移枝６５を有さない中間ノード６１が発生する場合には、サーバＣＰＵ１２はその中間ノード６１も削除する。以上の処理が完了することにより、図４を使用して説明した階層木と同様の階層木が完成する。
【０１６６】
図２４は、実施の形態４の階層木作成のサブルーチンの処理の流れを示すフローチャートである。図２４に示すサブルーチンは、図１１を使用して説明したサブルーチンの代わりに使用するサブルーチンである。図２４を使用して、本実施の形態の階層木作成のサブルーチンの処理の流れを説明する。
【０１６７】
サーバＣＰＵ１２は、親ノード６０を作成する（ステップＳ９０１）。サーバＣＰＵ１２は、カウンタＪを初期値１に設定する（ステップＳ９０２）。
【０１６８】
サーバＣＰＵ１２は、匿名化済データＤＢ３１の第Ｊフィールドに含まれるデータの種類を抽出する（ステップＳ９０３）。図３に示す匿名化済データＤＢ３１を例にして説明する。第１フィールドである郵便番号のフィールドには「１９８」「９９８」「＊」の３種類のデータが含まれている。したがって、サーバＣＰＵ１２はＪ＝１である場合には、「１９８」「９９８」「＊」の３個のデータを抽出する。
【０１６９】
サーバＣＰＵ１２は、第Ｊ＋１階層にステップＳ９０３で抽出した各データに対応する遷移枝６５および中間ノード６１を作成する（ステップＳ９０４）。たとえば、Ｊ＝１である場合には、サーバＣＰＵ１２は中間ノード６１ｎ２、中間ノード６１ｎ３、中間ノード６１ｎ４の３個の中間ノード６１および遷移枝６５を作成する。なお、ステップＳ９１４で作成するノードのうち、出力する遷移枝６５を有さないノードは、受容ノード６３である。
【０１７０】
サーバＣＰＵ１２は、匿名化済データＤＢ３１のすべてのフィールドの処理が終了したか否かを判定する（ステップＳ９０５）。処理が終了していないと判定した場合（ステップＳ９０５でＮＯ）、サーバＣＰＵ１２はカウンタＪに１を加算する（ステップＳ９０６）。その後、サーバＣＰＵ１２はステップＳ９０３に戻る。
【０１７１】
処理が終了したと判定した場合（ステップＳ９０５でＹＥＳ）、サーバＣＰＵ１２は、変数Ｎを初期値１に設定する（ステップＳ９１０）。サーバＣＰＵ１２は、Ｎ番目の受容ノード６３に対応する個票が匿名化済データＤＢ３１内に存在するか否かを判定する（ステップＳ９１１）。存在しないと判定した場合（ステップＳ９１１でＮＯ）、サーバＣＰＵ１２は受容ノード６３を作成中の階層木から削除する（ステップＳ９１２）。サーバＣＰＵ１２は、削除した受容ノード６３に入力する遷移枝６５も削除する。この際、出力する遷移枝６５を有さない中間ノード６１が発生する場合には、サーバＣＰＵ１２は遷移枝６５を有さない中間ノード６１も削除する。
【０１７２】
受容ノード６３が存在すると判定した場合（ステップＳ９１１でＹＥＳ）およびステップＳ９１２の終了後、サーバＣＰＵ１２はすべての受容ノード６３の処理が終了したか否かを判定する（ステップＳ９１３）。終了していないと判定した場合には（ステップＳ９１３でＮＯ）、サーバＣＰＵ１２はカウンタＮに１を加算する（ステップＳ９１４）。その後、サーバＣＰＵ１２はステップＳ９１１に戻る。
【０１７３】
終了したと判定した場合には（ステップＳ９１３でＹＥＳ）、サーバＣＰＵ１２は処理を終了する。
【０１７４】
本実施の形態によると、実施の形態１とは異なるアルゴリズムで匿名化オートマトン３２を作成することができる。なお、匿名化オートマトン３２の作成方法は、本実施の形態および実施の形態１に記載した方法に限定しない。親ノード６０および匿名化済データＤＢ３１に含まれる匿名化済個票に対応する受容ノード６３を備えれば、任意の方法で作成した匿名化オートマトン３２を使用することができる。
【０１７５】
図７に示す匿名化オートマトン３２は、匿名化オートマトン３２の機能を説明するためのイメージである。匿名化オートマトン３２は、状態遷移表その他任意の形式で表現されて、補助記憶装置１４に記憶されていても良い。
【０１７６】
［実施の形態５］
実施の形態５は、ストリーミングデータを蓄積して、匿名化オートマトン３２を再作成する情報処理システム１０に関する。なお、実施の形態１と共通する部分については、説明を省略する。
【０１７７】
図２５は、実施の形態５の情報処理システム１０の構成を示す説明図である。情報処理システム１０は、サーバ１１、第１クライアント２１、第２クライアント２５および匿名化サーバ１８を備える。サーバ１１、第１クライアント２１、第２クライアント２５および匿名化サーバ１８は、ネットワークを介して接続している。
【０１７８】
匿名化サーバ１８は、元データ個票を取得して匿名化済データＤＢ３１を作成するサーバである。本実施の形態の匿名化サーバ１８は、汎用のパーソナルコンピューター、大型計算機等の情報機器等である。また、本実施の形態のサーバ１１と匿名化サーバ１８とは、同一のハードウェア上で動作する仮想マシンでも良い。匿名化サーバ１８は、本実施の形態の作成部の一例である。
【０１７９】
匿名化サーバ１８は、サーバ１１と同様にＣＰＵ、主記憶装置、補助記憶装置および通信部を備える。匿名化サーバ１８の補助記憶装置には、匿名化前の元データが記憶される。匿名化サーバ１８の内部構成については、図示を省略する。
【０１８０】
図２６は、実施の形態５のプログラムの処理の流れを示すフローチャートである。図２６を使用して、本実施の形態の処理の流れを説明する。
【０１８１】
匿名化サーバ１８のＣＰＵは、多数の元データ個票を取得する（ステップＳ９５１）。なお、元データ個票は、第２クライアント２５から逐次発生する個票を蓄積したものであっても良い。
【０１８２】
匿名化サーバ１８のＣＰＵは、取得した元データ個票を匿名化して、匿名化済データＤＢ３１を作成する（ステップＳ９５２）。元データ個票を匿名化するには、たとえばｋ−匿名化、Ｐｋ−匿名化、米国ＨＩＰＡＡ（Health Insurance Portability and Accountability Act）プライバシールールなどの法令やガイドラインに基づいた匿名化等、任意の手法を使用することができる。匿名化サーバ１８のＣＰＵは、匿名化済データＤＢ３１をサーバ１１に送信する。
【０１８３】
サーバＣＰＵ１２は、通信部１５を介して匿名化済データＤＢ３１を取得して（ステップＳ５０１）、補助記憶装置１４に取得する。以後、ステップＳ５１２までのサーバＣＰＵ１２が行う処理および第１クライアント２１のＣＰＵが行う処理は実施の形態１と同一であるので説明を省略する。
【０１８４】
第２クライアント２５のＣＰＵは、第２ユーザが入力等を行うことにより生成した入力個票を取得する（ステップＳ６０１）。第２クライアント２５のＣＰＵは取得した入力個票をサーバ１１および匿名化サーバ１８に送信する（ステップＳ６１１）。
【０１８５】
匿名化サーバ１８のＣＰＵは、入力個票を受信し（ステップＳ９５３）、補助記憶装置に設けた入力個票記憶部に保存する。匿名化サーバ１８は、第２クライアント２５が入力個票を送信する都度、ステップＳ９５３を繰り返す。
【０１８６】
匿名化サーバ１８のＣＰＵは、ステップＳ９５１で取得した元データ個票とステップＳ９５３で受信した入力個票をまとめて元データとして、新たな匿名化済データＤＢ３１を作成する（ステップＳ９５４）。この際、匿名化サーバ１８のＣＰＵは、本実施の形態の再作成部の機能を実現する。匿名化サーバ１８のＣＰＵがステップＳ９５４を実施するタイミングは、任意に定めることができる。たとえば匿名化サーバ１８は、１週間ごと、１ヶ月ごと等、所定の時期にステップＳ９５４を実施する。また、匿名化サーバ１８のＣＰＵは、ステップＳ９５３で受信した入力個票が所定の数を超えた場合にステップＳ９５４を実行しても良い。
【０１８７】
匿名化サーバ１８のＣＰＵは、新たな匿名化済データＤＢ３１を作成したことを、サーバ１１に通知する（ステップＳ９５５）。
【０１８８】
サーバＣＰＵ１２は、処理を終了するか否かを判定する（ステップＳ５１５）。処理を終了すると判定した場合（ステップＳ５１５でＹＥＳ）、サーバＣＰＵ１２は処理を終了する。
【０１８９】
処理を終了しないと判定した場合（ステップＳ５１５でＮＯ）、サーバＣＰＵ１２は新たな匿名化済データＤＢ３１が存在するか否かを判定する（ステップＳ５５２）。新たな匿名化ＥＢ３１の存在の有無は、匿名化サーバ１８がステップＳ９５５で送信した通知を受信したか否かにより判定する。
【０１９０】
存在しないと判定した場合（ステップＳ５５２でＮＯ）、サーバＣＰＵ１２はステップＳ５１０に戻る。存在すると判定した場合（ステップＳ５５２でＹＥＳ）、サーバＣＰＵ１２はステップＳ５０１に戻る。
【０１９１】
本実施の形態によると、ストリーミングデータを反映して、随時匿名化オートマトン３２を更新する情報処理システム１０を提供することができる。入力個票データが時間の経過とともに変化するトレンドを有する場合にも、陳腐化せず、有用な匿名化済データを提供することが可能である。
【０１９２】
［実施の形態６］
実施の形態６は、匿名化オートマトン３２の作成とストリーミングデータの匿名化とを異なるサーバで行う情報処理システム１０に関する。なお、実施の形態５と共通する部分については、説明を省略する。
【０１９３】
図２７は、実施の形態６のプログラムの処理の流れを示すフローチャートである。図２７を使用して、本実施の形態の処理の流れを説明する。
【０１９４】
匿名化サーバ１８のＣＰＵは、多数元データ個票を取得する（ステップＳ９５１）。なお、元データは、第２クライアント２５から逐次発生する入力個票を蓄積したデータであっても良い。
【０１９５】
匿名化サーバ１８のＣＰＵは、取得した元データ個票を匿名化して、匿名化済データＤＢ３１を作成する（ステップＳ９５２）。匿名化サーバ１８のＣＰＵは、階層木作成のサブルーチンを起動する（ステップＳ９６１）。階層木作成のサブルーチンには、図１１を使用して説明したサブルーチンまたは図２４を使用して説明したサブルーチンを使用することができる。
【０１９６】
匿名化サーバ１８のＣＰＵは、ノード削減のサブルーチンを起動する（ステップＳ９６２）。ノード削減のサブルーチンには、図１２を使用して説明したサブルーチンを使用することができる。
【０１９７】
匿名化サーバ１８のＣＰＵは、バイパス追加のサブルーチンを起動する（ステップＳ９６３）。バイパス追加のサブルーチンには、図１３および図１４を使用して説明したサブルーチンを使用することができる。
【０１９８】
匿名化サーバ１８のＣＰＵは、完成した匿名化オートマトン３２をサーバ１１に送信する（ステップＳ９６４）。サーバＣＰＵ１２は、匿名化オートマトン３２を取得する（ステップＳ５６１）。
【０１９９】
第２クライアント２５のＣＰＵは、第２ユーザが入力等を行うことにより生成した入力個票を取得する（ステップＳ６０１）。第２クライアント２５のＣＰＵは取得した入力個票をサーバ１１および匿名化サーバ１８に送信する（ステップＳ６１１）。
【０２００】
サーバＣＰＵ１２は、第２クライアント２５からストリーミングデータの入力個票を受信する（ステップＳ５１０）。サーバＣＰＵ１２は、匿名化のサブルーチンを起動する（ステップＳ５１１）。匿名化のサブルーチンには、図１５を使用して説明したサブルーチンまたは図２１を使用して説明したサブルーチンを使用することができる。なお、サーバＣＰＵ１２は、ステップＳ５１１の終了後、ステップＳ５１０で受信した入力個票を補助記憶装置１４等から削除することが望ましい。
【０２０１】
サーバＣＰＵ１２は、匿名化した出力個票を第１クライアント２１のＣＰＵに送信する（ステップＳ５１２）。第１クライアントのＣＰＵは、受信した出力個票を保存する（ステップＳ７０１）。
【０２０２】
サーバＣＰＵ１２は、処理を終了するか否かを判定する（ステップＳ５１５）。処理を終了しないと判定した場合（ステップＳ５１５でＮＯ）、サーバＣＰＵ１２はステップＳ５６１に戻る。処理を終了すると判定した場合（ステップＳ５１５でＹＥＳ）、サーバＣＰＵ１２は処理を終了する。
【０２０３】
匿名化サーバ１８のＣＰＵは、入力個票を受信して（ステップＳ９５３）、主記憶装置１３または補助記憶装置に記憶する。匿名化サーバ１８は、第２クライアント２５が入力個票を送信する都度、ステップＳ９５３を繰り返す。
【０２０４】
匿名化サーバ１８のＣＰＵは、匿名化済データＤＢ３１を再作成するか否かを判定する（ステップＳ９５４）。再作成を行う条件は、任意に設定することができる。たとえば匿名化サーバ１８のＣＰＵは、１週間ごと、１ヶ月ごと等に再作成する（ステップＳ９５４でＹＥＳ）と判定しても良い。また、匿名化サーバ１８のＣＰＵは、ステップＳ９５３で受信した入力個票が所定の数を超えた場合に再作成する（ステップＳ９５４でＹＥＳ）と判定しても良い。
【０２０５】
匿名化済データＤＢ３１を再作成する（ステップＳ９５４でＹＥＳ）と判定した場合、匿名化サーバ１８のＣＰＵは、ステップＳ９５２に戻る。匿名化済データＤＢ３１を再作成しない（ステップＳ９５４でＮＯ）と判定した場合、匿名化サーバ１８のＣＰＵは、ステップＳ９５３に戻る。
【０２０６】
本実施の形態によると、匿名化オートマトン３２とストリーミングデータの入力個票の匿名化とを異なるハードウェアで行う情報処理システム１０を提供することができる。大量の個人情報を取り扱う匿名化サーバ１８のセキュリティレベルを高く設定することにより、個人情報を保護することが可能である。
【０２０７】
［実施の形態７］
図２８は、実施の形態７の情報処理装置１１の動作を示す機能ブロック図である。情報処理装置１１は、サーバＣＰＵ１２による制御に基づいて以下のように動作する。
【０２０８】
取得部５１は、複数の項目にそれぞれ関連付けられたデータを有する入力個票を取得する。変換部５２は、取得部５１が取得した入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票に変換する。
【０２０９】
［実施の形態８］
実施の形態８は、汎用のコンピュータとプログラム４７とを組み合わせて動作させることにより、本実施の形態のサーバ１１を実現する形態に関する。図２９は、実施の形態８の情報処理システム１０の構成を示す説明図である。図２９を使用して、本実施の形態の構成を説明する。なお、実施の形態１と共通する部分の説明は省略する。
【０２１０】
本実施の形態の情報処理システム１０は、サーバコンピュータ４５、第１クライアント２１および第２クライアント２５を備える。サーバコンピュータ４５、第１クライアント２１および第２クライアント２５は、ネットワークを介して接続している。
【０２１１】
サーバコンピュータ４５は、サーバＣＰＵ１２、主記憶装置１３、補助記憶装置１４、通信部１５、読取部１７およびバスを備える。サーバコンピュータ４５は、汎用のパソコン等の情報処理装置である。
【０２１２】
プログラム４７は、可搬型記録媒体４８に記録されている。サーバＣＰＵ１２は、読取部１７を介してプログラム４７を読み込み、補助記憶装置１４に保存する。またサーバＣＰＵ１２は、サーバコンピュータ４５内に実装されたフラッシュメモリ等の半導体メモリ４９に記憶されたプログラム４７を読出しても良い。さらに、サーバＣＰＵ１２は、通信部１５および図示しないネットワークを介して接続される図示しない他のサーバコンピュータからプログラム４７をダウンロードして補助記憶装置１４に保存しても良い。
【０２１３】
プログラム４７は、サーバコンピュータ４５の制御プログラムとしてインストールされ、主記憶装置１３にロードして実行される。これにより、サーバコンピュータ４５は上述したサーバ１１として機能する。
【０２１４】
各実施例で記載されている技術的特徴（構成要件）はお互いに組合せ可能であり、組み合わせすることにより、新しい技術的特徴を形成することができる。
今回開示された実施の形態はすべての点で例示であって、制限的なものでは無いと考えられるべきである。本発明の範囲は、上記した意味では無く、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０２１５】
（付記１）
複数の項目にそれぞれ関連付けられたデータを有する入力個票を取得する取得部と、
前記取得部が取得した前記入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票に変換する変換部とを備える
情報処理装置。
【０２１６】
（付記２）
前記変換部は、前記入力個票を前記匿名化済個票と同一の出力個票に変換することができない場合に、該匿名化済個票が有する項目に関連付けられたすべてのデータを他のデータに置換した置換個票に変換する
付記１に記載の情報処理装置。
【０２１７】
（付記３）
前記規則は、前記入力個票を、各項目に関連付けられたデータが該入力個票の各項目に関連付けられたデータまたは該データを置換した他のデータと同一である出力個票に変換する規則である
付記１または付記２に記載の情報処理装置。
【０２１８】
（付記４）
前記規則は、前記匿名化済個票が有する項目およびデータに対応する複数階層の判定枝を有し、各階層の該判定枝により出力個票が定められ、
前記変換部は、前記入力個票の項目に関連付けられたデータが前記判定枝に対応する場合に該判定枝を選択し、選択した該判定枝によって定められた出力個票に入力個票を変換する
付記１から付記３のいずれか一つに記載の情報処理装置。
【０２１９】
（付記５）
前記変換部は、取得した前記入力個票を逐次変換する
付記１から付記４のいずれか一つに記載の情報処理装置。
【０２２０】
（付記６）
前記変換部は、前記匿名化済個票が有さない項目に関連付けられた前記入力個票のデータを変換しない
付記１から付記５のいずれか一つに記載の情報処理装置。
【０２２１】
（付記７）
前記匿名化済個票は、一部または全部の項目に関連付けられたデータを他のデータに置換した個票である
付記１から付記６のいずれか一つに記載の情報処理装置。
【０２２２】
（付記８）
前記匿名化済個票は、ｋ−匿名性を有する
付記１から付記７に記載の情報処理装置。
【０２２３】
（付記９）
前記規則は、
入力ノードと、
前記匿名化済個票に関連付けられており、前記入力ノードから遷移可能な複数の受容ノードと、
前記入力ノードから前記受容ノードに至る遷移の条件を示す複数の判定枝と、
前記判定枝に接続された複数のノードとを備える
有限オートマトンである付記１から付記８のいずれか一つに記載の情報処理装置。
【０２２４】
（付記１０）
前記有限オートマトンは、一のノードから前記入力個票に基づいて遷移可能な複数のノードが存在する場合には、遷移対象となるデータの範囲が狭いノードに遷移する付記９に記載の情報処理装置。
【０２２５】
（付記１１）
前記有限オートマトンは、
入力ノードから一の受容ノードにつながる一のノード列に含まれるノードから、他のノード列に含まれるノードに遷移するバイパス枝を備える付記９または付記１０に記載の情報処理装置。
【０２２６】
（付記１２）
前記バイパス枝は、前記一のノード列に含まれるノードから、該ノードから他のいずれのノードにも遷移できない個票を遷移させる付記１１に記載の情報処理装置。
【０２２７】
（付記１３）
複数の項目にそれぞれ関連付けられたデータを有する複数の元データ個票から匿名化済個票を作成する作成部を備える
付記１から付記１２のいずれか一つに記載の情報処理装置。
【０２２８】
（付記１４）
複数の項目にそれぞれ関連付けられたデータを有する元データ個票を記憶する元データ記憶部と、
前記元データ記億部に記憶された元データ個票から匿名化済個票を作成する作成部と、
取得した入力個票を記憶する入力個票記憶部と、
前記元データ記憶部に記憶された元データ個票と前記入力個票記憶部に記憶された入力個票とから前記匿名化済個票を再作成する再作成部とを備える
付記１から付記１２のいずれか一つに記載の情報処理装置。
【０２２９】
（付記１５）
複数の項目にそれぞれ関連付けられたデータを有する入力個票を取得し、
取得した入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票に変換する
処理をコンピュータに実行させる情報処理方法。
【０２３０】
（付記１６）
複数の項目にそれぞれ関連付けられたデータを有する入力個票を取得し、
取得した入力個票を、規則に基づいて、前記複数の項目にそれぞれ関連付けられたデータを有する複数の匿名化済個票のいずれか一つと同一の出力個票にする
処理をコンピュータに実行させるプログラム。
【符号の説明】
【０２３１】
１０  情報処理システム
１１  サーバ（情報処理装置）
１２  サーバＣＰＵ
１３  主記憶装置
１４  補助記憶装置
１５  通信部
１７  読取部
１８  匿名化サーバ
２１  第１クライアント
２５  第２クライアント
３１  匿名化済データＤＢ
３２  匿名化オートマトン（規則）
４５  サーバコンピュータ
４７  プログラム
４８  可搬型記憶媒体
４９  半導体メモリ
５１  取得部
５２  変換部
６０  親ノード
６１  中間ノード
６３  受容ノード
６５  遷移枝
６７  バイパス枝
６９  ノード列
【図１】
0006693135.tif 000002
【図２】
0006693135.tif 000003
【図３】
0006693135.tif 000004
【図４】
0006693135.tif 000005
【図５】
0006693135.tif 000006
【図６】
0006693135.tif 000007
【図７】
0006693135.tif 000008
【図８】
0006693135.tif 000009
【図９】
0006693135.tif 000010
【図１０】
0006693135.tif 000011
【図１１】
0006693135.tif 000012
【図１２】
0006693135.tif 000013
【図１３】
0006693135.tif 000014
【図１４】
0006693135.tif 000015
【図１５】
0006693135.tif 000016
【図１６】
0006693135.tif 000017
【図１７】
0006693135.tif 000018
【図１８】
0006693135.tif 000019
【図１９】
0006693135.tif 000020
【図２０】
0006693135.tif 000021
【図２１】
0006693135.tif 000022
【図２２】
0006693135.tif 000023
【図２３】
0006693135.tif 000024
【図２４】
0006693135.tif 000025
【図２５】
0006693135.tif 000026
【図２６】
0006693135.tif 000027
【図２７】
0006693135.tif 000028
【図２８】
0006693135.tif 000029
【図２９】
0006693135.tif 000030