synOCR synOCR - GUI für OCRmyPDF

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
884
Punkte für Reaktionen
187
Punkte
63
Hallo Michael,

vielen Dank. Jetzt versteh ich zumindest das, was Du erreichen willst.
Kannst Du mir bitte mal eine Beispieldatei (Upload meine Signatur) hochladen.
Dann stelle ich das nachher mal nach.

Aber Grundsätzlich ! Du darfst nicht 2x die Datei in den Zielordner schieben. Das mach bitte nur in der ersten Regel. Das Postscript bleibt in Regel 1, und nur dort.

Karsten
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.563
Punkte für Reaktionen
1.389
Punkte
234
Jetzt vermute ich auch die Ursache zu sehen. Die Datei liegt bereits im Zielordner und soll aufgrund der zweiten erfüllten Regel nochmals dorthin kopiert werden (eigentlich meine ich, dass das dann übersprungen wird … :unsure: ). Da greift zunächst die Automatik, dass der Dateiname um einen Zähler erweitert wird. Erst im nächsten Schritt wird erkannt, dass dieselbe Datei bereits vorhanden ist. Zu diesem Zeitpunkt hat die Variable $output bereit den neuen Dateinamen mit Zähler. Im abschließenden Postskript gibt es diese entsprechende Datei dann nicht (das ist jetzt meine Vermutung, ohne den Code durchgegangen zu sein).

Entweder die Vorgehensweise von @Struppix bringt bereits die Lösung. Alternativ kannst du die Variable im Postskript noch umschreiben (den Zähler entfernen): ${output// (1)/}

Das gesamte Postskript sähe dann so aus:
mv "${output// (1)/}" "$(echo '${output// (1)/}' | sed -E 's/([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{2,4})/\3-\2-\1/g')"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Yippie

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
55
Punkte
54
Aber Grundsätzlich ! Du darfst nicht 2x die Datei in den Zielordner schieben. Das mach bitte nur in der ersten Regel. Das Postscript bleibt in Regel 1, und nur dort.
Aber darauf habe ich doch gar keinen Einfluss? Oder kann ich in der zweiten Regel, in der nicht das postscript Kommando steht, das Zielverzeichnis einfach weglassen?
Habe ich noch nie gemacht, wäre mir auch neu, dass dies funktionieren würde.

Andernfalls erzeugen beide Regeln jeweils ein und dieselbe Zieldatei, eine davon mit Postfix (1) weil diese im Zielverzeichnis schon existiert.

Der mv Befehl kommt ja erst zum Schluss, nachdem die temporäre Zieldatei mit Endung (1) schon wieder entfernt wurde. Das Linux Kommando bekommt, wie geschrieben, nicht den finalen Dateinamen, sondern den temporären und scheitert.

Nichtsdestotrotz habe ich am Ende dann aber nur eine Zieldatei, ohne Endung (1)

Ich teste Mal das postscript, das Stephan vorgeschlagen hat.
Auch wenn dieses ggf. nicht die beste Lösung ist, denn bei mehr passenden Regeln müsste ich immer wieder darauf achten welche Nummer die letzte Zwischendatei erhalten wird, um ein postscript korrekt zu coden.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
884
Punkte für Reaktionen
187
Punkte
63
Hallo Michael,

Dein vorgehendes Post sagt doch etwas anderes. Jetzt verstehe ich es nicht mehr.
Letztmalig das Angebot, lade mir Beispiel und YAML Regeln hoch und sage wie der ENTGÜLTIGE Filename lauten soll.

Dann versuche ich das umzusetzen. Ansonsten würde ich mich jetzt ausklinken.

Gruß Karsten
 

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
55
Punkte
54
Danke Karsten für dein Angebot und nichts für ungut, ich wollte das Problem nur selbst lösen.
Denn nur so versteh ich was ich oder synOCR macht, auch für weitere Regeln.

Ich habe nun die PDF und die YAML-Datei nun hochgeladen

Letztendlich findet sich in der Texterkennung die unten im Bild stehende Zeile (im PDF unterhalb des Textes Gutschrift Einspeisung Photovoltaik und re. davon, in der gleichen Zeile das erforderliche Datum).

Die Bestandteile dieser Zeile hätte ich gerne als Dateinamen verwendet:
1709142243796.png
Der finale Dateiname ist oben im Bild zu sehen.

Vielen Dank für deine Bemühungen!
Michael
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
884
Punkte für Reaktionen
187
Punkte
63
Hallo Michael,

wie erwartet funktioniert es so.

Habe den 2. Targetfolder entfernt und mein Postscript Befehl genommen. Fertig.

1709145688210.png
1709145741918.png

Code:
## Erkennung des Datums des Schreibens mit anschließender Umkehrung des Datum von 23.03.2024 nach 2024-03-23
STADTWERKE002:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(Datum\:)(?:.+)\K(([[:digit:]]{2}).([[:digit:]]{2}).)((19|20)\d{2})
    targetfolder: "Stadtwerke/"
    condition: all
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed -E 's/([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})/\3-\2-\1/g')"
    subrules:
    - searchstring: (?i)(Gutschrift Einspeisung Photovoltaik)
      searchtyp: contains
      isRegEx: true
      source: content
      casesensitive: true
    - searchstring: Stadtwerke
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: true

