synOCR synOCR - Aufbau einer YAML Datei - Verwendung Regulärer Ausdrücke

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Hallo Henning,

willkommen in unserem Forum. Sorry, dass ich so spät antworte. Aber ich bin länger auf Arbeit als zuhause, und das schon eine langer Zeit.

Leider kann ich hier im Forum nicht mehr editieren, sodass die Beiträge oft nicht auf dem neuesten Stand sind.
Wenn das mal ein Admin ließt, wäre toll, wenn man das einrichten könnte.

Nun das mit dem Multiline funktioniert schon, nur nicht mit der RegEx zur und dem Ausschluss der eigenen Adresse. Wohlgemerkt für alle Leser, nur auf der Synology nicht.

Aber mit einem kleinen Kniff kann man das umgehen und letztlich doch zum Ziel kommen..

Bitte nicht vergessen die YAML umzubenennen, Deinen Targetfolder und Deine Namen einzutragen / zu ändern.
Bitte poste mal ob es klappt, und wie hoch die Trefferquote ist:
Falls Fragen sind oder Du Probleme hast einfach melden.

Karsten

YAML:
# synOCR_YAMLRULEFILE   # keep this line!


rule_1001:
    tagname: §tagname_RegEx_Vorname1_Nachname
    targetfolder: /volume1/save/dokumente/Eigene Dateien/Rechnungen
    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)
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed -e 's/ /_/g')"
    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: Vorname1
      searchtyp: contains


rule_1002:
    tagname: §tagname_RegEx_Vorname2_Nachname
    targetfolder: /volume1/save/dokumente/Eigene Dateien/Rechnungen
    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)
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed -e 's/ /_/g')"
    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: Vorname2
      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
    - searchstring: Vorname1
      searchtyp: is not
    - searchstring: Vorname2
      searchtyp: is not
     


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
 
  • Like
Reaktionen: Henning81
Hallo Karsten,

vielen Dank! Auch für Deine, wie ich finde, schnelle Antwort!
Das Ergebnis ist gemischt:
1748468758633.png
Manche Firmen erkennt er. Andere nicht, weil z.B. das kg als KG interpretiert wird. Das eine ist eine MediaMarkt Rechnung. Da hat er fast keine Chance:
1748468866339.png
und die Einstellungen könnten für eine bessere Lesbarkeit dann so sein:
1748468953536.png
Richtig?

Viele Grüße,
Henning
 
  • Like
Reaktionen: Struppix
Guten Morgen Henning,

danke für Dein Feedback.
Zu den Einstellungen, als Trennzeichen nutze ich einen Unterstrich, da der Bindestrich in den meisten Programmen als Trennzeichen interpretiert wird. Bei Selektion, dem direkten Wählen usw. ist der Bindestrich hinderlich, wie ich finde. Grundsätzlich vermeide ich Leerzeichen. Aber das ist nicht zwingend, nur meine Auffassung.

1748494523045.png

Außerdem empfehle ich die Leerzeichen bereinigte Suche einzuschalten. Die Leerzeichen werden nur in der Suche reduziert, nicht im Ergebnis / der Ausgabe.

Mal vorweg, das mit dem kg ist mir noch gar nicht aufgefallen. Habe ich wohl übersehen bzw. hatte noch kein passendes Beispiel. Würde mich freuen, wenn Du mir mal das / die Beispiele hochladen könntest (meine Signatur). Werden natürlich vertraulich behandelt und danach gelöscht.

Zur eigentlichen Funktionsweise und den Ergebnissen.
Leider sind wir auf der SYN und synOCR bei der Ausführung einer RegEx auf eine Kommandozeile beschränkt. Weiterhin kann ich nur das finden und verwenden, was im Dokument steht. Die verschiedenen KI's bieten da sicher mehr und ein Liste mit möglichen alias, also Ersetzungen ist mir auch schon durch den Kopf gegangen. Aber der Aufwand ist zu groß und mir fehlen auch die Beispiele.

Wichtig für uns ist und bleibt: synOCR arbeitet NUR auf der Synology ohne jegliche Cloud oder ähnlichen Schnickschnack. Die Dokumente und deren Inhalt sind immer zugänglich und verbleiben bei uns.

Mit Regel 1003 suchen wir den Verkäufer mittels der Absender Adresse. Diese Regel ist schon besonders und zugleich sehr fragil. Ich habe versucht, musste ich ja, mit einer Kommandozeile möglichst viele Fälle abzudecken, und habe mich entschieden, max. 4 Wörter, des Absendernamens bzw. die erste Zeile dessen Adresse als Ergebnis zu verwenden. Dabei habe ich mir eine Adressen Datei mit mehr als 100 Adressen in allen nur erdenklichen Schreibweisen zusammen gestellt.
Da gibt es unendlich viele. Und ja, der MM in seinen unzähligen Adressvarianten ist einer der Problemfälle.

Es freut mich wenn es funktioniert, wenn auch wie mir bewusst ist nicht perfekt. Um das teilweise nachträgliche Umbenennen kommt man nicht drumherum.

Ich würde das Ergebnis sicherlich noch etwas verfeinern, aber dazu fehlen mir schlicht die Beispiele. Und so viel gibt mein Konto dann doch nicht her.

Deshalb die Bitte: Schickt mir Beispiele, gerne die die nicht funktionieren, denn dann habe ich die Möglichkeit zu testen.

So jetzt schönen Feiertag.
Gruß Karsten
 
  • Like
Reaktionen: Henning81
Hallo Karsten,

Vielen Dank für Deine ausführlichen Erläuterung.

Ich habe mal meine Beispiele und das Log dazu hochgeladen.

Viele Grüße und einen schönen Feiertag,
Henning
 
  • Like
Reaktionen: Struppix

Additional post fields

 

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