(57)【特許請求の範囲】
【請求項１】
第１の文書の複数の行のそれぞれについて、誤りの検出用の符号である第１の誤り検出符号を、当該行を構成する各文字のコードを用いて生成し、当該第１の文書の複数の列のそれぞれについて、誤りの検出用の符号である第２の誤り検出符号を、当該列を構成する各文字のコードを用いて生成し、当該第１の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、誤りの検出用の符号である第３の誤り検出符号を、当該組を構成する各文字のコードを用いて生成する第１のステップと、
前記複数の第１の誤り検出符号、前記複数の前記第２の誤り検出符号、および前記複数の第３の誤り検出符号を表わす誤り検出画像を生成する第２のステップと、
前記第１の文書および前記誤り検出画像を用紙に印刷する第３のステップと、
用紙に記されている文書である第２の文書を構成する各文字を認識する第４のステップと、
前記用紙に記されている前記誤り検出画像から前記複数の第１の誤り検出符号、前記複数の第２の誤り検出符号、および複数の第３の誤り検出符号を抽出する第５のステップと、
前記第２の文書の複数の行のそれぞれについて、誤りの検出用の符号である第４の誤り検出符号を、当該行を構成する各文字のコードを用いて生成し、当該第２の文書の複数の列それぞれについて、誤りの検出用の符号である第５の誤り検出符号を、当該列を構成する各文字のコードを用いて生成し、当該第２の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、誤りの検出用の符号である第６の誤り検出符号を、当該組を構成する各文字のコードを用いて生成する第６のステップと、
前記第２の文書の、前記第１の誤り検出符号と前記第４の誤り検出符号とが相違する行である誤り行、前記第２の誤り検出符号と前記第５の誤り検出符号とが相違する列である誤り列、および前記第３の誤り検出符号と前記第６の誤り検出符号とが相違する組である誤り組が重なる位置である誤り位置を検出する第７のステップと、
前記誤り位置の文字を修正する第８のステップと、
前記誤り列が所定の数以上連続する場合に、前記誤り行と当該連続する誤り列のうちの最も先頭に近い前記誤り列とが重なる位置である調整位置を検出する、第９のステップと、
前記第６のステップの前に、前記第２の文書の前記調整位置の行方向に隣接する位置に所定の数だけ文字を挿入し、または、前記調整位置から行方向にある文字を、当該調整位置の文字または当該調整位置の文字に隣接する文字から順に行方向に所定の数だけ削除する、第１０のステップと、
を有することを特徴とする文書修正方法。
【請求項２】
前記第１のステップの前に、前記第１の文書を所定の規則に従って調整する第１１のステップと、
前記第６のステップの前に、前記第２の文書を前記所定の規則に従って調整する第１２のステップと、を備える、
請求項１に記載の文書修正方法。
【請求項３】
前記第１のステップにおいて、当該第１の文書を構成する各文字を、前記複数の行のそれぞれの先頭の文字を分散させ、かつ、前記複数の行のそれぞれを構成する文字を所定のパターンに従って分散させることによって、前記複数の組にグループ化して、前記第３の誤り検出符号を生成する、
請求項１または請求項２に記載の文書修正方法。
【請求項４】
前記第８のステップにおいて前記誤り位置の文字が修正された前記第２の文書について、前記誤り行の第４の誤り検出符号、前記誤り列の第５の誤り検出符号、および前記誤り組の第６の誤り検出符号を生成する第１３のステップと、
前記第１の誤り検出符号と前記第１３のステップで生成された前記第４の誤り検出符号とが一致するか否か、前記第２の誤り検出符号と前記第１３のステップで生成された前記第５の誤り検出符号とが一致するか否か、前記第３の誤り検出符号と前記第１３のステップで生成された前記第６の誤り検出符号とが一致するか否かを判別することによって、前記誤り位置の文字が正しい文字に修正されたか否かを判別する第１４のステップと、を備える、
請求項１ないし請求項３のいずれかに記載の文書修正方法。
【請求項５】
第１の文書が印刷された用紙から取得した画像に対して文字認識を行うことによって第２の文書を取得する文字認識手段と、
前記第１の文書の複数の行のそれぞれについて、当該行を構成する各文字のコードを用いて生成された、誤りを検出する符号である第１の誤り検出符号、当該第１の文書の複数の列のそれぞれについて、当該列を構成する各文字のコードを用いて生成された、誤りを検出する符号である第２の誤り検出符号、および当該第１の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、当該組を構成する各文字のコードを用いて生成された、誤りの検出用の符号である第３の誤り検出符号を取得する、誤り検出符号取得手段と、
前記第２の文書の複数の行のそれぞれについて、誤りの検出用の符号である第４の誤り検出符号を、当該行を構成する各文字のコードを用いて生成し、当該第２の文書の複数の列それぞれについて、誤りの検出用の符号である第５の誤り検出符号を、当該列を構成する各文字のコードを用いて生成し、当該第２の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、誤りの検出用の符号である第６の誤り検出符号を、当該組を構成する各文字のコードを用いて生成する、誤り検出符号生成手段と、
前記第２の文書の、前記第１の誤り検出符号と前記第４の誤り検出符号とが相違する行である誤り行、前記第２の誤り検出符号と前記第５の誤り検出符号とが相違する列である誤り列、および前記第３の誤り検出符号と前記第６の誤り検出符号とが相違する組である誤り組が重複する位置である誤り位置を検出する誤り位置検出手段と、
前記誤り位置の文字を修正する修正手段と、
前記誤り列が所定の数以上連続する場合に、前記誤り行と当該連続する誤り列のうちの最も先頭に近い前記誤り列とが重なる位置である調整位置を検出する、調整位置検出手段と、
前記第２の文書の前記調整位置の行方向に隣接する位置に所定の数だけ文字を挿入し、または、前記調整位置から行方向にある文字を、当該調整位置の文字または当該調整位置の文字に隣接する文字から順に行方向に所定の数だけ削除する、テキスト長調整手段と、を備え、
前記誤り検出符号生成手段は、前記テキスト長調整手段によって調整された前記第２の文書の複数の行について前記第４の誤り検出符号を生成し、当該第２の文書の複数の列について前記第５の誤り検出符号を生成し、当該第２の文書の複数の組について前記第６の誤り検出符号を生成する、
ことを特徴とする文書修正装置。
【請求項６】
前記第１の文書を所定の規則に従って調整する第１の文書調整手段と、
前記第２の文書を前記所定の規則に従って調整する第２の文書調整手段と、を備え、
前記誤り検出符号取得手段は、前記第１の文書調整手段によって調整された前記第１の文書の複数の行について前記第１の誤り検出符号を取得し、当該第１の文書の複数の列について前記第２の誤り検出符号を取得し、当該第１の文書の複数の組について前記第３の誤り検出符号を取得し、
前記誤り検出符号生成手段は、前記第２の文書調整手段によって調整された前記第２の文書の複数の
についての第４の誤り検出符号、第５の誤り検出符号、および第６の誤り検出符号を生成する、
請求項５に記載の文書修正装置。
【請求項７】
前記誤り検出符号取得手段は、当該第１の文書を構成する各文字を、前記複数の行のそれぞれの先頭の文字を分散させ、かつ、前記複数の行のそれぞれを構成する文字を所定のパターンに従って分散させることによって、前記複数の組にグループ化して、前記第３の誤り検出符号を生成する、
請求項５または請求項６に記載の文書修正装置。
【請求項８】
前記修正手段によって前記誤り位置の文字が修正された前記第２の文書について、前記誤り行の第４の誤り検出符号、前記誤り列の第５の誤り検出符号、および前記誤り組の第６の誤り検出符号を生成する第２の誤り検出符号生成手段と、
前記第１の誤り検出符号と前記第２の誤り検出符号生成手段で生成された前記第４の誤り検出符号とが一致するか否か、前記第２の誤り検出符号と前記第２の誤り検出符号生成手段で生成された前記第５の誤り検出符号とが一致するか否か、前記第３の誤り検出符号と前記第２の誤り検出符号生成手段で生成された前記第６の誤り検出符号とが一致するか否かを判別することによって、前記誤り位置の文字が正しい文字に修正されたか否かを判別する判別手段と、を備える、
請求項５ないし請求項７のいずれかに記載の文書修正装置。
【請求項９】
前記用紙には、前記複数の第１の誤り検出符号、前記複数の第２の誤り検出符号、および前記複数の第３の誤り検出符号を表わす誤り検出画像が記されており、
前記誤り検出符号取得手段は、前記用紙から読み取られた前記誤り検出画像に基づいて前記複数の第１の誤り検出符号、前記複数の第２の誤り検出符号、および前記複数の第３の誤り検出符号を取得する、
請求項５ないし請求項８のいずれかに記載の文書修正装置。
【請求項１０】
文書を修正するコンピュータに用いられるコンピュータプログラムであって、
前記コンピュータに、
第１の文書が印刷された用紙から取得した画像に対して文字認識を行うことによって第２の文書を取得する文字認識処理と、
前記第１の文書の複数の行のそれぞれについて、当該行を構成する各文字のコードを用いて生成された、誤りを検出する符号である第１の誤り検出符号、当該第１の文書の複数の列のそれぞれについて、当該列を構成する各文字のコードを用いて生成された、誤りを検出する符号である第２の誤り検出符号、および当該第１の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、当該組を構成する各文字のコードを用いて生成された、誤りの検出用の符号である第３の誤り検出符号を取得する、誤り検出符号取得処理と、
前記第２の文書の複数の行のそれぞれについて、誤りの検出用の符号である第４の誤り検出符号を、当該行を構成する各文字のコードを用いて生成し、当該第２の文書の複数の列それぞれについて、誤りの検出用の符号である第５の誤り検出符号を、当該列を構成する各文字のコードを用いて生成し、当該第２の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、誤りの検出用の符号である第６の誤り検出符号を、当該組を構成する各文字のコードを用いて生成する、誤り検出符号生成処理と、
前記第２の文書の、前記第１の誤り検出符号と前記第４の誤り検出符号とが相違する誤り行、前記第２の誤り検出符号と前記第５の誤り検出符号とが相違する誤り列、および前記第３の誤り検出符号と前記第６の誤り検出符号とが相違する誤り組が重複する位置である誤り位置を検出する誤り位置検出処理と、
前記誤り位置の文字を修正する修正処理と、
前記誤り列が所定の数以上連続する場合に、前記誤り行と当該連続する誤り列のうちの最も先頭に近い前記誤り列とが重なる位置である調整位置を検出する、調整位置検出処理と、
前記第２の文書の前記調整位置の行方向に隣接する位置に所定の数だけ文字を挿入し、または、前記調整位置から行方向にある文字を、当該調整位置の文字または当該調整位置の文字に隣接する文字から順に行方向に所定の数だけ削除する、テキスト長調整処理と、
を実行させ、
前記誤り検出符号生成処理において、当該テキスト長調整処理によって調整された前記第２の文書の複数の行について前記第４の誤り検出符号を生成し、当該第２の文書の複数の列について前記第５の誤り検出符号を生成し、当該第２の文書の複数の組について前記第６の誤り検出符号を生成する、
ことを特徴とするコンピュータプログラム。
【請求項１１】
前記第１の文書を所定の規則に従って調整する第１の文書調整処理と、
前記第２の文書を前記所定の規則に従って調整する第２の文書調整処理と、を前記コンピュータに実行させ、
前記誤り検出符号取得処理において、前記第１の文書調整処理によって調整された前記第１の文書の複数の行について前記第１の誤り検出符号を取得し、当該第１の文書の複数の列について前記第２の誤り検出符号を取得し、当該第１の文書の複数の組について前記第３の誤り検出符号を取得し、
前記誤り検出符号生成処理において、前記第２の文書調整処理によって調整された前記第２の文書についての第４の誤り検出符号、第５の誤り検出符号、および第６の誤り検出符号を生成する、
請求項１０に記載のコンピュータプログラム。
【請求項１２】
前記誤り検出符号取得処理において、当該第１の文書を構成する各文字を、前記複数の行のそれぞれの先頭の文字を分散させ、かつ、前記複数の行のそれぞれを構成する文字を所定のパターンに従って分散させることによって、前記複数の組にグループ化して、前記第３の誤り検出符号を生成する、
請求項１０または請求項１１に記載のコンピュータプログラム。
【請求項１３】
前記修正処理によって前記誤り位置の文字が修正された前記第２の文書について、前記誤り行の第４の誤り検出符号、前記誤り列の第５の誤り検出符号、および前記誤り組の第６の誤り検出符号を生成する第２の誤り検出符号生成処理と、
前記第１の誤り検出符号と前記第２の誤り検出符号生成処理で生成された前記第４の誤り検出符号とが一致するか否か、前記第２の誤り検出符号と前記第２の誤り検出符号生成処理で生成された前記第５の誤り検出符号とが一致するか否か、前記第３の誤り検出符号と前記第２の誤り検出符号生成処理で生成された前記第６の誤り検出符号とが一致するか否かを判別することによって、前記誤り位置の文字が正しい文字に修正されたか否かを判別する判別処理と、を前記コンピュータに実行させる、
請求項１０ないし請求項１２のいずれかに記載のコンピュータプログラム。
【請求項１４】
前記用紙には、前記複数の第１の誤り検出符号、前記複数の第２の誤り検出符号、および前記複数の第３の誤り検出符号を表わす誤り検出画像が記されており、
前記誤り検出符号取得処理は、前記用紙から読み取られた前記誤り検出画像に基づいて前記複数の第１の誤り検出符号、前記複数の第２の誤り検出符号、および前記複数の第３の誤り検出符号を取得する、
請求項１０ないし請求項１３のいずれかに記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＣＲ（Optical Character Recognition）などによって抽出されたテキストデータに含まれる誤りを特定し、修正する技術に関する。
【背景技術】
【０００２】
用紙に印刷されている文書のテキストデータを取得する技術として、ＯＣＲが普及している。ＯＣＲは、用紙をスキャンして、文書の文字を認識し、認識した文字をテキストデータとして抽出する技術である。しかし、１００％誤りなく文字を認識することは難しい。
【０００３】
そこで、用紙に印刷されている文書をより正確に認識してテキストデータを取得する方法として、以下の技術が提案されている。
【０００４】
特許文献１に記載の電子的再生方法によると、文書の内容に依存した第１の数字を含む文書マーカーが、プリントされた文書の紙面上に、機械読み取り可能に備えられている。スキャニングで再生された、文書の内容に依存する第２の数値が指定される。第１と第２の、デシメーションを施した符号列の比較により、行並びに文字についての誤りが検出でき、また誤りのいくつかが訂正される。
【０００５】
特許文献２に記載の改ざん検知方式によると、印刷時に利用可能なすべてのＯＣＲサービスでＯＣＲを実行し、その結果より得られる各ハッシュ値をＯＣＲサービスの識別子と関連付けて、すべてを電子ファイルに記載し画像化する。受領時、電子ファイルの中に記載されたすべてのＯＣＲサービスの中ですべての利用可能なＯＣＲサービスでＯＣＲを実行する。結果より得られる各ハッシュ値を、画像より得られるハッシュ値と比較する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平７−１６８９１２号公報
【特許文献２】特開２０１１−９７４９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の電子的再生方法によると、ＯＣＲなどによって抽出されたテキストデータと印刷前の文書のテキストデータとを、行単位で比較する。そして、文字列の修正の操作手順を示すトレースバックテーブルを参照することで、誤った文字認識が行われている箇所を、特定する。特定できない場合は、抽出されたテキストデータおよび印刷前の文書を、スペースを含む文字ごとにデシメートする。そして、デシメートの結果を比較することで、誤った文字認識が行われている箇所を特定する。その後、文字列を修正するためのアルゴリズムを起動し、複数の修正候補を生成する。
【０００８】
しかし、この電子的再生方法によると、文字を修正する前の過程、すなわち誤った文字認識が行われている箇所を特定する方法が、複雑である。そのため、より簡単な方法で誤りを特定して修正することが要求される。
【０００９】
特許文献２に記載の改ざん検知方式は、そもそもＯＣＲによって得られたテキストデータの誤りを訂正することができない。
【００１０】
本発明は、このような課題に鑑み、ＯＣＲなどによって得られたテキストデータに含まれる誤りを従来よりも簡単に特定して修正することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一形態に係る文書修正方法は、第１の文書の複数の行のそれぞれについて、誤りの検出用の符号である第１の誤り検出符号を、当該行を構成する各文字のコードを用いて生成し、当該第１の文書の複数の列のそれぞれについて、誤りの検出用の符号である第２の誤り検出符号を、当該列を構成する各文字のコードを用いて生成し、当該第１の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、誤りの検出用の符号である第３の誤り検出符号を、当該組を構成する各文字のコードを用いて生成する第１のステップと、前記複数の第１の誤り検出符号、前記複数の前記第２の誤り検出符号、および前記複数の第３の誤り検出符号を表わす誤り検出画像を生成する第２のステップと、前記第１の文書および前記誤り検出画像を用紙に印刷する第３のステップと、用紙に記されている文書である第２の文書を構成する各文字を認識する第４のステップと、前記用紙に記されている前記誤り検出画像から前記複数の第１の誤り検出符号、前記複数の第２の誤り検出符号、および複数の第３の誤り検出符号を抽出する第５のステップと、前記第２の文書の複数の行のそれぞれについて、誤りの検出用の符号である第４の誤り検出符号を、当該行を構成する各文字のコードを用いて生成し、当該第２の文書の複数の列それぞれについて、誤りの検出用の符号である第５の誤り検出符号を、当該列を構成する各文字のコードを用いて生成し、当該第２の文書を構成する各文字を当該複数の行のいずれとも異なりかつ当該複数の列のいずれとも異なる組合せになるように分散させて複数の組にグループ化し、当該複数の組のそれぞれについて、誤りの検出用の符号である第６の誤り検出符号を、当該組を構成する各文字のコードを用いて生成する第６のステップと、前記第２の文書の、前記第１の誤り検出符号と前記第４の誤り検出符号とが相違する行である誤り行、前記第２の誤り検出符号と前記第５の誤り検出符号とが相違する列である誤り列、および前記第３の誤り検出符号と前記第６の誤り検出符号とが相違する組である誤り組が重なる位置である誤り位置を検出する第７のステップと、前記誤り位置の文字を修正する第８のステップと、前記誤り列が所定の数以上連続する場合に、前記誤り行と当該連続する誤り列のうちの最も先頭に近い前記誤り列とが重なる位置である調整位置を検出する、第９のステップと、前記第６のステップの前に、前記第２の文書の前記調整位置の行方向に隣接する位置に所定の数だけ文字を挿入し、または、前記調整位置から行方向にある文字を、当該調整位置の文字または当該調整位置の文字に隣接する文字から順に行方向に所定の数だけ削除する、第１０のステップと、を有する。
【００１２】
好ましくは、前記第１のステップの前に、前記第１の文書を所定の規則に従って調整する第９のステップと、前記第６のステップの前に、前記第２の文書を前記所定の規則に従って調整する第１０のステップと、を備える。
【発明の効果】
【００１３】
本発明は、ＯＣＲなどによって得られたテキストデータに含まれる誤りを従来よりも簡単に特定して修正することができる。
【図面の簡単な説明】
【００１４】
【図１】文書照合システムの全体的な構成の例を示す図である。
【図２】画像形成装置のハードウェア構成の例を示す図である。
【図３】文書の例を示す図である。
【図４】画像形成装置の機能的構成の例を示す図である。
【図５】文書生成部の構成の例を示す図である。
【図６】文書印刷処理の流れの例を示すフローチャートである。
【図７】チェックサム計算処理の流れの例を示すフローチャートである。
【図８】テキストデータの例を示す図である。
【図９】テキストデータの等間隔チェックサムの例を示す図である。
【図１０】文書および二次元コードが印刷された印刷物の例を示す図である。
【図１１】文書照合部の構成の例を示す図である。
【図１２】誤った文字の修正を実行する場合の、文書照合処理の流れの例を示すフローチャートである。
【図１３】チェックサム計算処理の流れの例を示すフローチャートである。
【図１４】誤った文字を含んだテキストデータの例を示す図である。
【図１５】自動修正処理の流れの例を示すフローチャートである。
【図１６】手動修正処理の流れの例を示すフローチャートである。
【図１７】目視確認位置が強調されている文書を表示する画面の例を示す図である。
【図１８】誤り位置の修正に加えて、テキスト長の調整を実行する場合の、文書照合処理の流れの例を示すフローチャートである。
【図１９】テキスト長調整処理の流れの例を示すフローチャートである。
【図２０】調整位置を含んだテキストデータの例を示す図である。
【図２１】画像形成装置の全体的な流れの例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
図１は、文書照合システム１００の全体的な構成の例を示すである。図２は、画像形成装置１のハードウェア構成の例を示す図である。図３は、文書７１の例を示す図である。
【００１６】
文書照合システム１００は、図１に示すように、画像形成装置１、端末装置２、および通信回線４などによって構成されている。画像形成装置１と端末装置２とは、通信回線４を介して通信することができる。通信回線４として、ＬＡＮ（Local Area Network）、インターネット、公衆回線、または専用回線などが用いられる。
【００１７】
文書照合システム１００は、パーソナルコンピュータなどで作成された契約書などの文書を用紙に印刷する。そして、その後、この文書を電子データ化するために、この用紙からこの文書を読み取る。
【００１８】
文書照合システム１００によると、読み取った文書の電子データの誤りを従来よりも簡単に特定し、修正することができる。
【００１９】
画像形成装置１は、コピー、ファックス、スキャナ、ＰＣプリント、およびボックスなどの機能を集約した装置である。一般に、「複合機」または「ＭＦＰ（Multi Function Peripherals）」などと呼ばれることがある。
【００２０】
ＰＣプリント機能は、端末装置２から受信したデータに基づいて、文書を印刷する機能である。「ネットワークプリンティング」または「ネットワークプリント」などと呼ばれることもある。
【００２１】
ボックス機能は、ユーザごとに「ボックス」または「パーソナルボックス」などと呼ばれる記憶領域を与えておき、各ユーザが自分の記憶領域によって画像ファイルなどのドキュメントデータを保存し管理するための機能である。ボックスは、パーソナルコンピュータにおける「フォルダ」または「ディレクトリ」に相当する。
【００２２】
画像形成装置１は、図２に示すように、ＣＰＵ（Central Processing Unit）１０ａ、ＲＡＭ（Random Access Memory）１０ｂ、ＲＯＭ（Read Only Memory）１０ｃ、補助記憶装置１０ｄ、タッチパネルディスプレイ１０ｅ、操作キーパネル１０ｆ、ＮＩＣ（Network Interface Card）１０ｇ、モデム１０ｈ、スキャンユニット１０ｉ、およびプリントユニット１０ｊなどによって構成される。
【００２３】
タッチパネルディスプレイ１０ｅは、ユーザに対するメッセージを示す画面、ユーザがコマンドまたは情報を入力するための画面、およびＣＰＵ１０ａが実行した処理の結果を示す画面などを表示する。また、タッチパネルディスプレイ１０ｅは、タッチされた位置を示す信号をＣＰＵ１０ａへ送る。
【００２４】
操作キーパネル１０ｆは、いわゆるハードウェアキーボードであって、テンキー、スタートキー、ストップキー、およびファンクションキーなどによって構成される。
【００２５】
ＮＩＣ１０ｇは、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）などのプロトコルで他の装置との通信を実行する。
【００２６】
モデム１０ｈは、ファックス端末との間でＧ３などのプロトコルで画像データをやり取りする。
【００２７】
スキャンユニット１０ｉは、プラテンガラスの上にセットされたシートに記されている画像を読み取って画像データを生成する。
【００２８】
プリントユニット１０ｊは、スキャンユニット１０ｉによって読み取られた画像のほか、ＮＩＣ１０ｇまたはモデム１０ｈによって他の装置から受信した画像を用紙に印刷する。
【００２９】
ＲＯＭ１０ｃまたは補助記憶装置１０ｄには、上述のコピーなどの各機能を実現するためのプログラムが記憶されている。さらに、文書処理プログラム１０Ｐ（図４、図５および図１１参照）が記憶されている。文書処理プログラム１０Ｐについては、後に説明する。
【００３０】
これらのプログラムは、必要に応じてＲＡＭ１０ｂにロードされ、ＣＰＵ１０ａによって実行される。補助記憶装置１０ｄとして、ハードディスクドライブまたはＳＳＤ（Solid State Drive）などが用いられる。
【００３１】
図１に戻り、端末装置２は、ユーザによって作成された文書のデータを画像形成装置１へ送信する。端末装置２として、パーソナルコンピュータ、スマートフォン、またはタブレットコンピュータなどが用いられる。端末装置２には、一般的な文書作成アプリケーションおよび画像形成装置１のドライバなどがインストールされている。
【００３２】
以下、図３に示す文書７１を用紙に印刷し、その後、文書７１を用紙から読み取ってテキストデータ６Ｅを生成する場合を例に、説明する。
【００３３】
〔画像形成装置１の文書印刷処理〕
図４は、画像形成装置１の機能的構成の例を示す図である。図５は、文書生成部１０１の構成の例を示す図である。図６は、文書印刷処理の流れの例を示すフローチャートである。図７は、チェックサム計算処理の流れの例を示すフローチャートである。図８は、テキストデータ６Ｂの例を示す図である。図９は、テキストデータ６Ｂの等間隔チェックサムの例を示す図である。図１０は、文書７１および二次元コード７２が印刷された印刷物７の例を示す図である。
【００３４】
文書処理プログラム１０Ｐによると、図４に示す文書生成部１０１および文書照合部１５１などの機能が画像形成装置１に実現される。
【００３５】
画像形成装置１の文書生成部１０１は、文書７１の印刷物７を生成するための処理を実行する。文書生成部１０１は、図５に示すように、文書受付部１０２、テキストデータ抽出部１０３、テキストデータ正規部１０４、チェックサム計算部１０５、二次元コード生成部１０６、印刷データ生成部１０７、および印刷文書出力部１０８などによって構成される。文書受付部１０２ないし印刷文書出力部１０８は、図６に示す手順で処理を実行する。
【００３６】
ユーザは、端末装置２の文書作成アプリケーションを使用して、文書７１を作成する。そして、印刷の指示を画像形成装置１へ与える。
【００３７】
すると、端末装置２は、文書７１の文書データ６Ａを、画像形成装置１へ送信する。文書データ６Ａとして、テキストデータ、ＰＤＦ（Portable Document Format）データ、またはマイクロソフト社のＷｏｒｄフォーマットのデータなどが用いられる。
【００３８】
画像形成装置１において、文書受付部１０２は、通信回線４を介して、端末装置２から文書データ６Ａを受信する（図６の＃６０１）。
【００３９】
テキストデータ抽出部１０３ないしチェックサム計算部１０５は、受信した文書データ６Ａに示される文書７１のチェックサムを計算するための処理を、図７に示す手順で実行する（＃６０２）。
【００４０】
テキストデータ抽出部１０３は、文書データ６Ａのフォーマットに基づいて、文書７１が示される部分のテキストデータ６Ｂを抽出する（図７の＃６３１）。テキストデータ６Ｂの符号化方式として、ＵＴＦ−８（UCS Transfer Format-8）が用いられる。
【００４１】
テキストデータ正規部１０４は、テキストデータ６Ｂを正規化する（＃６３２）。正規化とは、文書の意味を変えない程度に、所定の規則に基づいてテキストデータ６Ｂを変形することを、意味する。すなわち、ある句読点を他の句読点に変えたり、改行のコードを加えたり、スペースの個数を減らしたりするなど、文書の実質的な内容に影響を与えない程度にテキストデータ６Ｂを変形することを、意味する。そのため、この正規化の処理が行われても、文書の実質的な内容の同一性が担保される。本実施形態では、所定の規則として、以下の規則＿１ないし規則＿６が用いられる。
【００４２】
なお、後述の「＜ｓｐａｃｅ＞」は、１つの空白の文字を表わす。「＜ｎｕｌｌ＞」は、文字がないことを意味する。「＜ＬＦ＞」（Line Feed）は、改行を表す。
【００４３】
（規則＿１）コロンの直後のスペースは削除する。この規則によると、例えば、「ｎａｍｅ：＜ｓｐａｃｅ＞Ｊｏｈｎ」は、「ｎａｍｅ：Ｊｏｈｎ」と変換される。
【００４４】
（規則＿２）連続したスペースは１つだけ残して、すべて削除する。この規則によると、例えば、「ＡＢＣ＜ｓｐａｃｅ＞＜ｓｐａｃｅ＞ＥＦＧ」は、「ＡＢＣ＜ｓｐａｃｅ＞ＥＦＧ」と変換される。
【００４５】
（規則＿３）シングルクォーテーションは１種類だけ使用する。この規則によると、例えば、文書の中に複数種類のシングルクォーテーションが出てきた場合、それらシングルクォーテーションは、予め定められたシングルクォーテーションまたはその他の記号に置き換えられる。
【００４６】
（規則＿４）全角の英数は、半角の英数に変換する。全角のスペースも同様に、半角のスペースに変換する。
【００４７】
（規則＿５）行が変わる箇所に＜ＬＦ＞がない場合は、＜ＬＦ＞を１つ挿入する。この規則によると、例えば、文書７１において、２行目の最後の単語「ｈｅｒ」の右隣に、＜ＬＦ＞が挿入される。
【００４８】
（規則＿６）各行の＜ＬＦ＞以降にある＜ｓｐａｃｅ＞は、すべて削除する。
【００４９】
テキストデータ６Ｂは、テキストデータ正規部１０４の処理の結果、図８に示すように正規化される。なお、左右方向のラインを行とし、行に直交するラインを列とする。テキストデータ６Ｂは、１６行、６０列（行の最大長で６０文字）のデータである。
【００５０】
図７へ戻って、チェックサム計算部１０５は、正規化されたテキストデータ６Ｂに対して、チェックサムの計算を実行する（＃６３３）。チェックサムの計算は、次のように行われる。
【００５１】
チェックサム計算部１０５は、行チェックサムを計算する。行チェックサムは、行に並んでいる文字列のチェックサムである。具体的には、ＵＴＦ−８の文字コードに基づいて行の中の各文字（ただし、改行（＜ＬＦ＞）は除く。）に割り当てられた２桁（８ｂｉｔ）の１６進数の排他的論理和である。つまり、これらの１６進数の排他的論理和（Ｘｏｒ）を取ることで計算される。
【００５２】
例えば、テキストデータ６Ｂの１３行目「ｃｌｏｓｅ＜ｓｐａｃｅ＞ｂｙ＜ｓｐａｃｅ＞ｈｅｒ．」の各文字の１６進数は、「６３  ６Ｃ  ６Ｆ  ７３  ６５  ２０  ６２  ７９  ２０  ６８  ６５  ７２  ２Ｅ」である。そして、これらの１６進数の排他的論理和（６３  Ｘｏｒ  ６Ｃ  Ｘоｒ  ６Ｆ  Ｘｏｒ  …  Ｘｏｒ  ２Ｅ）すなわちチェックサムを計算すると、「３Ｃ」が算出される。
【００５３】
また、チェックサム計算部１０５は、列チェックサムを計算する。列チェックサムは、列に並んでいる文字列のチェックサムである。
【００５４】
ただし、列チェックサムは、行チェックサムと異なり、１桁（４ｂｉｔ）単位の１６進数の排他的論理和である。
【００５５】
例えば、テキストデータ６Ｂの２０列目「＜ｓｐａｃｅ＞＜ｓｐａｃｅ＞＜ｓｐａｃｅ＞ｄｒ＜ｓｐａｃｅ＞＜ｎｕｌｌ＞ｉｄｅｔｎ＜ｎｕｌｌ＞оＥｆ」の１６進数は「２０  ２０  ２０  ６４  ７２  ２０  ００  ６９  ６４  ６５  ７４  ６Ｅ  ００  ６Ｆ  ４５  ６６」である。そして、各桁の１６進数のＸｏｒを計算すると、つまり、「２  Ｘｏｒ  ０  Ｘｏｒ  ２  Ｘｏｒ  ０  Ｘｏｒ  ２  Ｘｏｒ  …  Ｘｏｒ  ６」を計算すると、「Ａ」が算出される。これが、２０列目の列チェックサムである。
【００５６】
このように計算することで、列チェックサムに使用されるデータ量を削減することができる。列に並んでいる文字の個数は、行に並んでいる文字の個数よりも少ないことがある。このような場合、列のエラーの発生率は、行のエラーの発生率よりも低い。そこで、データ量を削減するために、上述のようにチェックサムを計算する。
【００５７】
さらに、チェックサム計算部１０５は、等間隔チェックサムを計算する。等間隔チェックサムは、飛石のように所定の間隔を空けて選択された複数の文字の組のチェックサムである。
【００５８】
各組の文字は、例えば次のように選択すればよい。Ｎ行目の最後の文字の直後に（Ｎ＋１）行目の最初の文字を連結する。先頭の文字から順に第１組、第２組、…、第Ｍ組、第１組、第２組、…、第Ｍ組のように各組へ振り分ける。そして、振り分けた文字を選択する。なお、Ｎは１ないし文書の行数であり、Ｍは組の数である。
【００５９】
例えば、２行５列の文書において、３組のチェックサムを算出する場合、「１行目１列目の文字および１行目４列目の文字ならびに２行目２列目の文字および２行目５列目の文字」を第１組、「１行目２列目の文字および１行目５列目の文字ならびに２行目３列目の文字」を第２組、「１行目３列目の文字ならびに２行目１列目の文字および２行目４列目の文字」を第３組とする。
【００６０】
ところで、後述する誤り位置の検出の精度を上げるために、等間隔チェックサムの対象となる文字の組合せは、いずれの列チェックサムの対象となる文字の組合せをも含まないのが望ましい。
【００６１】
例えば、２行６列の文書において、６組の等間隔チェックサムを計算する場合、「１行目１列目の文字および２行目１列目の文字」を第１組の文字として選択し、「１行目２列目の文字および２行目２列目の文字」を第２組の文字として選択し、「１行目３列目の文字および２行目３列目の文字」を第３組の文字として選択し、「１行目４列目の文字および２行目４列目の文字」を第４組の文字として選択し、「１行目５列目の文字および２行目５列目の文字」を第５組の文字として選択し、「１行目６列目の文字および２行目６列目の文字」を第６組とする場合である。
【００６２】
このように選択しないようにするために、各行の１列目の文字の組を、行が変わるごとに変更すればよい。例えば、次のようにずらせばよい。
【００６３】
まず、１行目の各文字を、第１組、第２組、…、第Ｍ組、第１組、第２組、…、第Ｍ組、…の順に振り分ける。すると、１行目の最後の文字は、第Ｍ組に振り分けられる。２行目の１列目の文字を、１行目の最後の文字と同じ組すなわち第Ｍ組に振り分ける。そして、２行目の２列目以降の文字を、その続きすなわち第１組、第２組、…、第Ｍ組、第１組、第２組、…、第Ｍ組、…の順に振り分ける。以下、同様に、Ｎ行目の先頭の文字を（Ｎ−１）行目の最後の文字と同じ組に振り分け、Ｎ行目の２列目以降の文字をその続きの組に振り分ければよい。
【００６４】
または、等間隔チェックサムとして使用する文字の組の数を、テキストデータの最大列数の値（テキストデータ６Ｂでは６０列）を除した時に余りが生じる商（テキストデータ６Ｂでは、例えば７）としてもよい。または、ある文字の行の番号と列の番号とを加算した数を組の数で除し、その余りによって組を決定してもよい。
【００６５】
以下、図９に示すように、テキストデータ６Ｂの各文字が３つの組、すなわち太枠が付された文字の組である第１組、細枠が付された文字の組である第２組、破線の枠が付された文字の組である第３組に振り分けられ、３つの等間隔チェックサムが生成された場合を例に説明する。
【００６６】
図６に戻って、二次元コード生成部１０６は、計算されたチェックサムを１つのデータにまとめ、そのデータを表わす二次元コード７２の二次元コードデータ６Ｃを生成する（＃６０３）。二次元コードの規格として、ＱＲ（Quick Response）コード（登録商標）が用いられる。
【００６７】
例えば、テキストデータ６Ｂの場合は、すべての行チェックサム（８ｂｉｔ×１６行）、すべての列チェックサム（４ｂｉｔ×６０列）、およびすべての等間隔チェックサム（８ｂｉｔ×３組）のデータが１つにまとめられる。そのデータの量は、４９ｂｙｔｅである。よって、２９セル×２９セル以上のサイズのＱＲコードによって、そのデータを表わすことができる。
【００６８】
印刷データ生成部１０７は、文書データ６Ａに二次元コードデータ６Ｃを、次のように合成する（＃６０４）。
【００６９】
印刷データ生成部１０７は、文書データ６Ａに基づいて文書７１を印刷した用紙の印刷面の状態を求め、二次元コード７２が収まる大きさの余白を印刷面の中から検索する。そして、見つかった余白に二次元コード７２が挿入されるように、文書データ６Ａに二次元コードデータ６Ｃを合成する。
【００７０】
印刷文書出力部１０８は、二次元コードデータ６Ｃが合成された文書データ６Ａを、プリントユニット１０ｊに与える（＃６０５）。そして、プリントユニット１０ｊ（図２参照）は、印刷文書出力部１０８から与えられた文書データ６Ａに基づいて文書７１および二次元コード７２を用紙に印刷する。これにより、図１０のような印刷物７が生成される。
【００７１】
〔画像形成装置１の文書照合処理の第１の例〕
図１１は、文書照合部１５１の構成の例を示す図である。図１２は、誤った文字の修正を実行する場合の、文書照合処理の流れの例を示すフローチャートである。図１３は、チェックサム計算処理の流れの例を示すフローチャートである。図１４は、誤り位置６Ｆを含んだテキストデータ６Ｅの例を示す図である。図１５は、自動修正処理の流れの例を示すフローチャートである。図１６は、手動修正処理の流れの例を示すフローチャートである。図１７は、目視確認位置が強調されている文書を表示する画面の例を示す図である。
【００７２】
第１のユーザは、上述の方法によって、印刷物７を画像形成装置１に生成させる。そして、第２のユーザへ印刷物７を渡す。
【００７３】
第２のユーザは、文書７１をＯＣＲなどによってテキストデータで取得したい。ところが、ＯＣＲなどによる文字の認識率は１００％ではない。しかし、文書照合部１５１によると、ＯＣＲなどによって得られたテキストデータに含まれる誤りを、従来よりも簡単に特定して修正することができる。以下、この仕組みについて説明する。
【００７４】
文書照合部１５１は、図１１に示すように、画像抽出部１５２、テキストデータ抽出部１５３、テキストデータ正規部１５４、チェックサム計算部１５５、二次元コード解析部１５６、誤り検出部１５７、誤り自動修正部１５８、修正方法記憶部１５９、結果表示部１６０、および手動修正部１６１などによって構成される。
【００７５】
そして、画像抽出部１５２ないし手動修正部１６１は、図１２に示す手順で処理を実行する。
【００７６】
第２のユーザは、印刷物７（図１０参照）に印刷されている画像を、画像形成装置１のスキャンユニット１０ｉ（図２参照）に読み取らせる。
【００７７】
すると、画像抽出部１５２は、スキャンユニット１０ｉによって読み取られた画像の中から、文書７１および二次元コード７２を次のように抽出する（図１２の＃７０１）。
【００７８】
画像抽出部１５２は、読み取られた画像の中から二次元コード７２を抽出する。二次元コード７２の位置は、位置検出パターンを検索することによって特定すればよい。そして、読み取られた画像から二次元コード７２を取り除いたものを、文書７１として抽出する。
【００７９】
テキストデータ抽出部１５３ないしチェックサム計算部１５５は、抽出した文書７１に対して、チェックサムを計算する処理を実行する（＃７０２）。この処理の手順は、図１３に示す通りである。
【００８０】
テキストデータ抽出部１５３は、抽出した文書７１をＯＣＲの技術によってテキストデータ６Ｅに変換する（＃７２１）。
【００８１】
テキストデータ正規部１５４は、テキストデータ６Ｅを正規化する（＃７２２）。テキストデータ６Ｅを正規化する方法は、テキストデータ正規部１０４がテキストデータ６Ｂを正規化する方法と同様である。
【００８２】
チェックサム計算部１５５は、正規化されたテキストデータ６Ｅに対して、チェックサムを計算する（＃７２３）。チェックサムの計算の方法は、チェックサム計算部１０５による、正規化されたテキストデータ６Ｂに対するチェックサムの計算の方法と同様である。
【００８３】
以下、テキストデータ６Ｅにおいて、テキストデータ６Ｂの６行目３６列目の「ｗ」が「ｕ」に誤って認識され、テキストデータ６Ｂの１１行目１９列目の「＜ｓｐａｃｅ＞」が「．」に誤って認識されている場合を例に、説明する。
【００８４】
二次元コード解析部１５６は、画像抽出部１５２によって抽出された二次元コード７２を解析することによって、二次元コード７２からテキストデータ６Ｂの行チェックサム、列チェックサム、および等間隔チェックサムを取得する（＃７０３）。
【００８５】
以下、チェックサム計算部１５５によって得られた、テキストデータ６Ｅの行チェックサム、列チェックサム、および等間隔チェックサムをそれぞれ「行チェックサム６Ｅ１」、「列チェックサム６Ｅ２」、および「等間隔チェックサム６Ｅ３」と記載する。また、二次元コード解析部１５６によって得られた、テキストデータ６Ｂの行チェックサム、列チェックサム、および等間隔チェックサムをそれぞれ「行チェックサム６Ｂ１」、「列チェックサム６Ｂ２」、および「等間隔チェックサム６Ｂ３」と記載する。
【００８６】
誤り検出部１５７は、すべての行チェックサム６Ｅ１とすべての行チェックサム６Ｂ１とを、同じ行同士で比較する（＃７０４）。同様に、すべての列チェックサム６Ｅ２とすべての列チェックサム６Ｂ２とを、同じ列同士で比較する。同様に、すべての等間隔チェックサム６Ｅ３とすべての等間隔チェックサム６Ｂ３とを、同じ組同士で比較する。
【００８７】
そして、いずれの行の行チェックサム同士も相違せず、いずれの列の列チェックサム同士も相違せず、いずれの組の等間隔チェックサム同士も相違しない場合は（＃７０５でＮｏ）、誤り検出部１５７は、テキストデータ６Ｅに誤りがないと判別する（＃７０６）。
【００８８】
結果表示部１６０は、テキストデータ６Ｂの内容とテキストデータ６Ｅの内容とが一致している旨が表示されるように、タッチパネルディスプレイ１０ｅを制御する（＃７１１）。
【００８９】
なお、このテキストデータ６Ｅは、その後、次の処理に引き継がれてもよい。例えば、印刷物７が契約書である場合、その印刷物７の元データである文書データ６Ａに係る文書７１と、印刷物７をスキャンした文書７１とは、内容が同じであること、すなわち、契約時の内容が担保されている必要がある。両者の内容が一致するか否かをチェックするために、次の処理として、文書データ６Ａの文書７１のテキストデータ６Ｂのハッシュ値と、スキャンした文書７１のテキストデータ６Ｅのハッシュ値とを比較する処理が行われる。テキストデータ６Ｅは、この処理に引き継がれる。
【００９０】
相違する行チェックサム、列チェックサム、および等間隔チェックサムがある場合は（＃７０５でＹｅｓ）、誤り検出部１５７は、次のように、誤って認識された文字の位置である誤り位置６Ｆを検出する（＃７０７）。
【００９１】
誤り検出部１５７は、相違する行チェックサムに係る行を誤り行として検出し、相違する列チェックサムに係る列を誤り列として検出し、相違する等間隔チェックサムに係る組を誤り組として検出する。なお、誤り行、誤り列、および誤り組が複数、検出されることがある。そして、１つの誤り行、１つの誤り列、および１つの誤り組のすべてが重なる位置を、誤って認識された文字の位置として検出する。
【００９２】
例えば、テキストデータ６Ｅ（図１４参照）において、誤り行（斜線の行）は６行目および１１行目であり、誤り列（水平線の列）は１９列目および３６列目であり、誤り組は第１組（太枠）および第３組（破線の枠）である。よって、６行目と３６列目と第１組とが重なる位置、および１１行目と１９列目と第３組とが重なる位置が、誤り位置６Ｆとして検出される。以下、前者を「誤り位置６Ｆ１」と記載し、後者を「誤り位置６Ｆ２」と記載する。
【００９３】
修正方法記憶部１５９には、誤って認識された文字を正しい文字に修正するための修正方法が複数、予め記憶されている。修正方法は、以下の通りである。
【００９４】
（方法＿１）選択した誤り位置６Ｆを含む誤り行の行チェックサム６Ｅ１と、その誤り行に対応する行の行チェックサム６Ｂ１と、選択した誤り位置６Ｆの１６進数との、排他的論理和を取る。
【００９５】
例えば、誤り位置６Ｆ１の場合、行チェックサム６Ｂ１は「２６」であり、行チェックサム６Ｅ１は「２４」であり、誤り位置６Ｆ１の文字、すなわち誤って認識された文字「ｕ」の１６進数は「７５」である。これらの数の排他的論理和は「７７」になり、この数に対応する文字「ｗ」を正しい文字と推測する。そして、誤り位置６Ｆの文字を、「ｕ」から「ｗ」に修正する。
【００９６】
（方法＿２）誤り位置６Ｆの文字の形に近い文字を、正しい文字と推測する。そして、推測した文字に修正する。互いに形が近い文字として、「ｉとｊ」、「１（数字のイチ）とｌ（小文字のエル）とＩ（大文字のアイ）」、「０（数字のゼロ）とＯ（大文字のオー）とо（小文字のオー）とＱ（大文字のキュー）」などがある。
【００９７】
なお、誤って認識された文字と近い文字が２文字以上ある場合は、近い文字のうちいずれか１つを正しい文字であると推測し、誤って認識された文字を推測した文字に修正する。そして、誤り位置６Ｆを含む誤り行の行チェックサム６Ｅ１、誤り列の列チェックサム６Ｅ２、および誤り組の等間隔チェックサムを再計算し、それぞれを、その誤り行に対応する行の行チェックサム６Ｂ１、その誤り列に対応する列の列チェックサム６Ｂ２、およびその誤り組に対応する組の等間隔チェックサム６Ｂ３と一致するか否か比較する。一致しない場合に、近い文字のうち他の１つを正しい文字と推測して、同様の処理を実行する。
【００９８】
（方法＿３）辞書を参照して、誤り位置６Ｆを含む単語に近い単語、すなわち誤り位置６Ｆの文字だけが相違する単語を検索する。検索した単語における、誤り位置６Ｆに対応する文字を、正しい文字と推測する。そして、誤って認識された文字を、正しい文字であると推測した文字に修正する。
【００９９】
（方法＿４）誤り位置の文字と修正した文字との組み合わせを、履歴として記憶する。選択した任意の誤り位置の文字と、履歴に示される誤り位置の文字とが同じ場合、履歴に示される修正した文字を、正しい文字と推測する。そして、誤って認識された文字を、正しい文字であると推測した文字に修正する。
【０１００】
具体的には、既に「ｉ」を「ｊ」に修正しその履歴を記憶している場合において、誤り位置６Ｆの文字が「ｉ」であれば、「ｊ」を正しい文字と推測する。
【０１０１】
誤り自動修正部１５８は、誤り位置６Ｆに対応する文字を自動的に修正する処理を、次のように実行する（＃７０８）。以下、この処理を「自動修正処理」と記載する。
【０１０２】
誤り自動修正部１５８は、任意の誤り位置６Ｆを１つ選択する（図１５の＃７３１）。１つ目の修正方法すなわち方法＿１を修正方法記憶部１５９から読み出し、誤り位置６Ｆに適用して修正する（＃７３２）。
【０１０３】
誤り自動修正部１５８は、修正したテキストデータ６Ｅに基づき、誤り位置６Ｆを含む誤り行の行チェックサム６Ｅ１、誤り位置６Ｆを含む誤り列の列チェックサム６Ｅ２、および誤り位置６Ｆを含む誤り組の等間隔チェックサム６Ｅ３を再度計算する（＃７３３）。そして、計算した行チェックサム６Ｅ１、列チェックサム６Ｅ２、および等間隔チェックサム６Ｅ３を、それぞれ、誤り位置６Ｆを含む誤り行に対応する行の行チェックサム６Ｂ１、誤り位置６Ｆを含む誤り列に対応する列の列チェックサム６Ｂ２、および誤り位置６Ｆを含む誤り組に対応する組の等間隔チェックサム６Ｂ３と一致するか否かを比較する（＃７３４）。
【０１０４】
比較の結果、行チェックサム６Ｂ１と行チェックサム６Ｅ１とが一致し、列チェックサム６Ｂ２と列チェックサム６Ｅ２とが一致し、かつ等間隔チェックサム６Ｂ３と等間隔チェックサム６Ｅ３とが一致する場合は（＃７３５でＮｏ）、修正は、成功である。
【０１０５】
一方、行チェックサム６Ｂ１と行チェックサム６Ｅ１とが相違し、列チェックサム６Ｂ２と列チェックサム６Ｅ２とが相違し、または等間隔チェックサム６Ｂ３と等間隔チェックサム６Ｅ３とが相違する場合は（＃７３５でＹｅｓ）、誤り自動修正部１５８は、２つ目の修正方法すなわち方法＿２を修正方法記憶部１５９から読み出し、誤り位置６Ｆに適用して修正する。（＃７３２）。そして、チェックサムの再計算と比較を行う（＃７３３、＃７３４）。同様に、読み出した修正方法を適用しても修正が成功しない場合は、修正に成功するまで、さらに次の修正方法を用いて処理を行う（＃７３２〜＃７３４）。
【０１０６】
すべての修正方法を適用しても修正に失敗した場合は（＃７３５でＹｅｓ、＃７３６でＹｅｓ）、誤り自動修正部１５８は、その誤り位置６Ｆを目視確認位置６Ｇとして設定する（＃７３７）。
【０１０７】
誤り自動修正部１５８は、上述の処理を、すべての誤り位置６Ｆに対して実行する（＃７３８でＮｏ）。
【０１０８】
テキストデータ６Ｅは、誤り自動修正部１５８による誤り自動修正処理の結果、誤り位置６Ｆの文字のすべてが修正されることもあれば、一部の誤り位置６Ｆの文字のみが修正されることもあり、全く修正されないこともある。
【０１０９】
なお、上述の修正方法を適用する順番は、適宜、ユーザが設定してもよい。例えば、方法＿４を１つ目の修正方法として適用してもよい。
【０１１０】
図１２に戻って、結果表示部１６０および手動修正部１６１は、目視確認位置６Ｇがある場合に（＃７０９でＹｅｓ）、その目視確認位置６Ｇの文字をユーザの手動によって修正する処理を、図１６に示す方法によって実行する（＃７１０）。
【０１１１】
結果表示部１６０は、誤り自動修正処理が行われた後のテキストデータ６Ｅに示される文書７１を、目視確認位置６Ｇを強調してタッチパネルディスプレイ１０ｅに、例えば図１７のように表示させる（図１６の＃７５１）。
【０１１２】
ここで、ユーザは、表示された文書７１の中の、目視確認位置６Ｇにある文字（すなわち、誤っている文字）およびその周辺の文字を確認する。そして、誤っている文字に対応する、本来の正しい文字を選択する。
【０１１３】
手動修正部１６１は、ユーザからの選択を受け付ける（＃７５２）。そして、目視確認位置６Ｇにある文字を入力された文字に置き換えることによって、テキストデータ６Ｅを修正する（＃７５３）。
【０１１４】
例えば、ユーザは、印刷物７（図１０参照）に印刷されている文書７１とタッチパネルディスプレイ１０ｅに表示されている文書７１とを目視で比較する。そして、目視確認位置６Ｇをタッチし、続けてソフトウェアキーボードの中から正しい文字をタッチして選択する。
【０１１５】
手動修正部１６１は、修正後のテキストデータ６Ｅに基づき、目視確認位置６Ｇを含む誤り行の行チェックサム６Ｅ１、誤り列の列チェックサム６Ｅ２、および誤り組の等間隔チェックサム６Ｅ３を再度計算する（＃７５４）。計算した行チェックサム６Ｅ１、列チェックサム６Ｅ２、および等間隔チェックサム６Ｅ３を、それぞれ、目視確認位置６Ｇを含む誤り行に対応する行の行チェックサム６Ｂ１、誤り列に対応する列の列チェックサム６Ｂ２、およびその誤り組に対応する組の等間隔チェックサム６Ｂ３と一致するか否か比較する（＃７５５）。
【０１１６】
比較の結果、行チェックサム６Ｂ１と行チェックサム６Ｅ１とが一致し、列チェックサム６Ｂ２と列チェックサム６Ｅ２とが一致し、かつ等間隔チェックサム６Ｂ３と等間隔チェックサム６Ｅ３とが一致する場合は（＃７５６でＮｏ）、その目視確認位置６Ｇの修正は、成功である。
【０１１７】
一方、行チェックサム６Ｂ１と行チェックサム６Ｅ１とが相違し、列チェックサム６Ｂ２と列チェックサム６Ｅ２とが相違し、または等間隔チェックサム６Ｂ３と等間隔チェックサム６Ｅ３とが相違する場合は（＃７５６でＹｅｓ）、結果表示部１６０は、文書７１を、その目視確認位置６Ｇを強調してタッチパネルディスプレイ１０ｅに再び表示させる（＃７５１）。
【０１１８】
なお、目視確認位置６Ｇが複数ある場合は、それぞれの目視確認位置６Ｇについて、上述の処理（＃７５１〜＃７５６）を実行する。そして、すべての目視確認位置６Ｇの修正が成功するまで、成功していない目視確認位置６Ｇについて上述の処理（＃７５１〜＃７５６）を繰り返して実行する。
【０１１９】
〔画像形成装置１の文書照合処理の第２の例〕
図１８は、誤った文字の修正に加えて、テキスト長の調整を実行する場合の、文書照合処理の流れの例を示すフローチャートである。図１９は、テキスト長調整処理の流れの例を示すフローチャートである。図２０は、調整位置６Ｈを含んだテキストデータ６Ｅの例を示す図である。
【０１２０】
１つの文字として認識すべきところを２つの文字として誤って認識したり、２つの文字として認識すべきところを１つの文字として誤って認識したりすることがある。具体的には、「ｍ」を「ｒ」および「ｎ」と誤って認識することがあり、「ｖ」および「ｖ」を「ｗ」と誤って認識することがある。
【０１２１】
このような誤りが起きると、誤って認識した文字の位置以降の列にズレが生じ、上述のような１文字単位での誤り修正では対処が困難になる。第１の例では、このようなズレに対応しなかったが、第２の例では、このようなズレに対処した上で、誤った文字の修正を行う。
【０１２２】
以下、テキストデータ抽出部１５３が、テキストデータ６Ｅの８行目３５列目の「ｍ」を「ｒ」および「ｎ」と誤って認識した場合を例に説明する。なお、上述の文書照合処理と重複する点は、説明を省略する。
【０１２３】
画像抽出部１５２ないし二次元コード解析部１５６は、図１２のステップ＃７０１〜＃７０３と同様の処理を行う（＃８０１〜＃８０３）。
【０１２４】
誤り検出部１５７は、すべての行チェックサム６Ｅ１とすべての行チェックサム６Ｂ１とを、同じ行同士で比較する（＃８０４）。同様に、すべての列チェックサム６Ｅ２とすべての列チェックサム６Ｂ２とを、同じ列同士で比較する。同様に、すべての等間隔チェックサム６Ｅ３とすべての等間隔チェックサム６Ｂ３とを、同じ組同士で比較する。
【０１２５】
相違する行チェックサム、列チェックサム、および等間隔チェックサムがあり（＃８０５でＹｅｓ）、かつ相違する列チェックサムに係る列である誤り列が所定の数以上連続する場合は（＃８０７でＹｅｓ）、誤り検出部１５７および誤り自動修正部１５８は、列のズレを調整する処理を次のように実行する（＃８０８）。
【０１２６】
誤り検出部１５７は、所定の数以上（本実施形態では、１０以上とする。）連続する誤り列のうち、最も左に位置する、すなわちテキストデータ６Ｅの先頭に近い誤り列を特定する（図１９の＃８３１）。
【０１２７】
例えば、テキストデータ６Ｅ（図２０参照）において、３５列目〜４６列目を誤り列として検出しているので、その中で最も左に位置する３５列目の列チェックサムを特定する。
【０１２８】
誤り検出部１５７は、相違する行チェックサムの行である誤り行と、特定した誤り列とが重なる位置を、調整位置６Ｈとして検出する（＃８３２）。例えば、テキストデータ６Ｅにおいて、８行目の誤り行と３５列目の誤り列とが重なる位置を、調整位置６Ｈとして検出する。
【０１２９】
誤り自動修正部１５８は、テキストデータ６Ｅを変更する。詳細には、任意の文字（本実施形態では＜ｓｐａｃｅ＞とする）を調整位置６Ｈの右隣に、一時的にｉ個挿入する（＃８３３）。これにより、調整位置６Ｈより右側に位置する文字がｉ個ずつ右に移動する。すなわち、誤り行の長さが長くなる。例えば、＜ｓｐａｃｅ＞を８行目３６列目に挿入する。なお、ｉは自然数であり、最初の値は１である。
【０１３０】
誤り自動修正部１５８は、変更後のテキストデータ６Ｅに基づき、調整位置６Ｈを含む誤り列およびその列よりも右側にある列チェックサム６Ｅ２を再度計算する（＃８３４）。そして、これら計算したチェックサムが、それぞれ、調整位置６Ｈを含む誤り列に対応する列およびその列よりも右側にある列の列チェックサム６Ｂ２と一致するか否か比較する（＃８３５）。
【０１３１】
誤り列の相違が所定の数以下になれば、テキストデータ６Ｅに対して行った変更の内容を確定させる（＃８３７）。
【０１３２】
再度、誤り列が所定の数以上連続して検出された場合に（＃８３６でＹｅｓ）、変更前のテキストデータ６Ｅの調整位置６Ｈの右隣を含めた右側に位置する文字を、一時的にｉ個削除する（＃８３８）。これにより、削除された文字より右側に位置する文字がｉ個ずつ左詰めされる。すなわち、誤り行の長さが短くなる。例えば、８行目３６列目の「ｍ」を削除し、「ｍ」より右側の文字を１文字ずつ左詰めする。
【０１３３】
変更後のテキストデータ６Ｅに基づき、調整位置６Ｈを含む誤り列およびその列よりも右側にある列チェックサム６Ｅ２を再度計算する（＃８３９）。そして、これら計算したチェックサムが、それぞれ、調整位置６Ｈを含む誤り列に対応する列およびその列よりも右側にある列の列チェックサム６Ｂ２と一致するか否か比較する（＃８４０）。
【０１３４】
再度、誤り列を所定の数以上連続して検出した場合に（＃８４１でＹｅｓ）、ｉに１加算する（＃８４２）。そして、誤り列の相違が所定の数以下になるまで、上述の処理を繰り返して実行する（＃８３３〜＃８４１）。
【０１３５】
図１８に戻って、誤り検出部１５７は、変更後のテキストデータ６Ｅにおける誤り位置６Ｆを検出する（＃８０９）。検出の方法は、図１２のステップ＃７０７における検出の方法と同様である。そして、図１２のステップ＃７０８〜＃７１１の処理と同様に、ステップ＃８１０〜＃８１３の処理を実行する。
【０１３６】
図２１は、画像形成装置１の全体的な流れの例を示すフローチャートである。次に、画像形成装置１の全体的な動きを、フローチャートを参照しながら説明する。
【０１３７】
画像形成装置１は、端末装置２から文書データ６Ａを受信すると（＃１１でＹｅｓ）、文書印刷処理を実行する（＃１２）。文書印刷処理の手順は、前に図６で説明した通りである。
【０１３８】
または、画像形成装置１は、スキャンユニット１０ｉ（図２参照）によって印刷物の画像を読み取ると（＃１３でＹｅｓ）、読み取った文書に対して文書照合処理を実行する（＃１４）。文書照合処理の手順は、前に図１２および図１８で説明した通りである。
【０１３９】
画像形成装置１は、画像形成装置１の電源が切断されるまでの間（＃１５でＮｏ）、文書データ６Ａを受信するごとに文書印刷処理を実行し、印刷物の画像を読み取るごとに文書照合処理を実行する。
【０１４０】
本実施形態では、行チェックサム、列チェックサム、および等間隔チェックサムのすべてが重なる位置を、誤り位置６Ｆとして検出した。しかし、相違を検出した行チェックサムおよび列チェックサムが１つしかない場合は、行チェックサムおよび列チェックサムだけに基づいて誤り位置６Ｆを検出してもよい。
【０１４１】
本実施形態では、チェックサムの計算は、改行以外の文字の１６進数を使用したが、改行の１６進数をも使用してもよい。
【０１４２】
本実施形態では、誤りを検出するためにチェックサムを使用したが、パリティまたはハッシュなどを使用してもよい。
【０１４３】
本実施形態では、１行単位または１列単位でチェックサムを計算したが、複数行または複数列をまとめた上で、チェックサムを計算してもよい。これにより、データ量を節約することができる。
【０１４４】
本実施形態では、等間隔チェックサムにおける組の数を３組としたが、組の数はこれに限られない。例えば、２組であってもよいし、４組以上であってもよい。
【０１４５】
本実施形態では、調整位置６Ｈの右隣へ文字を挿入、または右隣の文字を削除した。しかし、調整位置６Ｈへ文字を挿入してもよいし、調整位置６Ｈの文字を削除してもよい。
【０１４６】
本実施形態では、行チェックサムのデータ量は８ｂｉｔであり、列チェックサムのデータ量は４ｂｉｔであった。しかし、上述のように、文字の個数が多くなるほどエラーの発生率が高くなり、文字の個数が少ないほどエラーの発生率が低くなるため、文字の個数に応じて、データ量を変更してもよい。例えば、行の文字が６０字よりも多くなれば、データ量を８ｂｉｔよりも多く（例えば、１６ｂｉｔ）してもよい。または、列の文字が１６字未満になれば、４ｂｉｔ未満（例えば、２ｂｉｔ）にしてもよい。
【０１４７】
本実施形態では、文書印刷処理および文書照合処理を同じ画像形成装置１で実施したが、別々の画像形成装置１で実施してもよい。
【０１４８】
本実施形態では、文書受付部１０２ないし印刷データ生成部１０７、およびテキストデータ抽出部１５３ないし手動修正部１６１の機能は、画像形成装置１に実現されたが、端末装置２に実現されてもよい。この場合、端末装置２によって文書データ６Ａと二次元コードデータ６Ｃとが合成され、合成された後の文書データ６Ａが画像形成装置１に送信される。また、画像形成装置１のスキャンユニット１０ｉによって読み取られた画像が、端末装置２に送信される。
【０１４９】
本実施形態において、手動修正処理でのチェックサムの再計算は、すべての目視確認位置６Ｇに対するユーザからの選択を受け付けた後に、１回だけ実施してもよい。または、一部の目視確認位置６Ｇに対するユーザからの選択を受け付けるごとに、実施してもよい。
【０１５０】
本実施形態において、結果表示部１６０は、誤り自動修正部１５８が修正を行った際に、成功した修正内容を表示させるよう、タッチパネルディスプレイ１０ｅを制御してもよい。例えば、上述の例に基づくと、「６行目３６列目の文字を「ｕ」から「ｗ」に修正しました。」というメッセージを、タッチパネルディスプレイ１０ｅに表示させてもよい。
【０１５１】
その他、文書照合システム１００、画像形成装置１、端末装置２の全体または各部の構成、処理の内容、処理の順序、データの構成などは、本発明の趣旨に沿って適宜変更することができる。
【符号の説明】
【０１５２】
１  画像形成装置（文書修正装置、文書印刷装置）
６Ｂ  テキストデータ
６Ｂ１  行チェックサム（第１の誤り検出符号）
６Ｂ２  列チェックサム（第２の誤り検出符号）
６Ｂ３  等間隔チェックサム（第３の誤り検出符号）
６Ｅ  テキストデータ
６Ｅ１  行チェックサム（第４の誤り検出符号）
６Ｅ２  列チェックサム（第５の誤り検出符号）
６Ｅ３  等間隔チェックサム（第６の誤り検出符号）
６Ｆ  誤り位置６Ｆ（誤り位置）
６Ｈ  調整位置６Ｈ（調整位置）
７  印刷物（用紙）
７１  文書（第１の文書、第２の文書）
７２  二次元コード（誤り検出画像）
１０５  チェックサム計算部（誤り検出符号生成手段）
１０６  二次元コード生成部（誤り検出画像生成手段）
１０８  印刷文書出力部（印刷手段）
１５３  テキストデータ抽出部（文字認識手段）
１５５  チェックサム計算部（誤り検出符号生成手段）
１５６  二次元コード解析部（誤り検出符号取得手段）
１５７  誤り検出部（誤り位置検出手段）
１５８  誤り自動修正部（修正手段）
【図１】
0006763173.tif 000002
【図２】
0006763173.tif 000003
【図３】
0006763173.tif 000004
【図４】
0006763173.tif 000005
【図５】
0006763173.tif 000006
【図６】
0006763173.tif 000007
【図７】
0006763173.tif 000008
【図８】
0006763173.tif 000009
【図９】
0006763173.tif 000010
【図１０】
0006763173.tif 000011
【図１１】
0006763173.tif 000012
【図１２】
0006763173.tif 000013
【図１３】
0006763173.tif 000014
【図１４】
0006763173.tif 000015
【図１５】
0006763173.tif 000016
【図１６】
0006763173.tif 000017
【図１７】
0006763173.tif 000018
【図１８】
0006763173.tif 000019
【図１９】
0006763173.tif 000020
【図２０】
0006763173.tif 000021
【図２１】
0006763173.tif 000022