## Erkennung des Abrechnungsjahres, bspw 2023 für den Dateinamen
STADTWERKE003:
    tagname: " Gutschrift Einspeisung PV §tagname_RegEx"
    tagname_RegEx: (?i)(vom)\s*([[:digit:]]{2}.[[:digit:]]{2}.)\K(19|20)\d{2}
    targetfolder:
    condition: all
    subrules:
    - searchstring: (?i)(Gutschrift Einspeisung Photovoltaik)
      searchtyp: contains
      isRegEx: true
      source: content
      casesensitive: true
    - searchstring: Stadtwerke
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: true


Habe Deine Sachen gelöscht.

Gruß Karsten

Edit: Zu beachten. Sollte eine Datei mit gleichem Namen bereits im Zielverzeichnis existieren, wird diese gnadenlos überschrieben.
 
  • Like
Reaktionen: geimist und Yippie

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
55
Punkte
54
Jetzt bin ich aber sprachlos, denn das was du eingestellt hast, habe ich bis auf dieses Konstrukt hier
Code:
"${output%/*}/$(echo "${output##*/}"
eigentlich immer schon selbst getestet - ohne Erfolg!

Gut das fehlende Target-Verzeichnis in der zweiten Regel ist jetzt neu hinzu- bzw. weggekommen und spielt nun mit dem Konstrukt oben perfekt zusammen.

Aber egal, wieder was gelernt und herzlichen Dank Karsten!(y)
 
  • Like
Reaktionen: geimist

tomjons

Benutzer
Mitglied seit
05. Jun 2013
Beiträge
68
Punkte für Reaktionen
4
Punkte
8
Guten Morgen,

bei uns funktioniert seit ein paar Tagen die "Tag-Erkennung" nicht mehr.
Wir haben an der Konfiguration nichts geändert. Zum Test habe ich als Image die aktuellste Version genommen auch hier eine Veränderung.

Die "Bestellnummer" wird scheinbar nicht mehr gefunden und vor den Titel gesetzt.
In dieser Datei die Zeile: "Ihr Beleg: 203197"
 

Anhänge

  • log.zip
    199,1 KB · Aufrufe: 1
  • Rechnung 2024-045167.pdf
    173,4 KB · Aufrufe: 0
  • _Rechnung 2024-047395.pdf
    255,2 KB · Aufrufe: 0
  • _TagConfig_[profile_default]-sicherung.txt
    2,1 KB · Aufrufe: 3
Zuletzt bearbeitet:

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
884
Punkte für Reaktionen
187
Punkte
63
Hi,

tausch mal Deine RegEx gegen diese in beiden Zeilen:
Code:
(?i)(Ihr Beleg[\:\;]\s+)\K(\d+)

also:
Code:
tagBestellnummer:
    tagname: "Bestellnummer"
    targetfolder:
    tagname_RegEx: (?i)(Ihr Beleg[\:\;]\s+)\K(\d+)
    condition: all
    subrules:
    - searchstring: (?i)(Ihr Beleg[\:\;]\s+)\K(\d+)
      searchtyp: contains
      isRegEx: true
      source: content
      casesensitive: false     
tagMarktplatzAmazon:
    tagname: ""
    targetfolder: "/Amazon/"
    tagname_RegEx:
    condition: any
    subrules:
    - searchstring: Amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
tagMarktplatzEbay:
    tagname: ""
    targetfolder: "/Ebay/"
    tagname_RegEx:
    condition: any
    subrules:
    - searchstring: Ebay
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
tagMarktplatzShop:
    tagname: ""
    targetfolder: "/Shop/"
    tagname_RegEx:
    condition: all
    subrules:
    - searchstring: Amazon
      searchtyp: does not contain
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: Ebay
      searchtyp: does not contain
      isRegEx: false
      source: content
      casesensitive: false

Gruß
Karsten
 

tomjons

Benutzer
Mitglied seit
05. Jun 2013
Beiträge
68
Punkte für Reaktionen
4
Punkte
8
Vielen, Vielen Dank ... damit scheint es wieder zu klappen.
 
Zuletzt bearbeitet von einem Moderator:

Behemoth09

Benutzer
Mitglied seit
24. Feb 2024
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
PS: Teste bitte unbedingt den März und versuche mal die Variante mit Umlauten zuerst:

Code:
rule_1007:
    tagname: §tagname_RegEx
    targetfolder: /volume1/docker/SynOCR/Outbox/Job/LfULG/Bezügemitteilungen
    tagname_RegEx: (?i)(für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20)\K(\d{2})
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/^.\{6\}_//g;s/für\ Januar/0101/g;s/für\ Februar/0201/g;s/für\ März/0301/g;s/für\ April/0401/g;s/für\ Mai/0501/g;s/für\ Juni/0601/g;s/für\ Juli/0701/g;s/für\ August/0801/g;s/für\ September/0901/g;s/für\ Oktober/1001/g;s/für\ November/1101/g;s/für\ Dezember/1201/g')"
    condition: all
    subrules:
    - searchstring: (?i)((für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true

rule_1008:
    tagname: §tagname_RegEx_Bezügemitteilung
    tagname_RegEx: (?i)((für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))
    condition: all
    subrules:
    - searchstring: (?i)((für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true
Jetzt bin ich endlich mal zum testen gekommen, sorry. Die Variante mit den Umlauten funktioniert für den März nicht.

Daher habe ich Folgendes versucht;

Code:
rule_1007:
    tagname: §tagname_RegEx
     tagname_RegEx: (?i)(f.r)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20)\K(\d{2})
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/^.\{6\}_//g;s/für\ Januar/0101/g;s/für\ Februar/0201/g;s/für\ M.rz/0301/g;s/für\ April/0401/g;s/für\ Mai/0501/g;s/für\ Juni/0601/g;s/für\ Juli/0701/g;s/für\ August/0801/g;s/für\ September/0901/g;s/für\ Oktober/1001/g;s/für\ November/1101/g;s/für\ Dezember/1201/g')"
    condition: all
    subrules:
    - searchstring: (?i)((f.r)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true

rule_1008:
    tagname: §tagname_RegEx_Bezügemitteilung
    tagname_RegEx: (?i)((f.r)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))
    condition: all
    subrules:
    - searchstring: (?i)((f.r)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true

Das funktioniert jedoch auch nicht. Der Dateiname lautet dabei: 190301_.pdf (lauten müsste er 190301_Bezügemitteilung.pdf), d.h. das Datum wurde korrekt ausgelesen, aber es konnte nicht den Bezügemitteilungen zugeordnet werden.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
884
Punkte für Reaktionen
187
Punkte
63
Das funktioniert jedoch auch nicht
Probiere bitte mal so. Ungetestet da unterwegs...wäre aber eher komisch wenn es geht.

Code:
rule_1007:
    tagname: §tagname_RegEx
     tagname_RegEx: (?i)(für)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20)\K(\d{2})
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/^.\{6\}_//g;s/für\ Januar/0101/g;s/für\ Februar/0201/g;s/für\ M.rz/0301/g;s/für\ April/0401/g;s/für\ Mai/0501/g;s/für\ Juni/0601/g;s/für\ Juli/0701/g;s/für\ August/0801/g;s/für\ September/0901/g;s/für\ Oktober/1001/g;s/für\ November/1101/g;s/für\ Dezember/1201/g')"
    condition: all
    subrules:
    - searchstring: (?i)((für)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true

rule_1008:
    tagname: §tagname_RegEx_Bezügemitteilung
    tagname_RegEx: (?i)((für)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))
    condition: all
    subrules:
    - searchstring: (?i)((für)\s*(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true

Lade mir mal bitte das Beispiel mit März hoch (meine Signatur). Dann teste ich das.

Karsten
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
884
Punkte für Reaktionen
187
Punkte
63
Die Variante mit den Umlauten funktioniert für den März nicht.
Also bei mir funktioniert es.

Allerdings habe ich festgestellt, habe ich wohl nicht getestet... , dass wenn man mehrere Dateien gleichzeitig durchlaufen lässt, die Umbenennung ins Leere läuft.
Deshalb ist der Syntax zu ändern.

Code:
rule_1007:
    tagname: §tagname_RegEx
    targetfolder: /volume1/docker/SynOCR/Outbox/Job/LfULG/Bezügemitteilungen
    tagname_RegEx: (?i)(für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20)\K(\d{2})
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/für\ Januar/0101/g;s/für\ Februar/0201/g;s/für\ März/0301/g;s/für\ April/0401/g;s/für\ Mai/0501/g;s/für\ Juni/0601/g;s/für\ Juli/0701/g;s/für\ August/0801/g;s/für\ September/0901/g;s/für\ Oktober/1001/g;s/für\ November/1101/g;s/für\ Dezember/1201/g' | sed 's/^.\{6\}_//g')"
    condition: all
    subrules:
    - searchstring: (?i)((für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true

rule_1008:
    tagname: §tagname_RegEx_Bezügemitteilung
    tagname_RegEx: (?i)((für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))
    condition: all
    subrules:
    - searchstring: (?i)((für)\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s*(19|20\d{2}))
      searchtyp: contains
      isRegEx: true

Falls der März noch immer nicht geht bitte mal die LOG's hochladen (meine Signatur).

Gruß Karsten
 

Mamoro92

Benutzer
Mitglied seit
13. Mrz 2024
Beiträge
5
Punkte für Reaktionen
2
Punkte
3
Hallo an Alle,

wenn ich die letzten Nachrichten so durchlese, dann vermute ich, dass ich das ganze vielleicht unterschätzt habe.
Wie in der Anleitung beschrieben habe ich (DS220+, DSM 7.21) synocr runtergeladen (inkl. spk, Docker etc.) und installiert. Das Skript läuft stündlich durch (user root).
Habe einen INPUT, OUTPUT und Backup, sowie Log Ordner hinterlegt und konfiguriert und ansonsten alles bei den Standard-Einstellungen belassen.
Danach habe ich einen manuellen Start begonnen ich nach 20 Minuten abgebrochen habe. Danach war 1 Datei im OUTPUT Ordner. Diese war auch mit OCR versehen. Habe dann einen zweiten Durchlauf gestartet. Der läuft jetzt seit 3 Stunden. Im Output Ordner ist nur eine einzige PDF hinzugekommen (auch wieder mit OCR und auch korrekt umbenannt). Einen weiteren Durchlauf kann ich nicht starten, da synocr noch laufen würde.
Woran kann es liegen? Hat sich das System/Skript da aufgehangen?

Nachtrag: Die Dateien stehen im Log aufgelistet, laufen durch. Werden alle ins Backup verschoben, aber OUTPUT Ordner bleibt leer.
 
Zuletzt bearbeitet:

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.563
Punkte für Reaktionen
1.389
Punkte
234
Wie viele Quelldateien liegen denn im Inputordner?
Bitte beachte: Der Ablauf ist zweigeteilt. Im ersten Schritt wird die Texterkennung durchgeführt und die Trennseiten verarbeitet. Im zweiten Schritt wird dann nach Tags gesucht, umbenannt und in den Zielordner verschoben. Die Dateien liegen während des Ablaufs in einem temporären Ordner.
 

Mamoro92

Benutzer
Mitglied seit
13. Mrz 2024
Beiträge
5
Punkte für Reaktionen
2
Punkte
3
Hallo lieber Struppix, lieber Stephan,

wie Stephan geschrieben hat war es am Ende tatsächlich. Die Daten waren eines Morgens allesamt im Ziel-Ordner.
Die Umbenennung war nicht ganz so wie gewünscht, aber damit werde ich mich jetzt auseinandersetzen und optimieren :)
Habt vielen Dank
 
  • Like
Reaktionen: Struppix und geimist

lil-ac

Benutzer
Mitglied seit
14. Feb 2013
Beiträge
39
Punkte für Reaktionen
0
Punkte
6
Guten Morgen,
mir ist gestern, die Frage gekommen: Kann ich mehrere Profile nutzen und evtl. verschiedene Input-Ordner. Hintergrund ist dieser, ich möchte gerne die ganzen normalen Quittungen einscanen. Hierfür brauche ich keine große OCR Prüfung. Ich würde dann einen Input -Quittungen erstellen, diesen mit synocr verknüpfen und im Scanner den Ordner dann hinterlegen. Ist das Möglich? Vielen Dank schonmal. :)
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat