[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