OCRからOWRへ

本日のお題:

wordFromDictionary="false"


さて、新年なので話題を変えて、OCRについて進めていきましょう。


OCRというのは、本名、Optical Character Recognitionですので、その名前が示すとおり、文字(Character)単位の認識(Recognition)をしていきます。ところが、こんなことを額面どおりに行っているソフトは、おもちゃOCRだけです。


ちゃんとしたOCRは、OCRという名前がついていても、実は、OWRとなっていて、Optical Word Recognitionという感じで、単語(Word)単位の認識(Recognition)をしていきます。


分かりやすくするために、例で見て行きましょう。


前(http://d.hatena.ne.jp/denshikA/20091010)にも書きましたが、OCRというのは、EとB、CとOを勘違いしやすいので、

と変換される

可能性があります。ところが、PIBOBSというのは、英単語としては存在していません(よね??)。*1


なので、各文字が変換される時でも、変換された後でも良いのですが、英語辞書との照合をすることで、OWRソフトは、「この変換は、もしかしたら、ヘンテコ変換かもしれないな」と理解することができるわけです。


世界最強のOCR*2であるAbbyy社のOCRを例にしてみると、辞書に載っていないと思われる場合には、

wordFromDictionary="false"

というのが埋め込まれていて、逆に、辞書に載っていたぞという場合には、

wordFromDictionary="true"

というのが埋め込まれています。


実際に確認してみましょう。


http://www.archive.org/stream/treasureisland09stevgoog#page/n14/mode/1upに行ってみると、

という部分があります。この部分に含む本全体のOCRデータは、こちらで入手できます。*3

http://ia360602.us.archive.org/3/items/treasureisland09stevgoog/treasureisland09stevgoog_abbyy.gz


この部分は、「PIBOBS OP EIGHT」と変換されてしまっているのですが、「PIBOBS」と「EIGHT」に該当する部分は、それぞれ、この部分です。(一行が長ったらしいのですが、改行すると余計見にくくなるので、横に大きくはみ出るようにしています。)

(注)
1.の行が、フォントや文字間などについてお知らせしています。
2.の行が、それぞれ、1文字に関する情報(位置、大きさ、そのほかごちゃごちゃ)をお伝えしています*4



PIBOBS部分



P
i
B
O
B
S


EIGHT部分



E
i
g
h
t


この例ですと、「PIBOBS」は英語辞書に載っていないので、「wordFromDictionary="false"」となっています。一方、「EIGHT」は英語辞書に載っていますので、「wordFromDictionary="true"」となっています。ご確認ください。


しかし、かなり重要なことですが、辞書に載っていないことと、誤変換は、イコールではありません。例として、こんなことがあります。

  1. 人名・地名などの固有名詞は、辞書に載っていない場合がある
  2. 「PEER」という単語を「BEER」と誤変換した場合、両方とも辞書にある*5
  3. そもそも、原本が誤字の場合もある*6


なので、OWRが、辞書に載っていないことだけを理由に、勝手に書き換えをしたりすると危険です。そこで、OWRは辞書に載っていないことを理解しても、何も処理せずに、単に、間違いかもしれないな、という記録を残して、次のシステムにバトンタッチするのです。


というわけで、本日のところは、OCRというのは、実はOWRであり、辞書との照合により、誤変換の可能性をお知らせする機能がついていることを見てみました。あとは、OCR結果を分析するときに、システムが、誤変換の可能性箇所として何らかの処理をするようにすれば、変換精度が上がるかもしれませんね、ということです。

*1:どこかの言葉で、存在しているかもしれませんが。

*2:あちこちで、Abbyy社のOCRをほめるクセがあるため、Abbyy社の回し者ではないのか、とよく言われますが、全然関係ありませんよ

*3:Internet Archiveというところは、全ての情報を公開していく、とても良い団体ですので、こういう例示をするときは、かなり役に立ちます。感謝

*4:OCRのデータを初めて見る方は、びっくりするかもしれませんが、画面上たった1文字のものでも、OCRデータに変換すると、1文字あたり250文字くらいになります。

*5:コンピュータの話題で、Peer to Peerの部分が、Beer to Beerになっていたら、とてもおもしろい、とは思うんですが

*6:実は、よくある