synOCR synOCR - GUI für OCRmyPDF

DeeKay1

Benutzer
Mitglied seit
20. Jun 2020
Beiträge
100
Punkte für Reaktionen
23
Punkte
24
Hallo @DeeKay1 ,
Irhendwie ist mein login nicht ok gewesen.
Habe länger keine Benachrichtigung mehr bekommen, und da ich auf der Arbeit Land unter war, habe ich auch im forum nicht gelesen. 🙈.
Sind die Probleme die du gemeldet hattest schon gefixed?
Sonst schaue ich mir das ganze mal sn
Gruß
Thorsten
Na großartig, diesmal habe ich keine Benachrichtigung bekommen :D
Ich hatte einen PR erstellt, den @geimist heute approved hat. Weshalb ich mir dann auch dachte: Kuckste doch mal wieder ins Forum was da so los ist und prompt deinen Ping gesehen habe.
 

Gthorsten

Benutzer
Mitglied seit
22. Mai 2021
Beiträge
151
Punkte für Reaktionen
42
Punkte
28
Habe einen neuen PR erstellt mit der language setting und mit einem Bugfix für ein anderes Problem mit einem Datum.
Dein pr ist auch mit drin, bzw Stephan hat den übernommen.
Ist schon bei Stephan
 
  • Like
Reaktionen: DeeKay1

schlomo

Benutzer
Mitglied seit
23. Sep 2024
Beiträge
12
Punkte für Reaktionen
5
Punkte
3
Das sollte aber eigentlich kein Problem sein. Kannst du mal aus dem logfile die Zeile kopieren die Probleme macht?
Ich habe mir den regulären Ausdruck in search_all_numeric_dates in der entsprechenden Python Datei angesehen (find_dates.py). Ich denke diese Anpassung sollte das Problem lösen:

Code:
# D.M.Y (mit und ohne führende Nullen)
(r"((\s)|(\())([1-9]|0[1-9]|[12][0-9]|3[01])(\s?)(\.)(\s?)([1-9]|0[1-9]|1[0-2])(\s?)(\.)(\s?)(\d{4})((\.|\,|\s|\))|\s*$)", "DMY", True)

Folgende Anpassung könnte auch die Erkennung von zweistelligen Jahreszahlen verbessern:

Code:
# D.M.Y (mit Unterstützung für zweistellige und vierstellige Jahreszahlen)
(r"((\s)|(\())([1-9]|0[1-9]|[12][0-9]|3[01])(\s?)(\.)(\s?)([1-9]|0[1-9]|1[0-2])(\s?)(\.)(\s?)(\d{2}|\d{4})((\.|\,|\s|\))|\s*$)", "DMY", True)

Hier noch ein paar weitere Vorschläge

Code:
regexlist = [
    # D.M.Y mit 4-stelligen Jahreszahlen
    (r"((\s)|(\())(0[1-9]|[12][0-9]|3[01])(\s?)(\.)(\s?)(0[1-9]|1[0-2])(\s?)(\.)(\s?)(\d{2}|\d{4})((\.|\,|\s|\))|\s*$)", "DMY", True),
    
    # Monat Jahr (März 2024)
    (r"\b([a-zA-ZäÄöÖüÜß]{3,12})\s+(\d{4})\b", "MY", True),

    # US-Format MM/DD/YYYY oder MM-DD-YYYY
    (r"((\s)|(\())(0[1-9]|1[0-2])(\s?)(\/|-)(\s?)(0[1-9]|[12][0-9]|3[01])(\s?)(\/|-)(\s?)(\d{4})((\.|\,|\s|\))|\s*$)", "MDY", True),

    # DD. Monat YYYY (z. B. 12. März 2024)
    (r"((\s)|(\())([1-9]|[12][0-9]|3[01])(\.?)\s?([a-zA-ZäÄöÖüÜß]{3,12})\s+(\d{4})((\.|\,|\s|\))|\s*$)", "DMY", True)
]


Beste Grüße
Schlomo
 
  • Like
Reaktionen: Gthorsten

Gthorsten

