[linux-l] telekom rechnung analyse
Schlomo Schapiro
belug at schlomo.schapiro.org
Do Mai 27 09:32:12 CEST 2004
<peinlich> Mit der kostenlosen Abbyye Version aus der letzten C't unter
Windows. Man muss dabei die Rechnung in 600dpi scannen und von Hand die
Regionen vernünftig (= nur die Tabellen) setzten.</peinlich>
Ich hatte leider mit gOCR gar keinen Erfolg, würde mich freuen wenn das
einer hinkriegt.
Das Script erwartet eine Textdatei mit der Tabelle der Rechnung, die Zeile
"Rufnummer (XXX) XXXXXXXXX" ist dabei wichtig. Das script wird ein paar
typische OCR-Fehler schlucken.
Hier ist das Script:
-------------------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
no strict "refs";
my $MSN=0;
my @tmp;
my %sums;
while (<>) {
tr/tl/1/; # change T and L to 1 because it is most likely a scan error
tr/\r\n//d; # remove CR NL
if (@tmp = m/Rufnummer\s*\(.+\)\s*([\s\d]+)/i) {
$MSN=$tmp[0];
$MSN =~ tr/0-9//cd;
#print("New MSN: $MSN\n");
$sums{$MSN}=0 unless (defined($sums{$MSN}) and $sums{$MSN});
} elsif (@tmp = m/ (\d\d)\.(\d\d)\s* # date
(\d\d)[:;](\d\d)[;:](\d\d)\s* # time
(\d\d)[:;](\d\d)[;:](\d\d)\s* # duration
(\d+)\D+ # phone nr
\d+\s* # nr of units (not important)
(\d,\d\d\d\d) # price
/x or
@tmp = m/ (\d\d)\.(\d\d)\s* # date
(\d\d)[:;](\d\d)[;:](\d\d)\s* # time
(\d\d)[:;](\d\d)[;:](\d\d)\s* # duration
(\d+)\D+ # phone nr
(\d,\d\d\d\d) # price
/x) {
$tmp[9] =~ tr/,/./; # convert German decimal , to .
if ($MSN) {
$sums{$MSN} += $tmp[9];
} else {
print("Unmatched Record: ".join(" , ", at tmp)."\n")
}
} else {
print("Unrecoginzed: $_\n");
}
}
my $totalsum=0;
foreach (keys(%sums)) {
print("MSN $_ cost $sums{$_} Euro (".$sums{$_}*1.16." incl. VAT)\n");
$totalsum+=$sums{$_};
}
print("Total cost $totalsum Euro (".$totalsum*1.16." incl. VAT)\n");
-----------------------------------------------------------------
Schlomo
On Tue, 25 May 2004, Baerwaldt, Ralf wrote:
> > ich habe gerade ein script geschrieben, das eine eingescannte
> > Telekom-Rechnung analysiert und die Kosten/MSN anzeigt.
>
> Mit welchem OCR setzt du das eingescannte in ASCII um ?
>
> Gruss Ralf
> _______________________________________________
> linux-l mailing list
> linux-l at mlists.in-berlin.de
> Die Mailingliste der BeLUG (Berliner Linux User Group)
>
> Wenn du diese Mailingliste abbestellen willst, gehe bitte auf
> https://mlists.in-berlin.de/mailman/listinfo/linux-l
> und trage dich dort bitte aus
>
--
Regards,
Schlomo
Mehr Informationen über die Mailingliste linux-l