Forums Neueste Beiträge
 

OCR-Fehlerkorrektur

06/08/2011 - 22:46 von Ralf . K u s m i e r z | Report spam
X-No-Archive: Yes

begin Thread


Moin!

Ich sitze gerade an umfànglichen OCR-Problemen.

Es sind wahnsinnig viele Tabellen einzulesen. Die bestehen im Prinzip
aus 3x3-Matrizen

a11 a12 a13
a21 a22 a23
a31 a32 a33

aus Zahlen in Dezimalnotation, wobei die unterste Zeile die
Zeilensumme darstellt und die rechte Spalte die Spaltendifferenz, also

ai1 - ai2 = ai3

und

a1j
+ a2j
-
a3j

Beispiel:

4 2 2
0 1 -1
4 3 1

Die Koeffizienten der linken oberen Teilmatrix

a11 a12
a21 a22

sind nichtnegative ganze Zahlen (max. sechsstellig).

Das klappt relativ gut, aber es treten die üblichen OCR-Fehler auf,
also stimmt es gelegentlich nicht. Und nun verknote ich mir meinen
Hirnwindungen ziemlich mit einer Fehlerkorrektur, die mit nicht
allzuvielen Verzweigungen die möglicherweise fehlerhaft eingelesene
Matrix auf die richtige abbildet. (Daß das nicht hundertprozentig
funktionieren kann, ist mir klar, aber Mehrfachfehler sind selten,
außerdem sind in den Tabellen noch ein paar zusàtzliche Redundanzen
(Kontrollsummen) eingebaut, so daß auch "bösartige" Fehler letztlich
auffallen. Was aber gelegentlich vorkommt, ist, daß das OCR-Programm
einfach eine ganze Spalte leer làßt.)

Auf Anhieb sehe ich sechs Kontrollvariable: Jede Zeilen- bzw.
Spaltensumme kann "aufgehen", oder eben nicht. Gedacht hatte ich mir,
daß ich bei einem Fehler in Zeile i und Spalte j einfach das Element
aij ausrechne (was auf zwei Arten geht) und damit das falsche ersetze
und die anderen einfach so lasse, wie sie sind, aber das geht bei
Mehrfachfehlern leider in die Grütze.

Weiß jemand die verblüffend einfache Lösung, auf die ich leider nicht
selbst komme?


Gruß aus Bremen
Ralf
R60: Substantive werden groß geschrieben. Grammatische Schreibweisen:
adressiert Appell asynchron Atmosphàre Autor bißchen Ellipse Emission
gesamt hàltst Immission interessiert korreliert korrigiert Laie
nàmlich offiziell parallel reell Satellit Standard Stegreif voraus
 

Lesen sie die antworten

#1 Ralf . K u s m i e r z
07/08/2011 - 02:53 | Warnen spam
X-No-Archive: Yes

begin quoting, "Ralf . K u s m i e r z" schrieb:

Ich sitze gerade an umfànglichen OCR-Problemen.

Es sind wahnsinnig viele Tabellen einzulesen. Die bestehen im Prinzip
aus 3x3-Matrizen

a11 a12 a13
a21 a22 a23
a31 a32 a33

aus Zahlen in Dezimalnotation, wobei die unterste Zeile die
Zeilensumme darstellt und die rechte Spalte die Spaltendifferenz, also

ai1 - ai2 = ai3

und

a1j
+ a2j
-
a3j

Beispiel:

4 2 2
0 1 -1
4 3 1

Die Koeffizienten der linken oberen Teilmatrix

a11 a12
a21 a22

sind nichtnegative ganze Zahlen (max. sechsstellig).

Das klappt relativ gut, aber es treten die üblichen OCR-Fehler auf,
also stimmt es gelegentlich nicht. Und nun verknote ich mir meinen
Hirnwindungen ziemlich mit einer Fehlerkorrektur, die mit nicht
allzuvielen Verzweigungen die möglicherweise fehlerhaft eingelesene
Matrix auf die richtige abbildet. (Daß das nicht hundertprozentig
funktionieren kann, ist mir klar, aber Mehrfachfehler sind selten,
außerdem sind in den Tabellen noch ein paar zusàtzliche Redundanzen
(Kontrollsummen) eingebaut, so daß auch "bösartige" Fehler letztlich
auffallen. Was aber gelegentlich vorkommt, ist, daß das OCR-Programm
einfach eine ganze Spalte leer làßt.)