Benutzer
Mitglied seit
22. Mai 2021
Beiträge
151
Punkte für Reaktionen
42
Punkte
28
Stephan hat schon Änderungen bekommen, die das lösen sollten..
Mit der Erkennung von Daten aus unterschiedlichen Sprachen gibt es auch schon Überlegungen, so das der User es auswählen kann. Aber das braucht noch ein wenig Zeit. Da wird es eine ui und eine Code Änderung geben
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.377
Punkte
234

Honkytonk

Benutzer
Mitglied seit
10. Jun 2020
Beiträge
22
Punkte für Reaktionen
1
Punkte
3
Korrekt. @schlomo hat ja mit seinem ScanSnap daselbe Problem. Ich hab keine Ahnung, warum Canon und ScanSnap so verfahren.
Ich glaube, ich konnte das Problem von @schlomo und mir lösen: Mit dem letzten Software-Update ist der ScanSnap zwar endlich direkt in der Lage, auf ein Netzlaufwerk zu scannen, aber er scheint es eben auf die von geimist beschriebene "problematische" Weise zu tun. Im ScanSnap selbst findet sich in den Einstellungen eine Option unter "Wifi-Einstellungen\Scan in Netzwerkordner\SMB 1.0/CIFS verwenden". Wird das aktiviert, geht der Scan auch von mehrseitigen Dokumenten direkt in den Input-Ordner von SynOCR völlig problemlos!

Dass es diese Einstellung überhaupt gibt, war mir nicht bewusst: Ich hatte sie auch nicht vermisst, weil der Scan in einen Netzwerk-Ordner ja auch ohne sie grundsätzlich funktioniert.
 
  • Like
Reaktionen: geimist

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.377
Punkte
234
Vielen Dank für den Hinweis. Ich hab ihn gleich mal in die FAQs aufgenommen, auch wenn sich mir der Zusammenhang nicht wirklich erschließt.
 

Honkytonk

Benutzer
Mitglied seit
10. Jun 2020
Beiträge
22
Punkte für Reaktionen
1
Punkte
3
Okay, jetzt verstehe ich die Welt gar nicht mehr: Vorhin hat es definitiv mehrfach geklappt, jetzt gibt es wieder Errorfiles. Ein Muster dahinter kann ich nicht erkennen. Schade, zu früh gefreut. @geimist Tut mir leid, wenn du die FAQs nun doch wieder zurückdrehen musst.
 
  • Haha
Reaktionen: geimist

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
54
Punkte
54
Eine Frage zur YML-Datei:

Kann ich irgendwie über eine Regel erreichen, dass das Datum unten mit Pfeil markiert, statt des Datums bei (1) oder (2) erkannt und für den Dateinamen verwendet wird:
YAML:
    tagname: "§yocr4-§mocr-§docr Nachweis Scheckheft"
1728808085637.png
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
184
Punkte
63
Guten Morgen,
denke schon. Nur die Frage ist nicht eindeutig.
Wie erzeugst Du denn das Datum? Über die GUI oder per Regel, also wie oben gezeigt?
Und hast Du ein paar Beispiele an denen man sehen könnte, ob es ein sich wiederholendes Muster gibt?

Karsten
 

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
54
Punkte
54
Weitere Details zur Regel, eigentlich eine der einfachsten überhaupt, die ich habe ;-)

YAML:
KRAMMER_3:
    tagname: "§yocr4-§mocr-§docr Nachweis Scheckheft"
    tagname_RegEx: ""
    targetfolder: "/Autohaus/"
    condition: all  
    subrules:
    - searchstring: (?i)(Komplettnachweis|Service-Nachweis)
      searchtyp: contains
      isRegEx: true
      source: content
      casesensitive: true

Der oben gezeigte Screenshot aus dem gescannten Dokument ist immer wieder gleich, wenn ich ins Autohaus zum Kundendienst fahre. Der Screenshot zeigt dabei den Beginn der A4-Seite.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
184
Punkte
63
Hallo,
das meinte ich nicht. Sondern ist auf den zu durchsuchenden Dokumenten das "Bild" was Du oben zeigst, also quasi "Fahrzeuginspektion mit Ölwechsel" zB. immer gleich? Wenn nicht gibt es immer wiederkehrende Gemeinsamkeiten?
Wir brauchen ja etwas, an dem wir uns orientieren können. Oder vielleicht auch das, ist es immer das Dritte Datum?

