2012-04-16 9 views
2

Tesseract OCRエンジンは意味を持たないテキストを出力することがあります。意味のないテキストや単語を無視するアルゴリズムを設計したいと考えています。以下は出力テキストの一種です。 ""で区切られた認識されたテキスト内の単語とあまりにも多くの単語を持つテキストはガベージ(ヒント:私はせいぜい40単語を含む画像をスキャンしています)のアイデアは役に立ちます。意味のないOCR Engineの出力を無視するには?

wo:>"|axnoA1wvw\ 
ldflfig 
°J!9O‘ !P99W M9N 6 13!-|15!Cl ‘I-/Vl 
978 89l9 Z0 3+ 3 'l9.l. 
97 999 VLL lLOZ+ 3 9l!q°lN 
wo0'|axno/(@|au1e>1e: new; 
1=96r2a1ey\1 1uauud0|e/\e(] 
|8UJB){ p8UJL|\7' 
+0

非常に広い質問です。まず、テキストや単語に意味がないかどうかをどのように知っていますか? (つまり、完璧な辞書がありますか?)あなたは地元の間違いをどのように考慮しますか?例えば。 「ENGINE」が「ENGTINE」と読み込まれている場合、それを完全に破棄しますか?私は何度も行くことができます。 – ElKamina

+0

私の質問が更新されました – chostDevil

+0

単語の長さを調べる上で、連続した記号が多すぎたり、テキストの言語で発生しない連続した文字の組み合わせを検索することができます。 1-3文字の単語のスペルが間違っていたり、別の言語の単語が含まれていたりすることはありません。 – Benjamin

答えて

3

出力テキストを単語に分割します。単語をトリプルに分割します。トリプル周波数を数え、よく知られているテキストコーパスのテキストからトリプル周波数を比較してください(いくつかのメーリングリストのすべての記事は、あなたがOCRを意図しているものについてヘッダー行を除いて論じています)。

私は "トリプル" と言うとき、私は意味:

WHE、鶏は、私、たとえば、トリ、私は「そう...、MEA、、、PLE、EAN

をレをIPLをリッピングこの短い例ではiの頻度は2ですが、他のすべての頻度は1です。

目的の言語の大きな文書に対してこれらのトリプルの頻度カウントを行うと、文字列が同じ言語であるかどうかを推測するのに合理的に正確です。

認められている、ヒューリスティックです。

私はパスワード変更プログラムで英語のパスワードを検出するために同様の方法を使用しました。それは完璧な "明白なパスワード拒否者"のようなものはないが、かなりうまくいった。

+2

これらの「トリプル」は、適切にトリグラムと呼ばれます。 – maniek

1

辞書と単語を確認しますか?

もちろん、これは外来句やコードのようなものに対しては偽陽性となります。問題は一般的に扱いにくいです(例:thisコードか不器用ですか?:)です。唯一の(ほぼ)完璧な方法は、これを人間のレビューのために特定のセクションにフラグを立てるヒューリスティックとして使用することです。

関連する問題