Es ist real noch komplizierter. Es gibt nàmlich noch ein paar Spalten
mehr, insgesamt folgende:

|
(AA) | A Z1 A1 S1 Z2 A2 S2 GS E
|

A ist der Anfangsbestand (der auch anhand vorangegangener Listen
bekannt ist und überprüft werden kann, also gibt es grundsàtzlich "von
außerhalb" noch einen alten Anfangsbestand AA), dann gibt es zwei
Bestandsànderungsarten, jeweils bestehend aus Zugang Zk und Abgang Ak,
die saldiert den Saldo Sk ergeben. Die Summe der Salden S1 + S2 ergibt
den Gesamtsaldo GS, und der Endbestand E ist die Summe aus
Anfangsbestand A und Gesamtsaldo GS (und stellt natürlich für die
nàchste Liste den alten Anfangsbestand AA dar).

Folgende vier Tripel bilden jeweils eine Matrixzeile:

{E, A, GS}, {Z1, A1, S1}, {Z2, A2, S2}, {GS, S1, S2}

Außer den drei Salden sind alle Tabelleneintràge nicht-negativ
ganzzahlig. Wenn man noch berücksichtigt, daß A = AA sein sollte und
zu jeweils zwei Tabellenzeilen eine dritte als Kontrollsumme
existiert, dann sollte es eigentlich möglich sein, einen ziemlich
guten Korrekturalgorithmus zu konstruieren.

Für jeweils eine einzelne Matrix habe ich auch einen brauchbaren
"Spaghetti-Code" hinbekommen, aber jetzt habe ich keine Idee, wie ich
die vier Matrizen zweckmàßigerweise verknüpfen sollte, um die
bestmögliche Korrektur zu erzielen.

(Eine einzelne Matrix ist nicht korrigierbar, wenn darin zwei Fehler
vorkommen, die nicht in derselben Reihe liegen. Aber vielleicht
gelingt die Korrektur doch, wenn sie mit weiteren Matrizen gemeinsame
Spalten hat.)

Das OCR-Programm verwechselt gerne die Ziffern 3, 6 und 8 sowie die
Ziffern 1, 2 und 7 miteinander, und manche Stellen sind in der Vorlage
einfach so schlecht, daß sie nicht lesbar sind und nur zufàllige
Erkennungsergebnisse dabei herauskommen. Es ist auch nicht schlimm,
wenn mal eine Stelle nicht korrigierbar ist - das sollte nur möglichst
angezeigt werden, damit man dann selbst in der Vorlage nachschauen und
von Hand nachkorrigieren kann.

(Natürlich ist der Fall denkbar, daß ein Erkennungsergebnis in allen
drei Zeilen konsistent falsch ist. Das ist aber wirklich sehr
unwahrscheinlich. Außerdem gibt es noch Kontrollsummen über größeren
Gruppen in der Tabelle, die eigentlich keine Fehler mehr durchrutschen
lassen sollten (und ich hoffe sehr, daß die Summen auch immer hübsch
aufgehen mögen). Die Listen sind übrigens computergeneriert und nicht
von Hand gesetzt, so daß in den Tabellen selbst zwar nicht lesbare,
aber keine falschen Eintràge vorkommen sollten. (Und natürlich sind
die Datenquellen nicht in maschinenlesbarer Form greifbar, sonst würde
ich mich damit schließlich nicht plagen.))


Gruß aus Bremen
Ralf
R60: Substantive werden groß geschrieben. Grammatische Schreibweisen:
adressiert Appell asynchron Atmosphàre Autor bißchen Ellipse Emission
gesamt hàltst Immission interessiert korreliert korrigiert Laie
nàmlich offiziell parallel reell Satellit Standard Stegreif voraus

Ähnliche fragen