Karsten
 
  • Like
Reaktionen: peterhoffmann

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
54
Punkte
54
Ich habe unten die letzten drei Dokumente angefügt, es steht immer "Datum" als Überschrift vor dem gesuchten Datum und ja, es ist immer das dritte Datum, nach dem Abschnitt "Fahrzeugdaten".

Der Text danach variiert leicht: "Eintragung der Werkstatt" <> "Inspektion mit Ölwechsel".
1728818354971.png
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
184
Punkte
63
Hallo,
so nun hatte ich ein wenig Zeit. Schreib mal ob es funktioniert.

Code:
KRAMMER_3:
    tagname: §tagname_RegEx Nachweis Scheckheft
    targetfolder: /Autohaus/
    tagname_RegEx: (?is)(?:(?:19|20)(?:[0-9]{2})(?:[\,\.\-\_\;\:\•\|\/\\\*\ ]{1,3})(?:[0-3]{0,1}[0-9]{0,1})(?:[\,\.\-\_\;\:\•\|\/\\\*\ ]{1,3})(?:[0-3]{0,1}[0-9]{0,1})).+?(?:(?:19|20)(?:[0-9]{2})(?:[\,\.\-\_\;\:\•\|\/\\\*\ ]{1,3})(?:[0-3]{0,1}[0-9]{0,1})(?:[\,\.\-\_\;\:\•\|\/\\\*\ ]{1,3})(?:[0-3]{0,1}[0-9]{0,1})).+?\K(?:(?:19|20)(?:[0-9]{2})(?:[\,\.\-\_\;\:\•\|\/\\\*\ ]{1,3})(?:[0-3]{0,1}[0-9]{0,1})(?:[\,\.\-\_\;\:\•\|\/\\\*\ ]{1,3})(?:[0-3]{0,1}[0-9]{0,1}))
    multilineregex: true
    condition: all 
    subrules:
    - searchstring: (?i)(Komplettnachweis|Service-Nachweis)
      searchtyp: contains
      isRegEx: true
      source: content
      casesensitive: true

Gruß Karsten

PS: Ich muss mal schauen, wenn etwas mehr Zeit, ob es nicht eine galantere Methode gibt.
 
  • Love
  • Like
Reaktionen: geimist und Yippie

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
54
Punkte
54
Vielen herzlichen Dank, das hat wunderbar funktioniert!

Siehe erzeugte Dateinamen für die Vorlage aus dem Jahr 2023:
2023-07-13 Nachweis Scheckheft.pdf und aus dem Jahr 2022: 2022-11-28 Nachweis Scheckheft.pdf

Die Regel hat exakt das gewünschte Datum gefunden (y)

Ich frage jetzt aber nicht nach, was die ellenlange RegEx macht, muss das Mal in regex101.com testen :)
 
  • Like
Reaktionen: Struppix

Yippie

Benutzer
Mitglied seit
01. Feb 2011
Beiträge
643
Punkte für Reaktionen
54
Punkte
54
Kann man in der YAML-Datei auch Berechnungen anstellen?

Wenn bspw. die Variable §yocr4 das beim OCR-Prozess erkannte Jahr 2024 enthält, würde ich gerne so was in der Art wie §yocr4 + 1 daraus machen und zwar zur Laufzeit. Es soll also das Jahr 2025 herauskommen.

Ebenfalls in diesem Zusammenhang: Ich nutze die Option
Code:
postscript
um die finale Datei dann an den gewünschten Ort zu verschieben, mittels Linux
Code:
mv
Befehl.

Auch hier stellt sich die Frage, wie ich die synOCR-Variable §yocr4 als Ziel-Verzeichnisname grundsätzlich und des Weiteren, analog zu oben, mit §yocr4 + 1 verwenden kann?

Ich habe bereits so etwas wie mv ..... /wohnung/§yocr4 getestet, dabei wird jedoch erwartungsgemäß nicht §yocr4 durch 2024 ersetzt. Ich erhalten ein neues Verzeichnis, wie ./wohnung/§yocr4.

Daher die Frage, kann ich auch hier irgendwie erreichen, dass das Zielverzeichnis bzw. die Variable korrekt ersetzt wird?
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
184
Punkte
63
Hallo,

