以下に添付図面を参照して、本発明にかかるデータ処理プログラム、およびデータ処理方法の実施の形態を詳細に説明する。
(データ処理プログラムによるレシートデータ処理の一例)
図1は、実施の形態にかかるデータ処理プログラムによるレシートデータ処理の一例を示す説明図である。データ処理装置100は、データ処理プログラムを実行するコンピュータである。
データ処理装置100は、複数のレシートデータを有する。ここで、レシートデータとは、レシートの印刷態様に合わせて記述されたテキストデータである。レシートデータとは、例えば、複数の空白文字、レシートを発行した店舗の名称を表す複数の通常文字、および複数の空白文字を並べた文字列を含むレシートの行を表す行データを有するデータである。
データ処理装置100は、データ処理プログラムを実行することによって、複数のレシートデータに共通するデータ範囲を特定する。ここで、データ範囲とは、行の範囲である。共通するデータ範囲とは、行の行属性が複数のレシートデータにおいて一致する範囲である。共通するデータ範囲とは、例えば、ヘッダー範囲またはフッター範囲、あるいは暫定ヘッダー範囲または暫定フッター範囲である。
行の行属性とは、行に含まれる文字の種類の並び方を表す情報である。暫定ヘッダー範囲とは、ヘッダー範囲を含み、最下行側にヘッダー範囲ではない行の範囲が含まれる範囲である。暫定フッター範囲とは、フッター範囲を含み、最上行側にフッター範囲ではない行の範囲が含まれる範囲である。
図1(A)において、データ処理装置100は、レシートデータR1とレシートデータR2とを有する。ここで、データ処理装置100は、各々のレシートデータにおける各々の行の行属性を特定する。データ処理装置100は、例えば、レシートデータR1における先頭行の行属性として「複数の空白文字→複数の通常文字→複数の空白文字の順番になる文字の種類の並び方」を特定し、行属性の識別子「R01」を付与する。
次に、データ処理装置100は、各々のレシートデータの先頭行からの複数のレシートデータにおいて行属性が一致するデータ範囲を特定する。データ処理装置100は、例えば、各々のレシートデータの先頭行から4行目までのように「R01→R02→R03→R04の順番になる並び方」で行属性の並び方が一致する範囲を特定する。そして、データ処理装置100は、特定したデータ範囲を、暫定ヘッダー範囲に決定する。
図1(B)において、データ処理装置100は、暫定ヘッダー範囲の最下行から順に、暫定ヘッダー範囲とは異なるデータ範囲に含まれる行の行属性と一致しなくなるまで、異なるデータ範囲に含まれる行の行属性と一致するか否かを判定する。
データ処理装置100は、例えば、暫定ヘッダー範囲の最下行になる4行目の行属性の識別子「R04」が、暫定ヘッダー範囲とは異なるデータ範囲になる5行目から10行目のうちの6行目の行属性の識別子「R04」と一致すると判定する。次に、データ処理装置100は、暫定ヘッダー範囲の3行目の行属性の識別子「R03」が、暫定ヘッダー範囲とは異なるデータ範囲になる5行目から10行目のうちの行の行属性の識別子と一致しないと判定する。
次に、データ処理装置100は、一致すると判定した行を暫定ヘッダー範囲から除外して、暫定ヘッダー範囲を更新する。データ処理装置100は、例えば、暫定ヘッダー範囲から最下行になる4行目を除外する。そして、データ処理装置100は、暫定ヘッダー範囲になる1行目から3行目のデータ範囲を、ヘッダー範囲に決定する。
これにより、データ処理装置100は、レシートデータのヘッダー範囲を、自動で決定することができる。このため、データ処理装置100の利用者は、レシートデータのヘッダー範囲を決定しなくてもよくなる。また、データ処理装置100は、複数のレシートデータからヘッダー範囲を決定するため、ヘッダー範囲の決定精度を向上させることができる。
ここでは、データ処理装置100は、レシートデータのヘッダー範囲を特定したが、これに限らない。例えば、データ処理装置100は、レシートデータのフッター範囲を特定してもよい。また、例えば、データ処理装置100は、レシートデータのヘッダー範囲およびフッター範囲を特定してもよい。
データ処理装置100は、具体的には、各々のレシートデータの最終行からの複数のレシートデータにおいて行属性が一致するデータ範囲を特定することにより、レシートデータの暫定フッター範囲を特定する。次に、データ処理装置100は、暫定フッター範囲の最上行から順に、暫定フッター範囲とは異なるデータ範囲に含まれる行の行属性と一致しなくなるまで、異なるデータ範囲に含まれる行の行属性と一致するか否かを判定する。そして、データ処理装置100は、一致すると判定した行を暫定フッター範囲から除外することにより、レシートデータのフッター範囲を特定する。
これにより、データ処理装置100は、レシートデータのフッター範囲を、自動で決定することができる。このため、データ処理装置100の利用者は、レシートデータのフッター範囲を決定しなくてもよくなる。また、データ処理装置100は、複数のレシートデータからフッター範囲を決定するため、フッター範囲の決定精度を向上させることができる。
(データ処理装置100のハードウェア構成例)
図2は、データ処理装置100のハードウェア構成例を示すブロック図である。図2において、データ処理装置100は、CPU(Central Processing Unit)201と、ROM(Read Only Memory)202と、RAM(Random Access Memory)203と、磁気ディスクドライブ(Hard Disk Drive)204と、磁気ディスク205と、光ディスクドライブ206と、光ディスク207と、ディスプレイ208と、インターフェース(I/F:Interface)209と、キーボード210と、マウス211と、スキャナ212と、プリンタ213と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。
ここで、CPU201は、データ処理装置100の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスクドライブ204は、CPU201の制御にしたがって磁気ディスク205に対するデータのリード/ライトを制御する。磁気ディスク205は、磁気ディスクドライブ204の制御で書き込まれたデータを記憶する。
光ディスクドライブ206は、CPU201の制御にしたがって光ディスク207に対するデータのリード/ライトを制御する。光ディスク207は、光ディスクドライブ206の制御で書き込まれたデータを記憶したり、光ディスク207に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ208は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ208は、例えば、液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
I/F209は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク214に接続され、このネットワーク214を介して他の装置に接続される。そして、I/F209は、ネットワーク214と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F209には、例えば、モデムやLANアダプタなどを採用することができる。
キーボード210は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス211は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ212は、画像を光学的に読み取り、データ処理装置100内に画像データを取り込む。なお、スキャナ212は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ213は、画像データや文書データを印刷する。プリンタ213には、例えば、レーザプリンタやインクジェットプリンタを採用することができる。また、光ディスクドライブ206、光ディスク207、ディスプレイ208、キーボード210、マウス211、スキャナ212、およびプリンタ213の少なくともいずれか1つは、なくてもよい。
(文字属性変換対応表300の一例)
次に、図3を用いて、文字属性変換対応表300の一例について説明する。文字属性変換対応表300は、例えば、図2に示したRAM203、磁気ディスク205、光ディスク207などの記憶領域によって実現される。
図3は、文字属性変換対応表300の一例を示す説明図である。文字属性変換対応表300は、文字の種類ごとに、文字種項目と、記号項目とを有し、文字の種類ごとに各項目に情報が設定されることにより、レコードを記憶する。文字種項目には、文字の種類が記憶される。記号項目には、文字種項目の種類に対応する、文字種項目の種類の文字の変換先になる記号が記憶される。
例えば、レコード301は、文字の種類「英字、かな文字、漢字」と、文字の種類「英字、かな文字、漢字」に対応する記号「C」と、を含む文字属性対応情報を示す。以下の説明では、英字、かな文字、漢字をまとめて「通常文字」と表記する場合がある。また、例えば、レコード302は、文字の種類「数字」と、文字の種類「数字」に対応する記号「N」と、を含む文字属性対応情報を示す。
また、例えば、レコード303は、文字の種類「半角/全角空白文字」と、文字の種類「半角/全角空白文字」に対応する記号「B」と、を含む文字属性対応情報を示す。また、例えば、レコード304は、文字の種類「記号文字」と、文字の種類「記号文字」に対応する記号「@」と、を含む文字属性対応情報を示す。
また、例えば、レコード305は、文字の種類「改行文字」と、文字の種類「改行文字」に対応する記号がなく、文字の種類「改行文字」である場合には文字を変換しないことを表す情報になる「変換しない」と、を含む文字属性対応情報を示す。また、例えば、レコード306は、文字の種類「直前の文字と同じ種類」と、文字の種類「直前の文字と同じ種類」に対応する記号「*」と、を含む文字属性対応情報を示す。
(データ処理装置100の機能的構成例)
次に、図4を用いて、データ処理装置100の機能的構成例について説明する。
図4は、データ処理装置100の機能的構成例を示すブロック図である。データ処理装置100は、決定部401と、特定部402と、除外部403と、出力部404と、受付部405と、記憶部406と、変換部407とを含む。
決定部401は、複数のレシートデータの各々のレシートデータに含まれる複数の行の各々の行に存在する文字の属性に基づいて、各々の行の行属性を決定する。ここで、レシートデータとは、レシートの印刷態様に合わせて記述されたテキストデータである。文字の属性とは、文字の種類を表す情報である。行の行属性とは、行に含まれる文字の種類の並び方を表す情報である。
決定部401は、例えば、図3に示した文字属性変換対応表300に基づいて、行に含まれる文字を記号に変換して、変換した結果を行の行属性に決定して、行属性の識別子を付与する。決定部401は、具体的には、1個目のレシートデータの先頭行「 ○×スーパー 」を「B*C*B*」に変換して、変換した結果「B*C*B*」を行属性に決定する。次に、決定部401は、行属性「B*C*B*」が既存の行属性であるか否かを判定する。決定部401は、既存の行属性ではないため、行属性「B*C*B*」に新たな識別子「R01」を付与して、行属性「B*C*B*」と行属性の識別子「R01」とを対応付けて、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶する。
また、決定部401は、具体的には、1個目のレシートデータの4行目の行「アイスクリーム 」を「C*B*」に変換して、変換した結果「C*B*」を行属性に決定する。次に、決定部401は、行属性「C*B*」が既存の行属性であるか否かを判定する。決定部401は、既存の行属性ではないため、行属性「C*B*」に新たな識別子「R04」を付与して、行属性「C*B*」と行属性の識別子「R04」とを対応付けて、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶する。
また、決定部401は、具体的には、1個目のレシートデータの6行目の行「オレンジジュース 」を「C*B*」に変換して、変換した結果「C*B*」を行属性に決定する。次に、決定部401は、行属性「C*B*」が既存の行属性であるか否かを判定する。決定部401は、4行目の行の行属性と同一の既存の行属性であるため、新たな識別子を付与しない。
また、決定部401は、1個目のレシートデータに対応付けて、1個目のレシートデータの各々の行と、行属性の識別子とを対応付けたデータを作成して、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶する。以下の説明では、各々の行と、行属性の識別子とを対応付けたデータを「行パターンデータ」と表記する場合がある。
また、決定部401は、具体的には、別の2個目のレシートデータの先頭行「 ○×スーパー 」を「B*C*B*」に変換して、変換した結果「B*C*B*」を行属性に決定する。次に、決定部401は、行属性「B*C*B*」が既存の行属性であるか否かを判定する。決定部401は、1個目のレシートデータの1行目の行の行属性と同一の既存の行属性であるため、新たな識別子を付与しない。また、決定部401は、2個目のレシートデータに対応付けて、2個目のレシートデータの各々の行と、行属性の識別子とを対応付けたデータを作成して、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶する。
これにより、特定部402は、決定部401によって作成された行パターンデータを記憶領域から取得することができる。決定部401は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、その機能を実現する。決定されたデータは、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
特定部402は、決定した各々の行の行属性を比較して、各々のレシートデータの先頭行または最終行からの行属性が複数のレシートデータにおいて一致するデータ範囲を特定する。ここで、データ範囲とは、先頭行からの行の行属性の並び方が複数のレシートデータにおいて一致する、先頭行からいずれかの行までのデータ範囲である。データ範囲とは、例えば、ヘッダー範囲またはフッター範囲である。
特定部402は、例えば、各々の行の行属性を比較して、各々のレシートデータの先頭行からの行属性が複数のレシートデータにおいて一致する第1データ範囲を特定する。特定部402は、具体的には、1個目のレシートデータに対応付けられた行パターンデータと2個目のレシートデータに対応付けられた行パターンデータとを比較する。次に、特定部402は、比較した結果、先頭行からの4行分の行の行属性の並び方が、「R01→R02→R03→R04の順番になる並び方」で一致するとして、先頭行からの4行分のデータ範囲を特定する。そして、特定部402は、特定したデータ範囲を、暫定ヘッダー範囲に決定する。
また、特定部402は、例えば、各々の行の行属性を比較して、各々のレシートデータの最終行からの行属性が複数のレシートデータにおいて一致する第2データ範囲を特定する。特定部402は、具体的には、1個目のレシートデータに対応付けられた行パターンデータと2個目のレシートデータに対応付けられた行パターンデータとを比較する。次に、特定部402は、比較した結果、最終行からの3行分の行の行属性の並び方が、「R06→R06→R06の順番になる並び方」で一致するとして、最終行からの3行分のデータ範囲を特定する。そして、特定部402は、特定したデータ範囲を、暫定フッター範囲に決定する。
これにより、除外部403は、特定部402によって特定された暫定ヘッダー範囲および暫定フッター範囲を記憶領域から取得して、ヘッダー範囲およびフッター範囲を確定することができる。特定部402は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、その機能を実現する。特定されたデータは、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
除外部403は、データ範囲の最下行または最上行の行属性が、第3データ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、データ範囲の最下行または最上行の行属性が、第3データ範囲に含まれるいずれかの行の行属性と一致するか否かを判定する。そして、除外部403は、一致すると判定したことに応じて、データ範囲から最下行または最上行を除外する。
ここで、第1データ範囲とは、上述したヘッダー範囲である。第2データ範囲とは、上述したフッター範囲である。第3データ範囲とは、第1データ範囲および第2データ範囲とは異なるデータ範囲である。第3データ範囲とは、例えば、上述したヘッダー範囲およびフッター範囲とは異なるデータ範囲である。以下の説明では、第3データ範囲を「明細範囲」と表記する場合がある。
除外部403は、例えば、第1データ範囲の最下行の行属性が、第3データ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、第1データ範囲の最下行の行属性が、第3データ範囲に含まれるいずれかの行の行属性と一致するか否かを判定する。そして、除外部403は、一致したと判定したことに応じて、第1データ範囲から最下行を除外する。除外部403は、具体的には、ヘッダー範囲の最下行の行属性の識別子「R04」が、第3データ範囲に含まれる行の行属性の識別子「R04」と一致すると判定する。そして、除外部403は、ヘッダー範囲を先頭行からの4行分のデータ範囲から最下行を除外した先頭行からの3行分のデータ範囲に更新する。
また、除外部403は、例えば、第1データ範囲の最下行の行属性が、第4データ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、第1データ範囲の最下行の行属性が第4データ範囲に含まれるいずれかの行の行属性と一致するか否かを判定してもよい。ここで、第4データ範囲とは、第1データ範囲とは異なるデータ範囲である。そして、除外部403は、一致したと判定したことに応じて、第1データ範囲から最下行を除外する。
除外部403は、例えば、第2データ範囲の最上行の行属性が、第3データ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、第2データ範囲の最上行の行属性が、第3データ範囲に含まれるいずれかの行の行属性と一致するか否かを判定する。そして、除外部403は、一致したと判定したことに応じて、第2データ範囲から最上行を除外する。除外部403は、具体的には、フッター範囲の最上行の行属性の識別子「R06」が、第3データ範囲に含まれる行の行属性の識別子と一致しないため、フッター範囲を最終行からの3行分のデータ範囲のままにして、処理を終了する。
また、除外部403は、例えば、第2データ範囲の最上行の行属性が、第5データ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、第2データ範囲の最上行の行属性が第5データ範囲に含まれるいずれかの行の行属性と一致するか否かを判定してもよい。ここで、第5データ範囲とは、第2データ範囲とは異なるデータ範囲である。そして、除外部403は、一致したと判定したことに応じて、第2データ範囲から最上行を除外する。
これにより、除外部403は、ヘッダー範囲およびフッター範囲を確定することができる。除外部403は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、その機能を実現する。除外されたデータは、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
出力部404は、複数のレシートデータのうちのいずれかのレシートデータに含まれるいずれかの行の記述内容と行属性とを対応付けて出力する。また、出力部404は、いずれかのレシートデータに含まれるいずれかの行の記述内容と行属性とを対応付けて出力するとともに、第1データ範囲と第2データ範囲とを表す情報を出力する。出力部404は、例えば、レシートデータの各々の行の記述内容と行属性と、レシートデータにおけるヘッダー範囲とフッター範囲と、を出力する。
出力形式としては、例えば、ディスプレイ208への表示、プリンタ213への印刷出力、I/F209による外部装置への送信がある。また、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶することとしてもよい。
これにより、データ処理装置100の利用者は、出力部404によって出力された記述内容と行属性とに基づいて、行のデータ形式の変換規則を作成することができる。出力部404は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F209により、その機能を実現する。
受付部405は、いずれかの行の行属性と、いずれかの行を特定のデータ形式に変換する変換規則と、を受け付ける。受付部405は、例えば、行の行属性の識別子「R01」と、行に含まれる文字列をパターン化して表した正規表現の情報と行のデータ形式を変換するデータ形式とを対応付けた変換規則と、を受け付けて、記憶部406に格納する。
また、受付部405は、例えば、複数の行をグループ化する。次に、受付部405は、グループ化した複数の行の各々の行の行属性の識別子と、各々の行に含まれる文字列をパターン化して表した正規表現の情報と各々の行のデータ形式を変換するデータ形式とを対応付けた変換規則と、を受け付ける。そして、受付部405は、受け付けたデータを記憶部406に格納する。
受付部405は、具体的には、ヘッダー範囲に含まれるすべての行をグループ化する。そして、受付部405は、グループ化したヘッダー範囲に含まれる各々の行の行属性の識別子と、各々の行に含まれる文字列をパターン化して表した正規表現の情報と各々の行のデータ形式を変換するデータ形式とを対応付けた変換規則と、を受け付ける。
受付部405は、具体的には、フッター範囲に含まれるすべての行をグループ化する。そして、受付部405は、グループ化したフッター範囲に含まれる各々の行の行属性の識別子と、各々の行に含まれる文字列をパターン化して表した正規表現の情報と各々の行のデータ形式を変換するデータ形式とを対応付けた変換規則と、を受け付ける。
受付部405は、具体的には、明細範囲に含まれる連続する2行分の行ごとにグループ化する。そして、受付部405は、グループ化した2行分の各々の行の行属性の識別子と、各々の行に含まれる文字列をパターン化して表した正規表現の情報と各々の行のデータ形式を変換するデータ形式とを対応付けた変換規則と、を受け付ける。
これにより、変換部407は、受付部405によって受け付けられた変換規則に基づいて、レシートデータのデータ形式を変換することができる。受付部405は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F209により、その機能を実現する。受け付けられたデータは、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
記憶部406は、行の行属性に対応付けて行属性の行のデータ形式を特定のデータ形式に変換する変換規則を記憶する。記憶部406は、レシートデータにおいて連続する複数の行の行属性のパターンに対応付けて複数の行の各々の行のデータ形式を特定のデータ形式に変換する変換規則を記憶する。記憶部406は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置により、その機能を実現する。
変換部407は、記憶部406に基づいて、複数のレシートデータのうちのいずれかのレシートデータの行属性の行のデータ形式を特定のデータ形式に変換する。変換部407は、記憶部406に基づいて、複数のレシートデータのうちのいずれかのレシートデータの行属性のパターンに対応する複数の行の各々の行のデータ形式を特定のデータ形式に変換する。
これにより、変換部407は、レシートデータのデータ形式を、レシートデータの統計処理のための特定のデータ形式に変更することができる。変換部407は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、その機能を実現する。変換されたデータは、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
(データ処理の内容)
ここで、図5〜図14を用いて、データ処理の内容について説明する。
〈レシートデータの一例〉
まず、図5を用いて、データ処理の対象になる、データ処理装置100が有する複数のレシートデータの各々のレシートデータの一例について説明する。
図5は、レシートデータの一例を示す説明図である。図5に示すように、データ処理装置100は、4個のレシートデータを有する。レシートデータには、例えば、レシートを発行した店舗の名称を表す文字列のデータ、レシートを発行した店舗の電話番号を表す文字列のデータ、およびレシートを発行した日時を表す文字列のデータが含まれる。
また、レシートデータには、購入商品名を表す文字列のデータ、購入商品の商品コードと金額とを表す文字列のデータ、および購入商品の個数と購入商品の個数分の合計金額を表す文字列のデータが含まれる。また、レシートデータには、合計金額を表す文字列のデータ、購入者が支払った金額を表す文字列のデータ、および購入者へのお釣りの金額を表す文字列のデータが含まれる。以下の説明では、各々の文字列のデータを「行データ」と表記する場合がある。
〈行の行属性を特定する一例〉
次に、図6を用いて、データ処理装置100が、図5に示した複数のレシートデータの各々のレシートデータに含まれる行の行属性を特定する一例について説明する。
図6は、行の行属性を特定する一例を示す説明図である。図6に示すように、データ処理装置100は、例えば、レシートデータRAの4行目の行の行データ「アイスクリーム 」を読み込む。次に、データ処理装置100は、文字属性変換対応表300に基づいて、行データを1バイト分のデータごとに変換する。データ処理装置100は、例えば、2バイト文字である「ア」の先頭1バイト分のデータを取得して、通常文字に対応する「C」に変換する。また、データ処理装置100は、例えば、1バイトシフトして、2バイト文字である「ア」の末尾1バイト分のデータを取得して、通常文字に対応する「C」に変換する。
そして、データ処理装置100は、行データ「アイスクリーム 」を、「CCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBB」に変換する。次に、データ処理装置100は、連続する部分を「*」に置換して、「CCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBB」を「C*B*」に変換する。
そして、データ処理装置100は、変換した結果「C*B*」を行属性に決定する。次に、データ処理装置100は、行属性「C*B*」が既存の行属性であるか否かを判定する。データ処理装置100は、既存の行属性ではないため、行属性「C*B*」に新たな識別子「R04」を付与して、行属性「C*B*」と行属性の識別子「R04」とを対応付けて記憶する。次に、データ処理装置100は、レシートデータRAの4行目の行と、行属性の識別子「R04」とを対応付けて記憶する。
また、データ処理装置100は、例えば、レシートデータRAの8行目の行の行データ「お釣り ¥395」を読み込む。そして、データ処理装置100は、行データ「お釣り ¥395」を、「CCCCCCBBBBBBBBBBBBBBBBBBBB@NNN」に変換する。次に、データ処理装置100は、連続する部分を「*」に置換して、「CCCCCCBBBBBBBBBBBBBBBBBBBB@NNN」を「C*B*@N*」に変換する。
そして、データ処理装置100は、変換した結果「C*B*@N*」を行属性に決定する。次に、データ処理装置100は、行属性「C*B*@N*」が既存の行属性であるか否かを判定する。データ処理装置100は、6行目の行の行属性と一致する既存の行属性であるため、行属性「C*B*@N*」と行属性の識別子「R06」とを対応付けて記憶する。次に、データ処理装置100は、レシートデータRAの8行目の行と、行属性の識別子「R06」とを対応付けて記憶する。
〈行パターンデータの一例〉
次に、図7を用いて、図6において行属性を特定して得られた行パターンデータの一例について説明する。
図7は、行パターンデータの一例を示す説明図である。データ処理装置100は、レシートデータの各々の行と、各々の行の行属性の識別子とを対応付けた、レシートデータに対応する行パターンデータを作成する。
データ処理装置100は、例えば、レシートデータRAに対応付けて、レシートデータRAの各々の行の行属性の識別子を並べたデータ「R01→R02→R03→R04→R05→R06→R06→R06」を作成する。そして、データ処理装置100は、作成したデータを、行パターンデータAとして記憶する。
データ処理装置100は、例えば、レシートデータRBに対応付けて、レシートデータRBの各々の行の行属性の識別子を並べたデータ「R01→R02→R03→R04→R05→R04→R05→R06→R06→R06」を作成する。そして、データ処理装置100は、作成したデータを、行パターンデータBとして記憶する。
データ処理装置100は、例えば、レシートデータRCに対応付けて、レシートデータRCの各々の行の行属性の識別子を並べたデータ「R01→R02→R03→R04→R07→R08→R06→R06→R06」を作成する。そして、データ処理装置100は、作成したデータを、行パターンデータCとして記憶する。
データ処理装置100は、例えば、レシートデータRDに対応付けて、レシートデータRDの各々の行の行属性の識別子を並べたデータ「R01→R02→R03→R04→R05→R04→R07→R08→R06→R06→R06」を作成する。そして、データ処理装置100は、作成したデータを、行パターンデータDとして記憶する。
〈暫定データ範囲を特定する一例〉
次に、図8を用いて、データ処理装置100が、図7に示した行パターンデータに基づいて、暫定データ範囲を特定する一例について説明する。
図8は、暫定データ範囲を特定する一例を示す説明図である。図8において、データ処理装置100は、図7に示した行パターンデータを、データ長の昇順にソートする。データ処理装置100は、例えば、行パターンデータA→行パターンデータC→行パターンデータB→行パターンデータDの順番に並べる。
次に、データ処理装置100は、各々のレシートデータに対応する行パターンデータの先頭行からの何行分の行の行属性が、複数のレシートデータにおいて一致するかを判定して、一致するデータ範囲を暫定ヘッダー範囲として特定する。データ処理装置100は、例えば、各々のレシートデータに対応する行パターンデータの先頭行からの4行分の行の行属性が、複数のレシートデータにおいて一致すると判定して、暫定ヘッダー範囲として特定する。
また、データ処理装置100は、各々のレシートデータに対応する行パターンデータの最終行からの何行分の行の行属性が、複数のレシートデータにおいて一致するかを判定して、一致するデータ範囲を暫定フッター範囲として特定する。データ処理装置100は、例えば、各々のレシートデータに対応する行パターンデータの最終行から3行分の行の行属性が、複数のレシートデータにおいて一致すると判定して、暫定フッター範囲として特定する。
〈データ範囲を特定する一例〉
次に、図9を用いて、データ処理装置100が、図8において特定された暫定データ範囲を修正して、データ範囲を特定する一例について説明する。
図9は、データ範囲を特定する一例を示す説明図である。図9において、データ処理装置100は、暫定ヘッダー範囲の最下行の行から順に、行の行属性が明細範囲に含まれる行の行属性と一致しなくなるまで、行の行属性が明細範囲に含まれる行の行属性と一致するか否かを判定する。そして、データ処理装置100は、暫定ヘッダー範囲から一致すると判定した行を除外してヘッダー範囲として特定する。
データ処理装置100は、例えば、暫定ヘッダー範囲の最下行になる4行目の行の行属性が、明細範囲に含まれる行の行属性と一致すると判定して、暫定ヘッダー範囲から最下行を除外してヘッダー範囲として特定する。また、データ処理装置100は、暫定フッター範囲の最上行になる最終行から3行目の行の行属性が、明細範囲に含まれる行の行属性と一致しないと判定して、暫定フッター範囲をそのままフッター範囲として特定する。
〈ブロックを特定する一例〉
次に、図10を用いて、データ処理装置100が、図7に示した行パターンデータおよび図9において特定されたデータ範囲に基づいて、行属性のブロックを特定する一例について説明する。
図10は、ブロックを特定する一例を示す説明図である。図10において、データ処理装置100は、行パターンデータに基づいて、明細範囲において連続する2行分の行の行属性をグループ化してブロックとして定義する。データ処理装置100は、例えば、行パターンデータAに基づいて、明細範囲において連続する2行分の行の行属性の識別子「R04→R05」を、ブロックとして定義して識別子「B01」を付与する。次に、データ処理装置100は、各々の行パターンデータに含まれる行属性の識別子「R04→R05」を、ブロックの識別子「B01」に置換する。そして、データ処理装置100は、ブロックの識別子と、ブロックに含まれる行属性の識別子と、を対応付けて記憶する。
また、データ処理装置100は、例えば、行パターンデータCに基づいて、明細範囲において連続する2行分の行の行属性の識別子「R04→R07」を、ブロックとして定義して識別子「B02」を付与する。次に、データ処理装置100は、各々の行パターンデータに含まれる行属性の識別子「R04→R07」を、ブロックの識別子「B02」に置換する。そして、データ処理装置100は、ブロックの識別子と、ブロックに含まれる行属性の識別子と、を対応付けて記憶する。
また、データ処理装置100は、例えば、行パターンデータCに基づいて、明細範囲において連続するブロックの識別子と行属性の識別子との組み合わせ「B02→R08」を、新たなブロックとして定義して識別子「B03」を付与する。次に、データ処理装置100は、各々の行パターンデータに含まれるブロックの識別子と行属性の識別子との組み合わせ「B02→R08」を、ブロックの識別子「B03」に置換する。そして、データ処理装置100は、ブロックの識別子と、ブロックに含まれる行属性の識別子と、を対応付けて記憶する。以下の説明では、各々の行パターンデータに含まれる行属性の識別子をブロックの識別子に置換したデータを「ブロックデータ」と表記する場合がある。
〈ブロックを削除する一例〉
次に、図11を用いて、データ処理装置100が、図10に示したブロックのうちのいずれかのブロックを削除する一例について説明する。
図11は、ブロックを削除する一例を示す説明図である。図11において、データ処理装置100は、行パターンデータの明細範囲に含まれるブロックの識別子が、識別子「B01」および「B03」であると判定する。そして、データ処理装置100は、行パターンデータにブロックの識別子「B02」は含まれないため、ブロックの識別子「B02」と行属性の識別子「R04→R07」とを対応付けた情報を削除する。
〈定義辞書1200を作成する一例〉
次に、図12を用いて、データ処理装置100が、図7に示した行パターンデータおよび図11において置換されたブロックデータに基づいて、定義辞書1200を作成する一例について説明する。
図12は、定義辞書1200を作成する一例を示す説明図である。図12において、データ処理装置100は、ブロックの識別子と、ブロックに含まれる行属性の識別子と、ブロックに含まれる行属性の識別子が付与された行の位置と、を対応付けた定義辞書1200を作成する。
〈変換規則を追加する一例〉
次に、図13を用いて、データ処理装置100が、変換規則を取得して、図12に示した定義辞書1200に変換規則を追加する一例について説明する。
図13は、変換規則を追加する一例を示す説明図である。図13において、データ処理装置100は、定義辞書1200と、レシートデータの記述内容と、レシートデータにおけるヘッダー範囲を表す情報と、レシートデータにおけるフッター範囲を表す情報と、を出力して、行属性に対応する変換規則の情報を受け付ける。
データ処理装置100は、変換規則として、例えば、行の行データの正規表現と、行の行データのデータ形式を変換するXMLデータ形式とを対応付けた情報を受信する。正規表現において、「^」は、行データの先頭を表す記号である。「$」は、行データの末尾を表す記号である。「¥s」は、空白文字を表す記号である。「+」は、直前の文字が1回以上繰り返されることを表す記号である。「(」および「)」は、間に入る正規表現をグループ化することを表す記号である。「$1,$2,・・・」は、グループ化した内容を後方参照する記号である。
〈構造化データに変換する一例〉
次に、図14を用いて、データ処理装置100が、図13において作成された定義辞書1200に基づいて、図7に示したレシートデータの各々のレシートデータを構造化データに変換する一例について説明する。
図14は、構造化データに変換する一例を示す説明図である。図14において、データ処理装置100は、変換規則が追加された定義辞書1200に基づいて、レシートデータのデータ形式を構造化データ形式に変換する。
データ処理装置100は、例えば、レシートデータRXからヘッダー範囲の1行目の行を抽出する。次に、データ処理装置100は、1行目の行の行属性「B*C*B*」を特定する。そして、データ処理装置100は、定義辞書1200に基づいて、1行目の行の行属性「B*C*B*」に対応する正規表現を、行データ「 ○×スーパー 」に当てはめる。次に、データ処理装置100は、行データ「 ○×スーパー 」のデータ形式を変換して「<店名>○×スーパー</店名>」にする。
これにより、データ処理装置100は、レシートデータのデータ形式を、レシートデータの統計処理のための特定のデータ形式に変更することができる。そして、データ処理装置100は、データ形式が変換された構造化データに基づいて、レシートデータの統計処理を実行することができる。
(データ処理手順の一例)
次に、図15を用いて、データ処理装置100のデータ処理手順の一例について説明する。
図15は、データ処理手順の一例を示すフローチャートである。図15において、データ処理装置100は、図16に後述する行パターン作成処理を実行する(ステップS1501)。ここで、行パターン作成処理とは、複数のレシートデータの各々のレシートデータにおける行属性の並び方を表す行パターンデータを作成する処理である。
次に、データ処理装置100は、図20に後述するデータ範囲特定処理を実行する(ステップS1502)。ここで、データ範囲特定処理とは、複数のレシートデータに共通するヘッダー範囲とフッター範囲とを特定する処理である。
そして、データ処理装置100は、図25に後述する定義辞書記憶処理を実行する(ステップS1503)。ここで、定義辞書記憶処理とは、複数のレシートデータの各々のレシートデータに含まれる行の行属性の組み合わせをグループ化して定義して記憶する処理である。
次に、データ処理装置100は、定義辞書1200の定義に対応する変換規則を取得する(ステップS1504)。そして、データ処理装置100は、図29に後述する構造化データ変換処理を実行して(ステップS1505)、データ処理を終了する。構造化データ変換処理とは、複数のレシートデータの各々のレシートデータに含まれる各々の行のデータ形式を、特定のデータ形式に変換する処理である。
これにより、データ処理装置100は、レシートデータのヘッダー範囲およびフッター範囲を、自動で決定することができる。このため、データ処理装置100の利用者は、レシートデータのヘッダー範囲およびフッター範囲を決定しなくてもよくなる。また、データ処理装置100は、複数のレシートデータからヘッダー範囲およびフッター範囲を決定するため、ヘッダー範囲およびフッター範囲の決定精度を向上させることができる。
また、これにより、データ処理装置100は、レシートデータのデータ形式を、レシートデータの統計処理のための特定のデータ形式に変更することができる。そして、データ処理装置100は、データ形式が変換された構造化データに基づいて、レシートデータの統計処理を実行することができる。
(行パターン作成処理手順の一例)
次に、図16を用いて、ステップS1501に示した、データ処理装置100の行パターン作成処理手順の一例について説明する。
図16は、行パターン作成処理手順の一例を示すフローチャートである。図16において、データ処理装置100は、複数のレシートデータのうちのいずれかのレシートデータを取得する(ステップS1601)。
次に、データ処理装置100は、選択したレシートデータに含まれる1行分のデータを取得する(ステップS1602)。そして、データ処理装置100は、1行分のデータのうちの1バイト分のデータを取得する(ステップS1603)。
次に、データ処理装置100は、取得した1バイト分のデータに対して、図17に後述する種類特定処理を実行する(ステップS1604)。そして、データ処理装置100は、1行分のデータをすべて取得したか否かを判定する(ステップS1605)。ここで、取得していない場合(ステップS1605:No)、データ処理装置100は、ステップS1603の処理に戻る。
一方で、取得した場合(ステップS1605:Yes)、データ処理装置100は、作業バッファから1バイト分のデータを取得する(ステップS1606)。次に、データ処理装置100は、取得した1バイト分のデータに対して、図18に後述する文字変換処理を実行する(ステップS1607)。
そして、データ処理装置100は、1行分のデータをすべて取得したか否かを判定する(ステップS1608)。ここで、取得していない場合(ステップS1608:No)、データ処理装置100は、ステップS1606の処理に戻る。
一方で、取得した場合(ステップS1608:Yes)、データ処理装置100は、図19に後述する識別子付与処理を実行する(ステップS1609)。次に、データ処理装置100は、すべての行のデータを取得したか否かを判定する(ステップS1610)。ここで、取得していない場合(ステップS1610:No)、データ処理装置100は、ステップS1602の処理に戻る。
一方で、取得した場合(ステップS1610:Yes)、データ処理装置100は、すべてのレシートデータを取得したか否かを判定する(ステップS1611)。ここで、取得していない場合(ステップS1611:No)、データ処理装置100は、ステップS1601の処理に戻る。
一方で、取得した場合(ステップS1611:Yes)、データ処理装置100は、行パターン作成処理を終了する。
(種類特定処理手順の一例)
次に、図17を用いて、ステップS1604に示した、データ処理装置100の種類特定処理手順の一例について説明する。
図17は、種類特定処理手順の一例を示すフローチャートである。図17において、データ処理装置100は、1バイト文字であるか否かを判定する(ステップS1701)。ここで、1バイト文字である場合(ステップS1701:Yes)、データ処理装置100は、1バイト分シフトして(ステップS1702)、ステップS1704の処理に移行する。
一方で、1バイト文字ではない場合(ステップS1701:No)、データ処理装置100は、2バイト分シフトして(ステップS1703)、ステップS1704の処理に移行する。
ステップS1704において、データ処理装置100は、通常文字か否かを判定する(ステップS1704)。ここで、通常文字である場合(ステップS1704:Yes)、作業バッファにCを書き込んで(ステップS1705)、種類特定処理を終了する。
一方で、通常文字ではない場合(ステップS1704:No)、データ処理装置100は、数値か否かを判定する(ステップS1706)。ここで、数値である場合(ステップS1706:Yes)、作業バッファにNを書き込んで(ステップS1707)、種類特定処理を終了する。
一方で、数値ではない場合(ステップS1706:No)、データ処理装置100は、空白文字か否かを判定する(ステップS1708)。ここで、空白文字である場合(ステップS1708:Yes)、作業バッファにBを書き込んで(ステップS1709)、種類特定処理を終了する。
一方で、空白文字ではない場合(ステップS1708:No)、データ処理装置100は、記号文字か否かを判定する(ステップS1710)。ここで、記号文字である場合(ステップS1710:Yes)、作業バッファに@を書き込んで(ステップS1711)、種類特定処理を終了する。一方で、記号文字ではない場合(ステップS1710:No)、データ処理装置100は、種類特定処理を終了する。
(文字変換処理手順の一例)
次に、図18を用いて、ステップS1607に示した、データ処理装置100の文字変換処理手順の一例について説明する。
図18は、文字変換処理手順の一例を示すフローチャートである。図18において、データ処理装置100は、直前に取得した1バイト分のデータと同一か否かを判定する(ステップS1801)。ここで、同一ではない場合(ステップS1801:No)、データ処理装置100は、文字変換処理を終了する。
一方で、同一である場合(ステップS1801:Yes)、データ処理装置100は、直前に*を書き込んだか否かを判定する(ステップS1802)。ここで、書き込んだ場合(ステップS1802:Yes)、データ処理装置100は、文字変換処理を終了する。
一方で、書き込んでいない場合(ステップS1802:No)、データ処理装置100は、作業バッファに*を書き込んで(ステップS1803)、文字変換処理を終了する。
(識別子付与処理手順の一例)
次に、図19を用いて、ステップS1609に示した、データ処理装置100の識別子付与処理手順の一例について説明する。
図19は、識別子付与処理手順の一例を示すフローチャートである。図19において、データ処理装置100は、作業バッファの内容が既存の行パターンと一致するか否かを判定する(ステップS1901)。ここで、一致する場合(ステップS1901:Yes)、データ処理装置100は、既存の行パターンの識別子を選択して(ステップS1902)、ステップS1904の処理に移行する。
一方で、一致しない場合(ステップS1901:No)、データ処理装置100は、新たな識別子を生成して選択して(ステップS1903)、ステップS1904の処理に移行する。ステップS1904において、データ処理装置100は、行に選択した識別子を付与して(ステップS1904)、識別子付与処理を終了する。
(データ範囲特定処理手順の一例)
次に、図20を用いて、ステップS1502に示した、データ処理装置100のデータ範囲特定処理手順の一例について説明する。
図20は、データ範囲特定処理手順の一例を示すフローチャートである。図20において、データ処理装置100は、行パターンデータをデータ長の昇順にソートする(ステップS2001)。次に、データ処理装置100は、図21に後述する暫定ヘッダー範囲特定処理を実行する(ステップS2002)。そして、データ処理装置100は、図22に後述する暫定フッター範囲特定処理を実行する(ステップS2003)。
次に、データ処理装置100は、図23に後述するヘッダー範囲特定処理を実行する(ステップS2004)。そして、データ処理装置100は、図24に後述するフッター範囲特定処理を実行して(ステップS2005)、データ範囲特定処理を終了する。
(暫定ヘッダー範囲特定処理手順の一例)
次に、図21を用いて、ステップS2002に示した、データ処理装置100の暫定ヘッダー範囲特定処理手順の一例について説明する。
図21は、暫定ヘッダー範囲特定処理手順の一例を示すフローチャートである。図21において、データ処理装置100は、読み取りポインタを、各々の行パターンデータの先頭行に設定する(ステップS2101)。次に、データ処理装置100は、各々の行パターンデータの読み取りポインタの行の行属性が一致するか否かを判定する(ステップS2102)。ここで、一致する場合(ステップS2102:Yes)、データ処理装置100は、読み取りポインタを次の行に設定して(ステップS2103)、ステップS2102の処理に戻る。
一方で、一致しない場合(ステップS2102:No)、データ処理装置100は、先頭行から読み取りポインタの直前の行までのデータ範囲を暫定ヘッダー範囲に特定して(ステップS2104)、暫定ヘッダー範囲特定処理を終了する。
(暫定フッター範囲特定処理手順の一例)
次に、図22を用いて、ステップS2003に示した、データ処理装置100の暫定フッター範囲特定処理手順の一例について説明する。
図22は、暫定フッター範囲特定処理手順の一例を示すフローチャートである。図22において、データ処理装置100は、読み取りポインタを、各々の行パターンデータの最終行に設定する(ステップS2201)。次に、データ処理装置100は、各々の行パターンデータの読み取りポインタの行の行属性が一致するか否かを判定する(ステップS2202)。ここで、一致する場合(ステップS2202:Yes)、データ処理装置100は、読み取りポインタを直前の行に設定して(ステップS2203)、ステップS2202の処理に戻る。
一方で、一致しない場合(ステップS2202:No)、データ処理装置100は、読み取りポインタの次の行から最終行までのデータ範囲を暫定フッター範囲に特定して(ステップS2204)、暫定フッター範囲特定処理を終了する。
(ヘッダー範囲特定処理手順の一例)
次に、図23を用いて、ステップS2004に示した、データ処理装置100のヘッダー範囲特定処理手順の一例について説明する。
図23は、ヘッダー範囲特定処理手順の一例を示すフローチャートである。図23において、データ処理装置100は、読み取りポインタを各々の行パターンデータのヘッダー範囲の最下行に設定する(ステップS2301)。
次に、データ処理装置100は、各々の行パターンデータの読み取りポインタの行の行属性が、暫定ヘッダー範囲および暫定フッター範囲とは異なるデータ範囲に含まれる行の行属性と一致するか否かを判定する(ステップS2302)。ここで、一致する場合(ステップS2302:Yes)、データ処理装置100は、読み取りポインタを直前の行に設定して(ステップS2303)、ステップS2302の処理に戻る。
一方で、一致しない場合(ステップS2302:No)、データ処理装置100は、ヘッダー範囲を、先頭行から読み取りポインタの行までのデータ範囲に更新して(ステップS2304)、ヘッダー範囲特定処理を終了する。
(フッター範囲特定処理手順の一例)
次に、図24を用いて、ステップS2005に示した、データ処理装置100のフッター範囲特定処理手順の一例について説明する。
図24は、フッター範囲特定処理手順の一例を示すフローチャートである。図24において、データ処理装置100は、読み取りポインタを各々の行パターンデータのフッター範囲の最上行に設定する(ステップS2401)。
次に、データ処理装置100は、各々の行パターンデータの読み取りポインタの行の行属性が、暫定ヘッダー範囲および暫定フッター範囲とは異なるデータ範囲に含まれる行の行属性と一致するか否かを判定する(ステップS2402)。ここで、一致する場合(ステップS2402:Yes)、データ処理装置100は、読み取りポインタを次の行に設定して(ステップS2403)、ステップS2402の処理に戻る。
一方で、一致しない場合(ステップS2402:No)、データ処理装置100は、フッター範囲を、読み取りポインタの行から最終行までのデータ範囲に更新して(ステップS2404)、フッター範囲特定処理を終了する。
(定義辞書記憶処理手順の一例)
次に、図25を用いて、ステップS1503に示した、データ処理装置100の定義辞書記憶処理手順の一例について説明する。
図25は、定義辞書記憶処理手順の一例を示すフローチャートである。図25において、データ処理装置100は、図26に後述する第1ブロック作成処理を実行する(ステップS2501)。次に、データ処理装置100は、図27に後述する第2ブロック作成処理を実行する(ステップS2502)。そして、データ処理装置100は、図28に後述する定義辞書作成処理を実行して(ステップS2503)、定義辞書記憶処理を終了する。
(第1ブロック作成処理手順の一例)
次に、図26を用いて、ステップS2501に示した、データ処理装置100の第1ブロック作成処理手順の一例について説明する。
図26は、第1ブロック作成処理手順の一例を示すフローチャートである。図26において、データ処理装置100は、行パターンデータを選択する(ステップS2601)。次に、データ処理装置100は、選択した行パターンデータにおいて、連続する2行分の行の行属性を選択してブロックとして定義して、識別子を生成する(ステップS2602)。
そして、データ処理装置100は、すべての行パターンデータに対して、定義したブロックを、生成した識別子に置換する(ステップS2603)。次に、データ処理装置100は、すべての連続する2行分の行の行属性を選択したか否かを判定する(ステップS2604)。ここで、選択していない場合(ステップS2604:No)、データ処理装置100は、ステップS2602の処理に戻る。
一方で、選択した場合(ステップS2604:Yes)、データ処理装置100は、すべての行パターンデータを選択したか否かを判定する(ステップS2605)。ここで、選択していない場合(ステップS2605:No)、データ処理装置100は、ステップS2601の処理に戻る。
一方で、選択した場合(ステップS2605:Yes)、データ処理装置100は、第1ブロック作成処理を終了する。
(第2ブロック作成処理手順の一例)
次に、図27を用いて、ステップS2502に示した、データ処理装置100の第2ブロック作成処理手順の一例について説明する。
図27は、第2ブロック作成処理手順の一例を示すフローチャートである。図27において、データ処理装置100は、行パターンデータを選択する(ステップS2701)。次に、データ処理装置100は、選択した行パターンデータにおいて、連続する、ブロックと行の行属性との組み合わせを選択して新たなブロックとして定義して、識別子を生成する(ステップS2702)。
そして、データ処理装置100は、すべての行パターンデータに対して、定義したブロックを、生成した識別子に置換する(ステップS2703)。次に、データ処理装置100は、すべての連続する2行分の行の行属性を選択したか否かを判定する(ステップS2704)。ここで、選択していない場合(ステップS2704:No)、データ処理装置100は、ステップS2702の処理に戻る。
一方で、選択した場合(ステップS2704:Yes)、データ処理装置100は、すべての行パターンデータを選択したか否かを判定する(ステップS2705)。ここで、選択していない場合(ステップS2705:No)、データ処理装置100は、ステップS2701の処理に戻る。
一方で、選択した場合(ステップS2705:Yes)、データ処理装置100は、第2ブロック作成処理を終了する。
(定義辞書作成処理手順の一例)
次に、図28を用いて、ステップS2503に示した、データ処理装置100の定義辞書作成処理手順の一例について説明する。
図28は、定義辞書作成処理手順の一例を示すフローチャートである。図28において、データ処理装置100は、行パターンデータを選択する(ステップS2801)。次に、選択した行パターンデータに対して、定義したブロックを当てはめる(ステップS2802)。
そして、データ処理装置100は、すべての行パターンデータを選択したか否かを判定する(ステップS2803)。ここで、選択していない場合(ステップS2803:No)、データ処理装置100は、ステップS2801の処理に戻る。
一方で、選択した場合(ステップS2803:Yes)、データ処理装置100は、当てはめられなかったブロックを削除する(ステップS2804)。次に、データ処理装置100は、定義辞書1200を作成する(ステップS2805)。そして、データ処理装置100は、定義辞書作成処理を終了する。
(構造化データ変換処理手順の一例)
次に、図29を用いて、ステップS1505に示した、データ処理装置100の構造化データ変換処理手順の一例について説明する。
図29は、構造化データ変換処理手順の一例を示すフローチャートである。図29において、データ処理装置100は、分析対象データになるレシートデータを選択する(ステップS2901)。次に、データ処理装置100は、分析対象データから1行分のデータを取得する(ステップS2902)。そして、データ処理装置100は、取得したデータから行の行属性を特定する(ステップS2903)。
次に、データ処理装置100は、特定した行属性が先頭にあるブロックを特定する(ステップS2904)。そして、データ処理装置100は、分析対象データから1行分のデータを取得する(ステップS2905)。次に、データ処理装置100は、取得したデータから行の行属性を特定する(ステップS2906)。そして、データ処理装置100は、特定した行属性が続くブロックを特定する(ステップS2907)。
次に、データ処理装置100は、特定したブロックが一つか否かを判定する(ステップS2908)。ここで、特定したブロックが一つではない場合(ステップS2908:No)、データ処理装置100は、ステップS2905の処理に戻る。
一方で、特定したブロックが一つである場合(ステップS2908:Yes)、データ処理装置100は、特定したブロックに対応する複数の行の行データをXMLデータに変換する(ステップS2909)。次に、データ処理装置100は、すべての行の行データを取得したか否かを判定する(ステップS2910)。ここで、取得していない場合(ステップS2910:No)、データ処理装置100は、ステップS2902の処理に戻る。
一方で、取得した場合(ステップS2910:Yes)、データ処理装置100は、すべてのレシートデータを選択したか否かを判定する(ステップS2911)。ここで、選択していない場合(ステップS2911:No)、データ処理装置100は、ステップS2901の処理に戻る。
一方で、選択した場合(ステップS2911:Yes)、データ処理装置100は、構造化データ変換処理を終了する。
以上説明したように、データ処理プログラムによれば、各々のレシートデータの先頭行からの行の行属性が、複数のレシートデータにおいて一致するデータ範囲を特定することができる。これにより、データ処理プログラムは、レシートデータのヘッダー範囲を、自動で決定することができる。このため、データ処理プログラムの利用者は、レシートデータのヘッダー範囲を決定しなくてもよくなる。また、データ処理プログラムは、複数のレシートデータからヘッダー範囲を決定するため、ヘッダー範囲の決定精度を向上させることができる。
また、データ処理プログラムによれば、データ範囲の最下行の行属性が、データ範囲とは異なるデータ範囲に含まれる行の行属性と一致する場合は、データ範囲から最下行を除外することができる。これにより、データ処理プログラムは、ヘッダー範囲の決定精度を向上させることができる。
また、データ処理プログラムによれば、各々のレシートデータの最終行からの行の行属性が、複数のレシートデータにおいて一致するデータ範囲を特定することができる。これにより、データ処理プログラムは、レシートデータのフッター範囲を、自動で決定することができる。このため、データ処理プログラムの利用者は、レシートデータのフッター範囲を決定しなくてもよくなる。また、データ処理プログラムは、複数のレシートデータからフッター範囲を決定するため、フッター範囲の決定精度を向上させることができる。
また、データ処理プログラムによれば、データ範囲の最上行の行属性が、データ範囲とは異なるデータ範囲に含まれる行の行属性と一致する場合は、データ範囲から最上行を除外することができる。これにより、データ処理プログラムは、フッター範囲の決定精度を向上させることができる。
また、データ処理プログラムによれば、レシートデータの記述内容とともに、データ範囲と、レシートデータに含まれる各々の行の行属性と、を出力することができる。これにより、データ処理プログラムは、利用者が、行属性の行のデータ形式を特定のデータ形式に変換する、行属性に対応する変換規則を作成することを支援することができる。
また、データ処理プログラムによれば、変換規則に基づいて、レシートデータのデータ形式を特定のデータ形式に変換することができる。これにより、データ処理プログラムは、レシートデータの統計処理のための特定のデータ形式に変更された構造化データに基づいて、レシートデータの統計処理を実行することができる。
ここで、従来、作業者が、複数のレシートデータを観察して比較し、複数のレシートデータに共通するヘッダー範囲およびフッター範囲を特定する場合が考えられる。しかしながら、この場合、作業者の負担が増大してしまい、作業時間が増大してしまう。また、レシートデータが数枚であると、作業者がサンプルとなるレシートデータが少ないために誤ったヘッダー範囲およびフッター範囲を特定してしまうおそれがある。また、作業者のミスが発生するおそれがある。一方で、本実施の形態にかかるデータ処理装置100は、複数のレシートデータから自動的にヘッダー範囲およびフッター範囲を特定することができ、作業者の負担および作業時間の増大を抑制することができ、作業者のミスを発生させないようにすることができる。
ここで、従来のデータ処理装置が、レシートデータの行データに対して文字列のパターンマッチングを行って、レシートデータのデータ形式を特定のデータ形式に変換する場合が考えられる。しかしながら、この場合、同一の文字列パターンであって、記述内容が異なる行データのデータ形式を、誤って変換してしまうおそれがある。例えば、行データが通常文字の文字列にパターンマッチングしたときに行データのデータ形式を商品名についてのデータ形式に変換する場合、店舗名が記述された行データのデータ形式を商品名についてのデータ形式に変換してしまうおそれがある。一方で、本実施の形態にかかるデータ処理装置100は、レシートデータのヘッダー範囲、明細範囲、およびフッター範囲を区別して、各々の範囲に含まれる行の変換規則を受け付けることができる。このため、データ処理装置100は、ヘッダー範囲と明細範囲とに同一の文字列パターンの行があっても、別のデータ形式に変換することができる。
なお、本実施の形態で説明したデータ処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データ処理プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本データ処理プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
複数のレシートデータの各々のレシートデータに含まれる複数の行の各々の行に存在する文字の属性に基づいて、前記各々の行の行属性を決定し、
決定した前記各々の行の行属性を比較して、前記各々のレシートデータの先頭行または最終行からの行属性が前記複数のレシートデータにおいて一致するデータ範囲を特定し、
特定した前記データ範囲の最下行または最上行の行属性が、前記複数のレシートデータの少なくともいずれかのレシートデータの前記データ範囲とは異なるデータ範囲に含まれるいずれかの行の行属性と一致したことに応じて、前記データ範囲から最下行または最上行を除外する、
処理を実行させることを特徴とするデータ処理プログラム。
(付記2)前記除外する処理は、
前記データ範囲の最下行または最上行の行属性が、前記異なるデータ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、前記データ範囲の最下行または最上行の行属性が、前記異なるデータ範囲に含まれるいずれかの行の行属性と一致したことに応じて、前記データ範囲から最下行または最上行を除外することを特徴とする付記1に記載のデータ処理プログラム。
(付記3)前記特定する処理は、
前記各々の行の行属性を比較して、前記各々のレシートデータの先頭行からの行属性が前記複数のレシートデータにおいて一致する第1データ範囲を特定し、
前記各々の行の行属性を比較して、前記各々のレシートデータの最終行からの行属性が前記複数のレシートデータにおいて一致する第2データ範囲を特定し、
前記除外する処理は、
特定した前記第1データ範囲の最下行の行属性が、前記いずれかのレシートデータの前記第1データ範囲および前記第2データ範囲とは異なるデータ範囲に含まれるいずれかの行の行属性と一致したことに応じて、前記第1データ範囲から前記最下行を除外し、
特定した前記第2データ範囲の最上行の行属性が、前記いずれかのレシートデータの前記第1データ範囲および前記第2データ範囲とは異なるデータ範囲に含まれるいずれかの行の行属性と一致したことに応じて、前記第2データ範囲から前記最上行を除外する、
ことを特徴とする付記1に記載のデータ処理プログラム。
(付記4)前記除外する処理は、
前記第1データ範囲の最下行の行属性が、前記異なるデータ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、前記第1データ範囲の最下行の行属性が、前記異なるデータ範囲に含まれるいずれかの行の行属性と一致したことに応じて、前記第1データ範囲から最下行を除外し、
前記第2データ範囲の最上行の行属性が、前記異なるデータ範囲に含まれるいずれの行の行属性とも一致しなくなるまで、前記第2データ範囲の最上行の行属性が、前記異なるデータ範囲に含まれるいずれかの行の行属性と一致したことに応じて、前記第2データ範囲から最上行を除外する、
ことを特徴とする付記3に記載のデータ処理プログラム。
(付記5)前記コンピュータに、
行の行属性に対応付けて前記行属性の行のデータ形式を特定のデータ形式に変換する変換規則を記憶する記憶部に基づいて、前記複数のレシートデータのうちのいずれかのレシートデータの前記行属性の行のデータ形式を前記特定のデータ形式に変換する、
処理を実行させることを特徴とする付記3または4に記載のデータ処理プログラム。
(付記6)前記変換する処理は、
レシートデータにおいて連続する複数の行の行属性のパターンに対応付けて前記複数の行の各々の行のデータ形式を前記特定のデータ形式に変換する変換規則を記憶する記憶部に基づいて、前記複数のレシートデータのうちのいずれかのレシートデータの前記行属性のパターンに対応する複数の行の各々の行のデータ形式を前記特定のデータ形式に変換する、
ことを特徴とする付記5に記載のデータ処理プログラム。
(付記7)前記コンピュータに、
前記複数のレシートデータのうちのいずれかのレシートデータに含まれるいずれかの行の記述内容と行属性とを対応付けて出力し、
前記いずれかの行の行属性と、前記いずれかの行を特定のデータ形式に変換する変換規則と、を受け付け、
受け付けた前記行属性と前記変換規則とを対応付けて前記記憶部に記憶する、
処理を実行させることを特徴とする付記5または6に記載のデータ処理プログラム。
(付記8)前記出力する処理は、前記いずれかのレシートデータに含まれるいずれかの行の記述内容と行属性とを対応付けて出力するとともに、前記第1データ範囲と前記第2データ範囲とを表す情報を出力することを特徴とする付記7に記載のデータ処理プログラム。
(付記9)コンピュータが、
複数のレシートデータの各々のレシートデータに含まれる複数の行の各々の行に存在する文字の属性に基づいて、前記各々の行の行属性を決定し、
決定した前記各々の行の行属性を比較して、前記各々のレシートデータの先頭行または最終行からの行属性が前記複数のレシートデータにおいて一致するデータ範囲を特定し、
特定した前記データ範囲の最下行または最上行の行属性が、前記複数のレシートデータの少なくともいずれかのレシートデータの前記データ範囲とは異なるデータ範囲に含まれるいずれかの行の行属性と一致したことに応じて、前記データ範囲から最下行または最上行を除外する、
処理を実行することを特徴とするデータ処理方法。