(57)【要約】【課題】予め定められた複数の文字列の少なくとも１つが文書中に存在するか否かを効率的に検査する。【解決手段】個人情報辞書保持部２６は、文書中に存在するか否かを検査すべき複数の検査文字列を保持する。長さ情報保持部２８は、複数の検査文字列について、先頭文字の種類ごとの長さ情報を保持する。被験文字列取得部３６は、文書における検査対象の先頭文字から、長さ情報保持部２８において当該先頭文字の種類に対応づけられた長さの文字列を取得する。判定部３８は、個人情報辞書保持部２６に保持された検査文字列の中に、被験文字列取得部３６により取得された文字列が存在するか否かを判定することにより、文書中に検査文字列が存在するか否かを判定する。【選択図】図２
2017146637.tif 000002
【特許請求の範囲】
【請求項１】
文書中に存在するか否かを検査すべき複数の検査文字列を保持する検査文字列保持部と、
前記検査文字列保持部に保持された複数の検査文字列について、先頭文字の種類ごとの長さ情報を保持する長さ情報保持部と、
前記文書から被験文字列を取得する被験文字列取得部と、
前記検査文字列保持部に保持された検査文字列の中に、前記被験文字列取得部により取得された被験文字列が存在するか否かを判定することにより、前記文書中に検査文字列が存在するか否かを判定する判定部と、
を備え、
前記被験文字列取得部は、前記文書における検査対象の先頭文字から、前記長さ情報保持部において当該先頭文字の種類に対応づけられた長さの文字列を前記被験文字列として取得することを特徴とする文書検査装置。
【請求項２】
前記長さ情報保持部は、前記複数の検査文字列のそれぞれについて、先頭文字の種類ごとの最大文字列長を含む長さ情報を保持し、
前記被験文字列取得部は、前記文書における検査対象の先頭文字から、当該先頭文字の種類に対応づけられた最大文字列長の文字列を最初の被験文字列として取得する請求項１に記載の文書検査装置。
【請求項３】
前記被験文字列取得部は、前記文書における検査対象の先頭文字から、当該先頭文字の種類に対応づけられた最大文字列長の文字列を最初の被験文字列として取得後、前記先頭文字から始まる被験文字列を段階的に短くする請求項２に記載の文書検査装置。
【請求項４】
前記長さ情報保持部は、前記複数の検査文字列のそれぞれについて、先頭文字の種類ごとの最大文字列長と最小文字列長を含む長さ情報を保持し、
前記被験文字列取得部は、前記文書における検査対象の先頭文字から始まる文字列であり、当該先頭文字の種類に対応づけられた最大文字列長から最小文字列長の範囲の文字列を前記被験文字列として取得する請求項１から３のいずれかに記載の文書検査装置。
【請求項５】
前記長さ情報保持部は、前記複数の検査文字列のそれぞれについて、先頭文字の種類ごとの複数種類の文字列長を含む長さ情報を保持し、
前記被験文字列取得部は、前記文書における検査対象の先頭文字から、当該先頭文字の種類に対応づけられた最大文字列長の文字列を最初の被験文字列として取得後、当該先頭文字に対応づけられた他の文字列長にもとづいて短くした被験文字列を取得する請求項１に記載の文書検査装置。
【請求項６】
前記長さ情報保持部は、前記複数の検査文字列のそれぞれについて、先頭文字の種類ごとの最小文字列長を含む長さ情報を保持し、
前記被験文字列取得部は、前記文書における検査対象の先頭文字から、当該先頭文字の種類に対応づけられた最小文字列長の文字列を最初の被験文字列として取得する請求項１に記載の文書検査装置。
【請求項７】
新たな検査文字列を受け付けた場合に、当該検査文字列を前記検査文字列保持部へ格納し、前記長さ情報保持部に保持された当該検査文字列の先頭文字の種類に対応する長さ情報を、当該検査文字列の長さに応じて更新する検査文字列記録部をさらに備える請求項１から６のいずれかに記載の文書検査装置。
【請求項８】
文書中に存在するか否かを検査すべき複数の検査文字列を記憶する第１記憶部と、前記第１記憶部に記憶された複数の検査文字列について、先頭文字の種類ごとの長さ情報を記憶する第２記憶部にアクセス可能なコンピュータが、
前記文書から被験文字列を取得するステップと、
前記第１記憶部に記憶された検査文字列の中に、前記取得するステップで取得された被験文字列が存在するか否かを判定することにより、前記文書中に検査文字列が存在するか否かを判定するステップと、
を実行し、
前記取得するステップは、前記文書における検査対象の先頭文字から、前記第２記憶部において当該先頭文字の種類に対応づけられた長さの文字列を前記被験文字列として取得することを特徴とする文書検査方法。
【請求項９】
文書中に存在するか否かを検査すべき複数の検査文字列を記憶する第１記憶部と、前記第１記憶部に記憶された複数の検査文字列について、先頭文字の種類ごとの長さ情報を記憶する第２記憶部にアクセス可能なコンピュータに、
前記文書から被験文字列を取得する機能と、
前記第１記憶部に記憶された検査文字列の中に、前記取得する機能により取得された被験文字列が存在するか否かを判定することにより、前記文書中に検査文字列が存在するか否かを判定する機能と、
を実現させ、
前記取得する機能は、前記文書における検査対象の先頭文字から、前記第２記憶部において当該先頭文字の種類に対応づけられた長さの文字列を前記被験文字列として取得することを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はデータ処理技術に関し、特に文書を検査する技術に関する。
【背景技術】
【０００２】
本出願人は、オリジナル文書内の個人情報をマスキングしてテストデータを作成する際に、テストデータとしての品質の低下を抑制する技術を提案している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−２４６５４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
文書内の個人情報をマスクするアプリケーションの性能は、文書における個人情報の有無や、その位置を検出する性能に大きく依存する。しかし、文書における個人情報の有無や、その位置を効率的に検出するための具体的な方法はこれまで十分に提案されてこなかったと本発明者は考えた。
【０００５】
本発明は本発明者の上記課題認識に基づきなされたものであり、主たる目的は、予め定められた複数の文字列の少なくとも１つが文書中に存在するか否かを効率的に検査するための技術を提供することである。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様の文書検査装置は、文書中に存在するか否かを検査すべき複数の検査文字列を保持する検査文字列保持部と、検査文字列保持部に保持された複数の検査文字列について、先頭文字の種類ごとの長さ情報を保持する長さ情報保持部と、文書から被験文字列を取得する被験文字列取得部と、検査文字列保持部に保持された検査文字列の中に、被験文字列取得部により取得された被験文字列が存在するか否かを判定することにより、文書中に検査文字列が存在するか否かを判定する判定部と、を備える。被験文字列取得部は、文書における検査対象の先頭文字から、長さ情報保持部において当該先頭文字の種類に対応づけられた長さの文字列を被験文字列として取得する。
【０００７】
本発明の別の態様は、文書検査方法である。この方法は、文書中に存在するか否かを検査すべき複数の検査文字列を記憶する第１記憶部と、第１記憶部に記憶された複数の検査文字列について、先頭文字の種類ごとの長さ情報を記憶する第２記憶部にアクセス可能なコンピュータが、文書から被験文字列を取得するステップと、第１記憶部に記憶された検査文字列の中に、取得するステップで取得された被験文字列が存在するか否かを判定することにより、文書中に検査文字列が存在するか否かを判定するステップと、を実行し、取得するステップは、文書における検査対象の先頭文字から、第２記憶部において当該先頭文字の種類に対応づけられた長さの文字列を被験文字列として取得する。
【０００８】
なお、以上の構成要素の任意の組合せ、本発明の表現を、システム、コンピュータプログラム、コンピュータプログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、予め定められた複数の文字列の少なくとも１つが文書中に存在するか否かを効率的に検査することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態の情報システムの構成を示す図である。
【図２】図１のデータ変換装置の機能構成を示すブロック図である。
【図３】図１のデータ変換装置の動作を示すフローチャートである。
【図４】各インデックスに対応する個人情報辞書を模式的に示す図である。
【図５】各インデックスに対応する長さ情報を模式的に示す図である。
【図６】図１のデータ変換装置の動作を示すフローチャートである。
【図７】データ変換装置による個人情報検出処理の一例を説明する図である。
【発明を実施するための形態】
【００１１】
実施の形態のデータ変換装置は、文書内に個人情報が含まれる場合に、その個人情報をマスクするように文書を変換する情報処理装置である。このデータ変換装置は、個人情報を示す文字列（以下「個人情報文字列」とも呼ぶ。）が文書中に存在するか否かを検査する文書検査装置としての機能を有する。
【００１２】
具体的には、データ変換装置は、複数の個人情報文字列を格納した辞書と、個人情報文字列のインデックスごとの文字列長を示す長さ情報を保持する。データ変換装置は、文書中から被験文字列を抽出し、辞書内の個人情報文字列の中に被験文字列が存在するか否かを判定することにより、個人情報文字列が文書中に存在するか否かを判定する。データ変換装置は、被験文字列の抽出に際し、被験文字列の先頭文字に対応するインデックスの長さ情報に基づいて被験文字列の長さを限定する。これにより、個人情報文字列が文書中に存在するか否かを効率的に検査する。
【００１３】
図１は、実施の形態の情報システムの構成を示す。情報システム１００は、本番機１０、開発機１２、データ変換装置１４を備える。本番機１０は、本番環境に設置されたウェブサーバや、アプリケーションサーバ、データベースサーバ等の情報処理装置である。本番機１０は、小売企業や金融機関等の業務を支援するための情報処理を実行し、例えば、企業の従業員や顧客に対する情報処理サービスを提供する。
【００１４】
本番機１０は、企業の従業員や顧客の個人情報に該当する各種情報（例えば氏名、年齢、住所等）が記録された文書データ（以下「原本文書データ」とも呼ぶ。）を保持する。例えば、原本文書データは、データベースサーバが管理するテーブルのデータや、オフィススイート等のドキュメントファイルを含む。また、ＣＳＶファイルや固定長ファイル、フリーフォーマットのログファイル等、各種のテキストデータを含む。
【００１５】
開発機１２は、開発環境に設置された情報処理装置である。開発機１２では、本番機１０にインストールされたアプリケーションについて、そのトラブル解析や、バグ改修、機能追加等の作業（以下、総称して「保守作業」とも呼ぶ。）が実施される。実施の形態では、開発機１２における保守作業の効率を高めるために、その保守作業に用いるテストデータとして、本番環境に保持される原本文書データに対応した文書データ（後述の「マスク済文書データ」）を用いる。
【００１６】
データ変換装置１４は、本番機１０において生成、参照、更新等されたオリジナルの原本文書データを本番機１０から取得する。データ変換装置１４は、個人情報をマスクするように原本文書データを変換したマスク済文書データを生成し、記録メディア１６へ記録する。データ変換装置１４は一般的なＰＣであってもよい。記録メディア１６はＤＶＤやＵＳＢメモリであってもよい。情報システム１００のオーナー企業の担当者や、ＩＣＴサービス企業の担当者は、記録メディア１６に記録されたマスク済文書データを開発機１２に読み込ませ、開発機１２での保守作業を実施する。
【００１７】
図２は、図１のデータ変換装置１４の機能構成を示すブロック図である。データ変換装置１４は、制御部２０、記憶部２２、通信部２４を備える。制御部２０は、原本文書データをマスク済文書データへ変換するための各種データ処理を実行する。記憶部２２は、制御部２０により参照・更新されるデータを記憶する記憶領域である。通信部２４は、所定の通信プロトコルにしたがって外部装置と通信する。制御部２０は、通信部２４を介して、本番機１０等の外部装置との間でデータを送受する。
【００１８】
本明細書のブロック図で示す各ブロックは、ハードウェア的には、コンピュータのＣＰＵやメモリをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
【００１９】
例えば、制御部２０の各ブロックに対応するモジュールを備えるデータ変換アプリケーションがデータ変換装置１４のストレージへインストールされてもよい。データ変換装置１４のＣＰＵは、制御部２０の各ブロックに対応するモジュールをメインメモリに読み出して実行することにより、各ブロックの機能を発揮してもよい。また、記憶部２２の各機能ブロックは、データ変換装置１４のストレージやメモリ等の記憶装置がデータを記憶することにより実現されてもよい。記憶部２２のデータは、実際には外部のデータベースサーバ等に格納されてもよく、データ変換装置１４は、通信網を介してデータベースサーバへアクセスし、記憶部２２のデータを参照し、また更新してもよい。
【００２０】
記憶部２２は、個人情報辞書保持部２６と長さ情報保持部２８を含む。個人情報辞書保持部２６は、原本文書データ中に存在するか否かを検査すべき複数の検査文字列を保持する。実施の形態の検査文字列は個人情報文字列である。個人情報文字列は、例えば、氏名を示す文字列である「山田太郎」や「鈴木花子」、電話番号を示す文字列である「０３ーＸＸＸＸ−ＹＹＹＹ」等である。
【００２１】
個人情報辞書保持部２６は、個人情報文字列の先頭文字（言い換えれば最初の１文字）をインデックスとして、インデックスごとの辞書データ（以下「個人情報辞書」と呼ぶ。）を保持する。言い換えれば、１バイト文字「y」（半角）や２バイト文字「山」等、複数種類のインデックスに対応した複数の個人情報辞書を保持する。例えば、１バイト文字「y」（半角）に対応した個人情報辞書には、個人情報文字列「yamadatarou」が格納されてもよい。また、２バイト文字「山」に対応した個人情報辞書には、個人情報文字列「山田太郎」が格納されてもよい。
【００２２】
実施の形態の個人情報辞書は、Ｃ＋＋言語の標準ライブラリの「std:unordered_map」クラスのオブジェクト（以下「ハッシュテーブル」と呼ぶ。）として実現される。個人情報辞書には、キーとして個人情報文字列が格納され、そのキーに対応する値として辞書の識別名称（例えばインデックス名や辞書のカテゴリを含む文字列）が格納される。実施の形態の個人情報辞書保持部２６は、インデックスの種類ごとの個人情報辞書を保持し、すなわちインデックスの種類ごとのハッシュテーブルを保持する。なお、個人情報辞書をはじめデータ変換装置１４（データ変換アプリケーション）を実装するプログラミング言語に制限はなく、Ｃ＋＋言語以外のプログラミング言語で実装してもよいことはもちろんである。
【００２３】
長さ情報保持部２８は、個人情報辞書保持部２６に保持された複数の個人情報文字列について、インデックスの種類ごとの長さ情報を保持する。実施の形態では、複数のインデックスに対応する複数の個人情報辞書について、各個人情報辞書に対応した長さ情報を保持する。長さ情報は、個人情報辞書に格納された複数の個人情報文字列における最大文字列長と最小文字列長の両方を含む。例えば、インデックス「山」に対応した個人情報辞書の最大文字列長は、個人情報文字列「山○○○○○○○○○○○」（○は任意の文字）の「１２」（バイト数では「２４」）かもしれない。また、同辞書の最小文字列長は、個人情報文字列「山田」の「２」（バイト数では「４」）かもしれない。
【００２４】
変形例として、個人情報辞書保持部２６は、インデックスごとの複数の辞書を保持するのではなく、複数のインデックスに亘る複数の個人情報文字列を集約して記録した１つの辞書を保持してもよい。この場合も、長さ情報保持部２８は、複数のインデックスそれぞれについての長さ情報を保持する。また、個人情報辞書保持部２６と長さ情報保持部２８は必ずしも分離される必要はない。例えば、あるインデックスに関する長さ情報は、そのインデックスに対応する個人情報辞書の属性データとして個人情報辞書保持部２６に格納されてもよい。なお、特開２０１３−２４６５４７号公報で本出願人が提案しているように、記憶部２２は、マスク処理において個人情報文字列を置き換えるための置換え文字列や、文字列置換えの規則等を定めたデータ等をさらに保持してもよい。
【００２５】
制御部２０は、個人情報記録部３０、原本文書取得部３２、個人情報検出部３４、文書変換部４０、変換文書出力部４２を含む。個人情報記録部３０は、新たな個人情報文字列を受け付けた場合に、その新たな個人情報文字列を個人情報辞書保持部２６へ格納する。このとき個人情報記録部３０は、長さ情報保持部２８に保持された長さ情報であり、新たな個人情報文字列の先頭文字の種類に対応する長さ情報を、新たな個人情報文字列の長さに応じて更新する。
【００２６】
具体的には、個人情報記録部３０は、個人情報辞書保持部２６へ追加対象となる個人情報文字列の先頭文字をインデックスとして識別し、そのインデックスに該当する個人情報辞書に追加対象の個人情報文字列を格納する。例えば個人情報記録部３０は、個人情報文字列の先頭文字が１バイト文字「Ａ（0x01）」の場合、「unsigned char」型の先頭文字を「unsigned short int」型へキャストしてインデックス「0x0041」を識別してもよい。また、個人情報文字列の先頭文字が２バイト文字「唖（0x88A0）」の場合、「unsigned char*」型の先頭文字を「unsigned short int*」型へキャストし、その先頭の「0xA088」（エンディアンによっては「0x88A0」）をインデックスとして識別してもよい。
【００２７】
個人情報記録部３０は、長さ情報保持部２８に格納された長さ情報のうち、個人情報辞書保持部２６へ追加対象となる個人情報文字列のインデックス（ここでは「該当インデックス」と呼ぶ。）に対応づけられた長さ情報を更新する。具体的には、該当インデックスのそれまでの最小文字列長が初期値（実施の形態では「０」）の場合は、その最小文字列長に、追加対象の個人情報文字列の文字列長を設定する。また、該当インデックスのそれまでの最小文字列長が追加対象の個人情報文字列の文字列長より大きい場合は、その最小文字列長に、追加対象の個人情報文字列の文字列長を設定する。
【００２８】
また個人情報記録部３０は、該当インデックスのそれまでの最大文字列長が初期値（実施の形態では「０」）の場合は、その最大文字列長に、追加対象の個人情報文字列の文字列長を設定する。また、該当インデックスのそれまでの最大文字列長が追加対象の個人情報文字列の文字列長より小さい場合は、その最大文字列長に、追加対象の個人情報文字列の文字列長を設定する。
【００２９】
原本文書取得部３２は、本番機１０に保持された原本文書データを、通信網を介して取得する。変形例として、原本文書取得部３２は、データ変換装置１４ローカルの記憶領域（例えば記憶部２２）に予め格納された原本文書データを読み込んでもよく、不図示の記録メディアから原本文書データを読み込んでもよい。
【００３０】
個人情報検出部３４は、原本文書データにおける個人情報文字列の存在を検出し、実施の形態では、原本文書データ内での個人情報文字列の位置を検出する。個人情報検出部３４は、原本文書データに個人情報が存在するか否かを検査する文書検査部とも言える。個人情報検出部３４は、被験文字列取得部３６と判定部３８を含む。
【００３１】
被験文字列取得部３６は、原本文書データから、個人情報辞書内の個人情報文字列と照合すべき文字列である被験文字列を抽出する。具体的には、被験文字列取得部３６は、原本文書データにおいて検査対象となる文字列の先頭文字を該当インデックスとして識別する（識別方法は個人情報記録部３０と同様）。被験文字列取得部３６は、長さ情報保持部２８に保持された長さ情報のうち、該当インデックスに対応づけられた長さ情報である最大文字列長と最小文字列長を識別する。これらは、該当インデックスに対応する個人情報辞書であり、被験文字列の照合対象となる個人情報辞書（以下「照合辞書」とも呼ぶ。）に格納された個人情報文字列に関する最大文字列長と最小文字列長とも言える。
【００３２】
被験文字列取得部３６は、原本文書データにおいて検査対象となる文字列の先頭文字から、該当インデックスの最大文字列長の文字列を最初の被験文字列として読み込む。照合辞書の個人情報文字列の中に最初の被験文字列に一致するものがなければ、被験文字列取得部３６は、上記先頭文字から、該当インデックスの（最大文字列長−１）の文字列を次の被験文字列として読み込む。被験文字列取得部３６は、読み込む被験文字列が、上記先頭文字から、該当インデックスの最小文字列長分になるまで処理を繰り返す。そして被験文字列取得部３６は、上記先頭文字から、該当インデックスの最小文字列長の文字列を最後の被験文字列として読み込む。ただし、照合辞書の個人情報文字列の中に被験文字列に一致するものがあった場合、被験文字列取得部３６は、上記先頭文字から始まる被験文字列の読込み処理を終了する。
【００３３】
このように被験文字列取得部３６は、照合辞書内の個人情報文字列と被験文字列との照合結果に応じて、原本文書データにおける検査対象の先頭文字から始まる被験文字列を段階的に短くしていく。実施の形態では１文字ずつ短くしていく。言い換えれば、被験文字列取得部３６は、最長一致法にしたがって、原本文書データ内の被験文字列と、照合辞書内の個人情報文字列とのマッチング処理を実行する。また、被験文字列取得部３６は、上記先頭文字から始まる被験文字列を、該当インデックスの最大文字列長から最小文字列長の範囲で抽出する。
【００３４】
判定部３８は、照合辞書に格納された個人情報文字列の中に、被験文字列取得部３６により取得された被験文字列が存在するか否かを判定することにより、原本文書データ中に個人情報文字列が存在するか否かを判定する。実施の形態の判定部３８は、「std:unordered_map」クラスに用意された所定のキー検索メソッドをコール（例えば引数に被験文字列を指定する）する。そして、被験文字列が照合辞書のハッシュテーブルに存在すること、または存在しないことを示す返値または参照値を取得する。
【００３５】
判定部３８は、照合辞書に格納された個人情報文字列の中に、被験文字列取得部３６により取得された被験文字列が存在する場合、個人情報に合致した今回の被験文字列をマスク対象文字列として識別する。そして、原本文書データ内のマスク対象文字列の位置を示す情報（以下「マスク対象情報」と呼ぶ。）を記憶部２２に格納する。マスク対象情報は、原本文書データから検出された複数のマスク対象文字列のそれぞれについて、原本文書データ内の開始位置と長さを含んでもよい。被験文字列取得部３６は、原本文書データにおける検査対象をマスク対象文字列の分進める。言い換えれば、マスク対象文字列を除外した新たな検査対象を識別する。そして、新たな検査対象の先頭文字に基づいて、新たな被験文字列を取得する。
【００３６】
判定部３８は、照合辞書に格納された個人情報文字列の中に、被験文字列取得部３６により取得された被験文字列が存在しない場合、その旨を被験文字列取得部３６に通知する。既述したように、被験文字列取得部３６は、個人情報文字列と不一致だったそれまでの被験文字列を短くした新たな被験文字列を取得する。
【００３７】
文書変換部４０は、判定部３８により記録されたマスク対象情報が示す各マスク対象文字列の位置情報にしたがって、原本文書データ内の各マスク対象文字列に対するマスク処理を実行する。そして、原本文書データ内の個人情報をマスクしたマスク済文書を生成する。例えば、本出願人が特開２０１３−２４６５４７号公報にて提案しているように、文書変換部４０は、原本文書データ内のマスク対象文字列を、個人情報を隠匿する文字列であり、かつ、マスク対象文字列の形式に対応したマスク用文字列へ置換えてもよい。
【００３８】
変換文書出力部４２は、文書変換部４０により生成されたマスク済文書データを記録メディア１６に格納する。例えば、原本文書データがデータベースのテーブルデータの場合は、個人情報をマスク済のテーブルデータを記録メディア１６へ格納してもよい。また原本文書データがログファイル等のテキストデータの場合は、個人情報をマスク済のテキストデータを記録メディア１６へ格納してもよい。記録メディア１６に記録されたマスク済文書データは、開発機１２に読み込まれ、開発機１２での保守作業で使用される。例えば、テストのための入力データや照合用のデータとして使用される。
【００３９】
以上の構成によるデータ変換装置１４の動作を説明する。
図３は、図１のデータ変換装置１４の動作を示すフローチャートである。個人情報記録部３０は、外部から入力された個人情報文字列であり、データ変換装置１４において検出すべき個人情報文字列（ここでは「登録対象文字列」と呼ぶ。）を受け付けると（Ｓ１０のＹ）、登録対象文字列の先頭文字に対応したインデックスを生成する（Ｓ１２）。個人情報記録部３０は、長さ情報保持部２８において当該インデックスに対応づけられた長さ情報であり、言い換えれば、登録対象文字列を登録すべき個人情報辞書（ここでは「登録先辞書」と呼ぶ。）に関する最大文字列長と最小文字列長を読み込む。ここでは長さを文字数とするが、バイト長であってもよい。
【００４０】
以下、登録先辞書の最小文字列長と最大文字列長は、長さ情報保持部２８において上記Ｓ１２で生成したインデックスに対応づけられた最小文字列長と最大文字列長と言える。個人情報記録部３０は、登録先辞書の最小文字列長が初期値の場合（Ｓ１４のＹ）、または、登録先辞書の最小文字列長が初期値でないが（Ｓ１４のＮ）、その最小文字列長が登録対象文字列より長い場合（Ｓ１６のＹ）、登録対象文字列の長さを登録先辞書の最小文字列長に設定する（Ｓ１８）。すなわち、長さ情報保持部２８において上記Ｓ１２で生成したインデックスに対応づけられた最小文字列長をより小さくする。その一方、登録先辞書の最小文字列長が登録対象文字列長以下であれば（Ｓ１６のＮ）、Ｓ１８をスキップする。
【００４１】
また個人情報記録部３０は、登録先辞書の最大文字列長が初期値の場合（Ｓ２０のＹ）、または、登録先辞書の最大文字列長が初期値でないが（Ｓ２０のＮ）、その最大文字列長が登録対象文字列より短い場合（Ｓ２２のＹ）、登録対象文字列の長さを登録先辞書の最大文字列長に設定する（Ｓ２４）。すなわち、長さ情報保持部２８において上記Ｓ１２で生成したインデックスに対応づけられた最大文字列長をより大きくする。その一方、登録先辞書の最大文字列長が登録対象文字列長以上であれば（Ｓ２２のＮ）、Ｓ２４をスキップする。個人情報記録部３０は、登録対象文字列を登録先辞書へ格納する（Ｓ２６）。新たな登録対象文字列を受け付けなければ（Ｓ１０のＮ）、以降の処理をスキップして本図のフローを終了する。
【００４２】
このように、実施の形態のデータ変換装置１４は、登録対象文字列をそのインデックスに対応する個人情報辞書へ登録する際に、登録対象文字列の長さに応じてそのインデックスに関する最小文字列長および最大文字列長を更新する。長さ情報保持部２８は、被験文字列において先頭文字となりうるインデックス毎に、各インデックスに対応する個人情報辞書の最小文字列長および最大文字列長を保持する。この構成により、各インデックスの長さ情報を、個人情報辞書における最新の個人情報文字列格納状況を反映した内容に維持できる。
【００４３】
図４は、各インデックスに対応する個人情報辞書を模式的に示す。図４の（ａ）は、インデックス「ａ」の個人情報辞書を示し、図４の（ｂ）は、インデックス「ｂ」の個人情報辞書を示し、図４の（ｃ）は、インデックス「ｃ」の個人情報辞書を示している。同図の「ａ」「ｂ」「ｃ」等のアルファベット１文字は、日本語（漢字や平仮名等）の１文字を表している。以降の図５、図７も同様である。例えば、図４の（ａ）の第１レコード「ａｂｃ」と第２レコード「ａｆｃ」はそれぞれ、名前を表す個人情報文字列「はなこ」と「はるこ」であってもよい。
【００４４】
図５は、各インデックスに対応する長さ情報を模式的に示す。既述したように、実施の形態の長さ情報は、最大文字列長と最短文字列長の両方を含む。
【００４５】
図６も、図１のデータ変換装置１４の動作を示すフローチャートである。原本文書取得部３２は、本番機１０から、個人情報を含むかもしれない原本文書データを取得する。被験文字列取得部３６は、原本文書データにおける検査対象の先頭文字に基づいてインデックスを識別する（Ｓ３０）。検査対象は、例えばデータベーステーブルの各レコードの文字列や各カラムの文字列であってもよい。また、テキストファイルの各行に記録された文字列であってもよい。さらにまた、データ変換装置１４が１回の読込み処理により原本文書データから読み込むテキストデータであってもよい。
【００４６】
被験文字列取得部３６は、識別したインデックスの長さ情報を参照して、そのインデックスを有する複数の個人情報文字列、すなわち照合対象となる個人情報辞書（以下「照合辞書」と呼ぶ。）に格納された複数の個人情報文字列についての最大文字列長と最小文字列長を識別する。以下、照合辞書の最小文字列長と最大文字列長は、識別したインデックスの最小文字列長と最大文字列長とも言える。照合辞書の最大文字列長が初期値でなければ（Ｓ３２のＮ）、Ｓ３０で識別したインデックス（言い換えれば先頭文字）に基づくループ処理を実行する（Ｓ３４〜Ｓ４２）。具体的には、変数ｉの初期値を最大文字列長、増分を「−１」、変数ｉが最小文字列長未満になることを終了条件とするループ処理を実行する。
【００４７】
被験文字列取得部３６は、照合辞書の最大文字列長をｉに代入する（Ｓ３４）。被験文字列取得部３６は、原本文書データの検査対象の先頭からｉ文字分を被験文字列として読み込む（Ｓ３６）。判定部３８は、照合辞書に格納された個人情報文字列の中に被験文字列が存在するか否かを判定する。照合辞書内に被験文字列が存在しなければ（Ｓ３８のＮ）、被験文字列取得部３６はｉをデクリメントする（Ｓ４０）。ｉが照合辞書の最小文字列長以上であれば（Ｓ４２のＮ）、Ｓ３６に戻る。
【００４８】
ｉが照合辞書の最小文字列長未満であれば（Ｓ４２のＹ）、今回のインデックスに基づくループ処理を抜ける。被験文字列取得部３６は、検査対象の先頭位置を１つ進める（Ｓ４４）。言い換えればインデックスとする文字位置を１つ進め、さらに言い換えれば被験文字列の開始位置を１つ進める。なお、照合辞書の最大文字列長が初期値の場合（Ｓ３２のＹ）、Ｓ３０で識別したインデックスの個人情報文字列は存在しないため、検査対象の先頭位置を１つ進める（Ｓ４４）。
【００４９】
照合辞書内に被験文字列が存在すれば（Ｓ３８のＹ）、今回のインデックスに基づくループ処理を抜ける。判定部３８は、原本文書データにおける被験文字列の位置情報を記憶部２２のマスク対象情報に格納する（Ｓ４６）。被験文字列取得部３６は、検査対象の先頭位置を今回の被験文字列の長さ分進める（Ｓ４８）。言い換えればインデックスとする文字位置を今回の被験文字列の長さ分進め、さらに言い換えれば次回の被験文字列の開始位置を今回の被験文字列の長さ分進める。
【００５０】
Ｓ４４またはＳ４８の結果、原本文書データにおける検査対象の終端（例えば所定の終端文字）でなければ（Ｓ５０のＮ）、Ｓ３０に戻る。原本文書データにおける検査対象の終端に達した場合（Ｓ５０のＹ）、本図のフローを終了する。以降、文書変換部４０は、マスク対象情報を参照し、原本文書データ内の個人情報文字列に対するマスキング処理を実行してマスク済文書データを生成する。変換文書出力部４２は、マスク済文書データを記録メディア１６へ格納する。
【００５１】
図７は、データ変換装置１４による個人情報検出処理の一例を説明する図である。ここでは、個人情報辞書は図４の内容とし、長さ情報は図５の内容とする。図７の（ａ）は、原本文書データにおいて検査対象となる文字列の全体を示す。被験文字列取得部３６は、最初の１文字「ａ」をインデックスとして、「ａ」に対応づけられた最大文字列長（＝３）から最小文字列長（＝２）までの被験文字列を抽出する。例えば、「ａｂｃ」と「ａｂ」を被験文字列として抽出する。判定部３８は、被験文字列と、インデックス「ａ」に対応する個人情報辞書との突き合わせを実行する。ここでは、図７の（ｂ）に示す被験文字列「ａｂｃ」が、図４の（ａ）の個人情報文字列と一致する。
【００５２】
被験文字列取得部３６は、図７の（ｃ）に示すように、原本文書データの検査対象を、個人情報文字列として検出された被験文字列「ａｂｃ」の分進める。被験文字列取得部３６は、最初の１文字「ｄ」をインデックスとして、「ｄ」に対応づけられた最大文字列長（＝３）から最小文字列長（＝１）までの被験文字列を抽出する。判定部３８は、被験文字列と、インデックス「ｄ」に対応する個人情報書との突き合わせを実行する。ここでは、図７の（ｄ）に示す被験文字列「ｄ」が、図４の（ｂ）の個人情報文字列と一致する。
【００５３】
被験文字列取得部３６は、図７の（ｅ）に示すように、原本文書データの検査対象を、個人情報文字列として検出された被験文字列「ｄ」の分進める。被験文字列取得部３６は、最初の１文字「ｅ」をインデックスとして、「ｅ」に対応づけられた最大文字列長（＝３）から最小文字列長（＝２）までの被験文字列を抽出する。判定部３８は、被験文字列と、インデックス「ｅ」に対応する個人情報書との突き合わせを実行する。ここで図４の（ｃ）には、被験文字列に一致する個人情報文字列が存在しない。被験文字列取得部３６は、図７の（ｆ）に示すように、原本文書データの検査対象を１文字分進める。以降、被験文字列の抽出処理と、被験文字列と個人情報辞書とのマッチング処理を、検査対象の終端に至るまで繰り返す。
【００５４】
実施の形態のデータ変換装置１４によると、個人情報をマスクすべき原本文書データ内に、辞書に格納された個人情報文字列が存在するか否かを効率的に検出できる。具体的には、データ変換装置１４は、原本文書から被験文字列を抽出する範囲を、個人情報辞書に格納された個人情報文字列の長さ情報に基づいて制限する。より具体的には、原本文書の検査対象の先頭文字の種類と、その先頭文字の種類に予め対応づけられた長さ情報に応じて、その先頭文字から開始される被験文字列の長さを、個人情報文字列が存在する範囲に限定する。これにより、被験文字列と辞書との照合回数（探索回数）を低減できる。
【００５５】
また、個人情報辞書に格納される個人情報文字列の個数は膨大である。そのため、個人情報辞書内の個人情報文字列のそれぞれが文書中に存在するか否かを探索する手法では、探索回数が膨大になり、個人情報文字列の検出に長時間を要する。データ変換装置１４は、原本文書データから被験文字列を抽出し、その被験文字列をキーとして個人情報辞書を探索するため、探索回数を低減でき、個人情報文字列の検出に要する時間を低減できる。
【００５６】
またデータ変換装置１４は、原本文書データから抽出した被験文字列と、個人情報辞書内の個人情報文字列とのマッチングを最長一致法により実行する。これにより、個人情報の検出漏れを抑制することができ、言い換えれば、個人情報の検出精度を向上できる。また、被験文字列が個人情報文字列と一致した場合の、原本文書データ中の検査対象の削減量が大きくなり、個人情報辞書に対する探索回数を低減しやすくなる。
【００５７】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下変形例を示す。
【００５８】
第１変形例を説明する。上記実施の形態の長さ情報保持部２８は、インデックスごとの最大文字列長と最小文字列長を保持した。変形例として、長さ情報保持部２８は、各インデックスに対応する個人情報辞書に格納された複数の個人情報文字列それぞれの文字列長を保持してもよい。言い換えれば、インデックスごとの最大文字列長と最小文字列長に加えて、最大文字列長と最小文字列長の中間の値であり、個人情報文字列が存在する文字列長（以下「中間文字列長」とも呼ぶ。）をさらに保持してもよい。
【００５９】
本変形例の個人情報記録部３０は、あるインデックスに対応する個人情報辞書に個人情報文字列を格納する際、当該インデックスに対応づけられた文字列長の中に、当該個人情報文字列の文字列長が含まれなければ、当該個人情報文字列の文字列長を当該インデックスに新たに対応づけて記録する。本変形例の被験文字列取得部３６は、あるインデックスの被験文字列を抽出する際に、検査対象の先頭文字から当該インデックスの最大文字列長の文字列を最初の被験文字列として抽出する。その後、被験文字列取得部３６は、検査対象の先頭文字から当該インデックスの中間文字列長の文字列を次の被験文字列として抽出することにより、被験文字列を段階的に短くしていく。
【００６０】
例えば、ある先頭文字（インデックス）に対応づけられた文字列長が１０、６、５、３、であるとする。この場合、被験文字列取得部３６は、当該先頭文字から開始する被験文字列の長さを、１０文字、６文字、５文字、３文字の順に短くしていく。すなわち、実施の形態では被験文字列の長さを１文字ずつ短くしたが、本変形例では辞書に実際に格納された個人情報文字列の長さに整合するように被験文字列を短くしていく。本変形例では、個人情報文字列が存在しない長さの被験文字列の生成をスキップし、無駄な辞書探索を抑制できる。この結果、辞書に格納された個人情報文字列が原本文書データ内に存在するか否かを一層効率的に判定できる。
【００６１】
第２変形例を説明する。上記実施の形態とは逆に、被験文字列取得部３６は、あるインデックスの被験文字列を抽出する際に、検査対象の先頭文字から、当該インデックスの最小文字列長の文字列を最初の被験文字列として抽出してもよい。その後、被験文字列取得部３６は、当該先頭文字から開始される被験文字列を段階的に長くしていき、当該インデックスの最大文字列長の文字列を最後の被験文字列として抽出してもよい。すなわち、最小一致法にて、原本文書データ中の個人情報文字列を検出してもよい。
【００６２】
同じ先頭文字を有する複数の個人情報文字列の中には、ある共通の個人情報文字列を先頭部分に含みつつ、先頭部分以降が異なるものがある。したがって、原本文書データや、その中の特定のレコードまたはカラムに個人情報文字列が含まれるか否かを検出すればよい場合、本変形例の態様により検出の効率性を高められる。本変形例の個人情報文字列検出が特に好適な例として、判定部３８は、原本文書データの特定のレコードまたはカラム内に少なくとも１つの個人情報文字列が存在するかを判定してもよい。文書変換部４０は、少なくとも１つの個人情報文字列が存在したレコードまたはカラム内のデータ全体をマスクしてもよい。
【００６３】
また、上記実施の形態では、辞書に登録された複数の個人情報文字列の少なくとも１つが文書中に存在するかを検査する例を示したが、実施の形態で提案した技術は、個人情報以外の文字列全般の存否確認に適用可能である。すなわち、辞書に登録された複数の検査文字列の少なくとも１つが文書中に存在するか否かを検出する処理全般に適用でき、その検出処理の効率化・迅速化を実現できる。
【００６４】
また、上記実施の形態では、個人情報文字列を検出した場合の後処理として、その個人情報文字列をマスクする例を示したが、様々な種類の検査文字列を検出後の後処理としては、様々なものが想定される。例えば、原本文書データ内に存在した検査文字列に関する情報（例えば文書内での位置情報）を所定のログやテキストファイルに記録してもよい。また、所定のアラート情報をユーザや機器へ通知してもよい。また、原本文書データを消去、隔離、移動等行ってもよい。
【００６５】
また、上記実施の形態では、原本文書データ内の文字列、および、個人情報文字列を日本語の文字列とした。上記実施の形態に記載の技術は、日本語に限らず、様々な言語の文字列に適用可能である。なお、日本語や中国語等、単語で文を区切らずに表記する言語の場合、インデックスごとの長さ情報に応じて被験文字列の長さを限定する実施の形態に記載の技術の優位性がさらに大きくなる
【００６６】
上述した実施の形態および変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施の形態および変形例それぞれの効果をあわせもつ。また、請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
【符号の説明】
【００６７】
１４  データ変換装置、  ２６  個人情報辞書保持部、  ２８  長さ情報保持部、  ３０  個人情報記録部、  ３２  原本文書取得部、  ３４  個人情報検出部、  ３６  被験文字列取得部、  ３８  判定部、  ４０  文書変換部、  ４２  変換文書出力部。
【図１】
2017146637.tif 000003
【図２】
2017146637.tif 000004
【図３】
2017146637.tif 000005
【図４】
2017146637.tif 000006
【図５】
2017146637.tif 000007
【図６】
2017146637.tif 000008
【図７】
2017146637.tif 000009