wieder mal eine Aufgabe ....

Ja man kann in einer RegEx natürlich auch rechnen. Nur geht das bei uns leider nicht, da wir ja auf eine RegEx "Zeile" beschränkt sind, und keine weiteren Befehle mit einbauen können.
Somit müssen wir auf Postscript ausweichen und rechnen dort in der Bash. Die Bash unterstützt nur integere Werte.

Leider erläuterst Du nicht den Zweck oder zeigst mal Dein Script, dass wir verstehen könnten was genau Du suchst.

Also hier ins Blaue eine Test Regel:
YAML:
rule_1001:
    tagname: test
    targetfolder: /autohaus/
    postscript: newtargetdir=$(echo "$(( ${date_yy}+1 ))") && newtargetfile=$(echo "${NewName}" | sed 's/'${date_yy}'/'$(( ${date_yy}+1 ))'/g') && mkdir -p "${output%/*}/${newtargetdir}" && filecount=$(find "${output%/*}/${newtargetdir}" -maxdepth 1 -type f -name "${newtargetfile}*.pdf" -printf '.' | wc -c) && if [ "${filecount}" -eq 0 ]; then mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile}.pdf"; else mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile} (${filecount}).pdf"; fi
    condition: all
    subrules:
    - searchstring: test
      searchtyp: contains

Der Postscript erzeugt Dir ein Vereichnis im targetfolder .
Weiterhin wird das Datum im Dokumenten Namen auf "Jahr +1" geändert.

Für den Fall, dass Du nur den Ordner mit "Jahr 1" benötigst, aber mit dem original umbenannten Dokumenten Namen:
YAML:
rule_1001:
    tagname: test
    targetfolder: /autohaus/
    postscript: newtargetdir=$(echo "$(( ${date_yy}+1 ))") && newtargetfile=$(echo "${NewName}") && mkdir -p "${output%/*}/${newtargetdir}" && filecount=$(find "${output%/*}/${newtargetdir}" -maxdepth 1 -type f -name "${newtargetfile}*.pdf" -printf '.' | wc -c) && if [ "${filecount}" -eq 0 ]; then mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile}.pdf"; else mv "${output}" "${output%/*}/${newtargetdir}/${newtargetfile} (${filecount}).pdf"; fi
    condition: all
    subrules:
    - searchstring: test
      searchtyp: contains

Bitteschön
Gruß Karsten
 

mobile-freak

Benutzer
Mitglied seit
25. Dez 2023
Beiträge
7
Punkte für Reaktionen
6
Punkte
3
Hallo zusammen,

ich bin soeben auf SynOCR gestoßen und habe es auch schon auf meiner Synology eingerichtet.
Der erste Eindruck TOP! Danke an die Entwickler!

Eine Frage Offtopic jedoch irgendwie doch im Zusammenhang hierzu.
Da ich keinen Dokumentenscanner habe, möchte ich über mein Smartphone/eine App (Android) Dokumente einscannen und an der richtigen Stelle ("_INPUT") ablegen und SynOCR arbeiten lassen.

Gibt es eine etablierte Lösung die von einigen genutzt wird?

Und noch eine weitere Frage.
Welche Regel kann ich verwenden um Rechnungen die für mich und Rechnungen für meine Frau in eigenständige Ordner ablegen.
Bspw. \Rechnungen\userA
\Rechnungen\userB
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.377
Punkte
234
Gibt es eine etablierte Lösung die von einigen genutzt wird?
Mobil scanne ich fast nie. Wenn, dann nutze ich "Scanner Pro" von Readdle, der per WebDAV die Dokumente auf das NAS schiebt. Gibt es die App für Android? Ich weiß es nicht. Da ist die Auswahl aber riesig.
Wenn man regelmäßig scannt (also möglichst alles papierlos machen möchte), sollte man über einen Dokumentenscanner nachdenken (zB. der Brother 1700w).

Welche Regel kann ich verwenden um Rechnungen die für mich und Rechnungen für meine Frau in eigenständige Ordner ablegen.
Für alles, wo Bedingungen greifen sollen, wäre eine Konfiguration über eine YAML-Regeldatei nötig. @Struppix ist da unser Fachmann, der auch einen Excel basierten Editor erstellt hat.
Einen Einstieg findest du HIER und HIER.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
883
Punkte für Reaktionen
184
Punkte
63
Und noch eine weitere Frage.
Welche Regel kann ich verwenden um Rechnungen die für mich und Rechnungen für meine Frau in eigenständige Ordner ablegen.
Bspw. \Rechnungen\userA
\Rechnungen\userB
Hallo und herzlich willkommen.
Sorry war unterwegs, daher etwas verspätet.

Nun es gibt wie immer mehrere Möglichkeiten.
Wenn Du es einfach magst dann könnte es zb. so aussehen:
YAML:
# synOCR_YAMLRULEFILE   # keep this line!


rule_1001:
    tagname: Rechnung_userA
    targetfolder: /volume1/<Dein Pfad>/Rechnungen/userA
    condition: all
    subrules:
    - searchstring: Rechnung
      searchtyp: contains
    - searchstring: userA
      searchtyp: contains


rule_1002:
    tagname: Rechnung_userB
    targetfolder: /volume1/<Dein Pfad>/Rechnungen/userA
    condition: all
    subrules:
    - searchstring: Rechnung
      searchtyp: contains
    - searchstring: userB
      searchtyp: contains


Soll es etwas umfangreicher sein dann zB. so:
YAML:
# synOCR_YAMLRULEFILE   # keep this line!


rule_1001:
    tagname: §tagname_RegEx_userA
    targetfolder: /volume1/<Dein Pfad>/Rechnungen/userA
    tagname_RegEx: (?i)(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase|Kundenbeleg|Verkauf|sale|Einkauf|purchasing|Kasse|cash desk|BON)
    condition: all
    subrules:
    - searchstring: (?i)(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase|Kundenbeleg|Verkauf|sale|Einkauf|purchasing|Kasse|cash desk|BON)
      searchtyp: contains
      isRegEx: true
    - searchstring: userA
      searchtyp: contains


rule_1002:
    tagname: §tagname_RegEx_userB
    targetfolder: /volume1/<Dein Pfad>/Rechnungen/userB
    tagname_RegEx: (?i)(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase|Kundenbeleg|Verkauf|sale|Einkauf|purchasing|Kasse|cash desk|BON)
    condition: all
    subrules:
    - searchstring: (?i)(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase|Kundenbeleg|Verkauf|sale|Einkauf|purchasing|Kasse|cash desk|BON)
      searchtyp: contains
      isRegEx: true
    - searchstring: userB
      searchtyp: contains


rule_1003:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(?>(([a-z0-9\-\p{L}]+?[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z0-9\-\p{L}]+?[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z0-9\-\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z0-9\-\p{L}]+)))\b\N*?\b(?=\W{1,}[a-z\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,2}[a-z0-9\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,2}[a-z\p{L}]+[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{1,3}\d{0,4}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}\d{0,4}[a-z\p{L}]{0,2}\b\R*\b[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z\p{L}]{0,2}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}\d{5}[\.\,\-\:\;\•\|\&\/*\!\ ]{0,3}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z\p{L}]+)
    condition: all
    subrules:
    - searchstring: (GmbH|mbH|GbR|\sAG\s|\sKG\s|OHG|e.K.|Meister(betrieb)*)
      searchtyp: is not
      isRegEx: true
    - searchstring: (?>(([a-z0-9\-\p{L}]+?[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z0-9\-\p{L}]+?[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z0-9\-\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z0-9\-\p{L}]+)))\b\N*?\b(?=\W{1,}[a-z\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,2}[a-z0-9\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,2}[a-z\p{L}]+[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{1,3}\d{0,4}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}\d{0,4}[a-z\p{L}]{0,2}\b\R*\b[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z\p{L}]{0,2}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}\d{5}[\.\,\-\:\;\•\|\&\/*\!\ ]{0,3}[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z\p{L}]*[\.\,\-\:\;\•\|\&\/*\!\(\)\ ]{0,3}[a-z\p{L}]+)
      searchtyp: contains
      isRegEx: true
      multilineregex: true


rule_1004:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(.+(GmbH|mbH|GbR|\sAG\s|\sKG\s|OHG|e.K.|Meister(betrieb)*))
    condition: all
    subrules:
    - searchstring: (GmbH|mbH|GbR|\sAG\s|\sKG\s|OHG|e.K.|Meister(betrieb)*)
      searchtyp: contains
      isRegEx: true


rule_1005:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)\b(?:[a-z\p{L}]+[\.\-\:\;\!\(\)\[\]\ ]+[a-z0-9\p{L}\!]+)([\.\-\:\;\!\(\)\[\]\ ]*[a-z0-9\p{L}]*[\.\-\:\;\!\(\)\[\]\ ]*[a-z0-9\p{L}]*)\b(?=.*\s\d{1,3}[\,\.]\d{2,4}[^\.](\p{Sc}|EUR){0,1})
    condition: all
    subrules:
    - searchstring: \b(?:[a-z\p{L}]+[\.\-\:\;\!\(\)\[\]\ ]+[a-z0-9\p{L}\!]+)([\.\-\:\;\!\(\)\[\]\ ]*[a-z0-9\p{L}]*[\.\-\:\;\!\(\)\[\]\ ]*[a-z0-9\p{L}]*)\b(?=.*\s\d{1,3}[\,\.]\d{2,4}[^\.](\p{Sc}|EUR){0,1})
      searchtyp: contains
      isRegEx: true


rule_1006:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(?=(Bezeichnung|Benennung|Designation|Beschreibung|Description|\bArtikel[^:]|Article[^:]\b))(.+?\R{1,3}?).+?(\W+\S*\s*\d{5,}?\s*)\K(?:[a-z\p{L}]+[\.\-\:\;\! ]*[a-z\p{L}\\\!]*[\.\-\:\;\! ]*[a-z0-9\p{L}]*[\.\-\:\;\! ]*[a-z0-9\p{L}]*)
    multilineregex: true
    condition: all
    subrules:
    - searchstring: \b(?:[a-z\p{L}]+[\.\-\:\;\!\(\)\[\]\ ]+[a-z0-9\p{L}\!]+)([\.\-\:\;\!\(\)\[\]\ ]*[a-z0-9\p{L}]*[\.\-\:\;\!\(\)\[\]\ ]*[a-z0-9\p{L}]*)\b(?=.*\s\d{1,3}[\,\.]\d{2,4}[^\.](\p{Sc}|EUR){0,1})
      searchtyp: does not contain
      isRegEx: true
    - searchstring: (?=(Bezeichnung|Benennung|Designation|Beschreibung|Description|\bArtikel[^:]|Article[^:]\b))(.+?\R{1,3}?).+?(\W+\S*\s*\d{5,}?\s*)\K(?:[a-z\p{L}]+[\.\-\:\;\! ]*[a-z\p{L}\\\!]*[\.\-\:\;\! ]*[a-z0-9\p{L}]*[\.\-\:\;\! ]*[a-z0-9\p{L}]*)
      searchtyp: contains
      isRegEx: true
      multilineregex: true


rule_1007:
    tagname: Rechnungsnummer_§tagname_RegEx
    tagname_RegEx: (?i)(?|(((Rechnung\S{0,2})|(Beleg\S{0,2})|(Lieferschein\S{0,2}))\s*(([N|n]um\S*|Nr[\.\-\:\;\/\|\s]{0,3})|(RE[\.\-\:\;\/\|\s]NR)\S*)*)\s+?\K(\S*\s*?(\s*\d)+))+\b
    condition: all
    subrules:
    - searchstring: (?|(((Rechnung\S{0,2})|(Beleg\S{0,2})|(Lieferschein\S{0,2}))\s*(([N|n]um\S*|Nr[\.\-\:\;\/\|\s]{0,3})|(RE[\.\-\:\;\/\|\s]NR)\S*)*)\s+?\K(\S*\s*?(\s*\d)+))+\b
      searchtyp: contains
      isRegEx: true


Ein Hinweis:
Beim Pfad sollte da eigentlich ein "/" stehen. Und ist das Verzeichnis nicht vorhanden, wird es erzeugt.

Falls Fragen oä. einfach melden.

Gruß Karsten
 
Zuletzt bearbeitet:


 

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