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

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Hallo erd,
das Verhalten ist manchmal recht komisch. Hierzu hatte ich im wiki einige Bemerkungen gemacht. Auch dazu wie man das Verhalten auf der Konsole mittels
Code:
grep -Pzio "file mit der RegEx.txt" "searchfile.txt"
einigermaßen nachstellen kann. Die gewählten Parameter sind -P = Perl -z = Multiline -i = casesensitive -o = nur matches anzeigen

Zum Thema Experte weit gefehlt. Ich beschäftige mich seit nunmehr 8 Wochen mit RegEx und hatte vorher keinerlei Berührungspunkte. Deswegen hoffe ich auch auf Nachsicht.

Ich schicke Dir noch eine Nachricht zum Upload, um das hier mal selbst testen zu können, und mir mal das Protokoll anzuschauen..

So hier der nächste Versuch:
Code:
rule_999:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)((?<=(Versichertennr\.[\:] X123 456 789))\n\r|\N*)(?:\N.+)(?=\n*(Guten Tag))
    multilineregex: true
    condition: all
    subrules:
    - searchstring: (?i)((?<=(Versichertennr\.[\:] X123 456 789))\n\r|\N*)(?:\N.+)(?=\n*(Guten Tag))
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false

Und es funktioniert bei mir. Leerzeilen vor und nach gesuchtem String sind egal. Allerdings nur einzeiliger "Betreff" möglich.

Gruß
Karsten
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Hallo Leute,

in diesem Regelblock habe ich mal versucht "Amazon Rechnungen" zu kategorisieren.
Sicherlich stellt sich die Frage, ob es den Aufwand lohnt. Jedoch entfällt so das lästige Umbenennen und Einsortieren.

Ein paar Hinweise:
- Leider wurde in den Jahren 2016-2018 das Layout mehrfach unterjährig geändert. Dadurch ist in diesen Jahren die eindeutige Zuordnung oft nicht möglich. Hier ist somit trotzdem manchmal Handarbeit nötig.
- Auch in den anderen Jahren kommt es ab und an zu Ausrutschern.
- Es funktionieren nur Rechnungen keine Lieferscheine, die teilweise in den früheren Jahren verschickt wurden. Hier sind zu wenige Informationen beinhaltet.
- Bitte beschränkt die Suche im Dokument auf die erste Seite, da es sonst zu Dopplungen der Ausgaben (Multiline) kommen kann.
Allerdings werden so nur die Artikel der ersten Seite erfasst, bei mehrseitigen Rechnungen ...
- Beachtet bitte, dass zur Verwendung die Beta zu installieren ist, da Multilineregex benötigt wird.


Zum Aufbau: Es werden nacheinander folgende Einträge abgefragt.
Block 1 - Hier wird der Käufer ermittelt
Block 2 - Hier wird der Verkäufer abgefragt
Block 3 - Anzahl / Menge
Block 4 - Artikel Bezeichnung
Block 5 - Bestellnummer

Ausgabe standardmäßig bsph.:
Datum_Rechnung Vorname Nachname Amazon Amazon EU S.à 2x AVM FRITZ Repeater 6000 Bestellnummer_304-3612345-0123456.pdf oder
Datum_Rechnung Vorname Nachname Amazon Novis GmbH 1x Tom Gates, Band 06 Bestellnummer_304-8312345-6123456.pdf

Die meisten Blöcke sind zudem nach Jahren aufgetrennt, um den verschiedenen Layouts gerecht zu werden.

Leider habe ich nicht genügend Rechnungen, um dies wirklich 100%ig abzuprüfen, und die Jahre 2017-2018 habe ich dann nicht weiter vertieft, da es letztlich bei mir in diesen Jahren nur eine Handvoll war, die nicht funktionieren. Die erste Rechnung die ich testen konnte war Ende 2013.

Die Erfassungsquote ist größer 95%, wobei
1,5% nicht erkannt werden (steht nicht Amazon auf der ersten Seite, beachtet meinen Hinweis oben) und bei
2,5% werden nicht alle Suchbegriffe eindeutig erkannt.

Wer es nutzen möchte viel Spaß damit, und gebt mal ein Feedback wie es bei Euch funktioniert.

Gruß Karsten


Hier nun die Regeln:
(Bitte nicht vergessen die Regelnummer entsprechend Eurer YAML umzubenennen, und das Speicherziel in Regel 970-972 einzutragen)

Code:
rule_970:
# Rechnung Amazon Teil 1.1 - Käufer
    tagname: Rechnung_§tagname_RegEx
    targetfolder: "/<path>/"
    tagname_RegEx: (?i)(Rechnungsadresse|Lieferadresse|Bestellt von).+\R\K(?:\w+\s\w+)
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout ab 2019
    - searchstring: \b(?<VAR_A>(20[1-9]{1}[9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-8]{1}))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_971:
# Rechnung Amazon Teil 1.2 - Käufer
    tagname: Rechnung_§tagname_RegEx
    targetfolder: "/<path>/"
    tagname_RegEx: (?i)(Rechnungsadresse|Lieferadresse|Bestellt von).+\R\K(?:\w+\s\w+)(?=((\r\n|\r|\n|.)+)(DE USt|USt-IDNr))
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout von 2017 bis 2018
    - searchstring: \b(?=(?<VAR_A>(20[1-9]{1}[9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(20[0-1]{1}[7-8]{1})))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_972:
# Rechnung Amazon Teil 1.3 - Käufer
    tagname: Rechnung_§tagname_RegEx
    targetfolder: "/<path>/"
    tagname_RegEx: (?i)(Rechnungsadresse|Lieferadresse|Bestellt von).+\R\K(?:\w+\s\w+)
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: www.amazon.de/contact-us
      searchtyp: is not
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout vor 2017
    - searchstring: \b(?=(?<VAR_A>(20[1-9]{1}[7-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-6]{1})))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_973:
# Rechnung Amazon Teil 2.1 - Verkäufer
    tagname: Amazon_§tagname_RegEx
    tagname_RegEx: (?i)(?:(\w+\s\w+)\s\1)\s\K(?:(\S+\s\S+\s\S+))
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout ab 2018
    - searchstring: \b(?<VAR_A>(20[1-9]{1}[8-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-8]{1}))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_974:
# Rechnung Amazon Teil 2.2 - Verkäufer
    tagname: Amazon
    tagname_RegEx:
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: www.amazon.de/contact-us
      searchtyp: is not
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout vor 2018
    - searchstring: \b(?=(?<VAR_A>(20[1-9]{1}[8-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-7]{1})))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_975:
# Rechnung Amazon Teil 3.1 - Menge Stück - Ab 2018
    tagname: §tagname_RegExx
    tagname_RegEx: (?i)(?:\d{1,2})(?=\s(\d{0,1}[\.])*\d{1,3}[\,]\d{2}\s.)
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout ab 2018
    - searchstring: \b(?<VAR_A>(20[1-9]{1}[8-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-8]{1}))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_976:
# Rechnung Amazon Teil 3.2 - Menge Stück - 2017
    tagname: §tagname_RegExx
    tagname_RegEx: (?i)((\(inkl\. USt\.\))*\n*(\(inkl\. USt\.\))(.*\n.*)\n)\K(?:\d{1,2})
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: www.amazon.de/contact-us
      searchtyp: is not
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout 2017
    - searchstring: \b(?=(?<VAR_A>(20[1-9]{1}[8-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(20[0-1]{1}[7]{1})))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_977:
# Rechnung Amazon Teil 3.3 - Menge Stück - Vor 2017
    tagname: §tagname_RegExx
    tagname_RegEx: (?i)((Menge|Anzahl).+)(\n.*){2}\n\K(\d{1,2})
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: www.amazon.de/contact-us
      searchtyp: is not
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout vor 2017
    - searchstring: \b(?=(?<VAR_A>(20[1-9]{1}[7-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-6]{1})))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_978:
# Rechnung Amazon Teil 4.1 - Artikel - Ab 2018
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)((Bezeichnung|Benennung|Designation|Beschreibung|Description|\bArtikel[^:]|Article[^:]\b).+\R?.+\R{1,3})\K(?<Artikel>([a-z0-9\p{L}\-\:\;\•\|\&\/\!]+[\-\:\;\•\|\&\/ ]*[a-z0-9\p{L}\-\:\;\•\|\&\/\!]+[\-\:\;\•\|\&\/ ]*[a-z0-9\p{L}\•\|\&\/\!]{2,}))(?=.*\R)
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout ab 2018
    - searchstring: \b(?<VAR_A>(20[1-9]{1}[8-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-7]{1}))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_979:
# Rechnung Amazon Teil 4.2 - Artikel - 2017
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)((\(inkl\. USt\.\))*\n*(\(inkl\. USt\.\))(\n))\K(?:([a-z0-9\p{L}]*[\.\,\-\:\;\•\|\&\/ \[\]]*[a-z0-9\p{L}]*[\.\,\-\:\;\•\|\&\/ \[\]]*[a-z0-9\p{L}]*[\.\,\-\:\;\•\|\&\/ \[\]]*)[a-z0-9\p{L}]*)
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: www.amazon.de/contact-us
      searchtyp: is not
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout 2017
    - searchstring: \b(?=(?<VAR_A>(20[1-9]{1}[8-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(20[0-1]{1}[7]{1})))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_980:
# Rechnung Amazon Teil 4.3 - Artikel - Vor 2017
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)((Bezeichnung|Benennung|Designation|Beschreibung|Description|\bArtikel[^:]|Article[^:]\b).+\R.+\R{1,3})\d{0,2}\s\K(?:((\s*\S+){4}))(?=.+EUR)
    multilineregex: true
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: www.amazon.de/contact-us
      searchtyp: is not
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
# Prüfung Jahr - Layout vor 2017
    - searchstring: \b(?=(?<VAR_A>(20[1-9]{1}[7-9]{1}|20[2-9]{1}[0-9]{1}|20[3-9]{1}[0-9]{1}))|(?<VAR_B>(19\d{2}|20[0-1]{1}[0-6]{1})))\b(?|(\g<VAR_B>))
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false

rule_981:
# Rechnung Amazon Teil 5 - Amazon Bestellnummer
    tagname: Bestellnummer_§tagname_RegEx
    tagname_RegEx: (?i)(?<=Bestellnummer|Bestellnr)[\:\.]*\s*\K(\d+[-]*)*
    condition: all
    subrules:
    - searchstring: amazon
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: \b(Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt)\b
      searchtyp: is
      isRegEx: true
      source: content
      casesensitive: false
 
  • Like
Reaktionen: adallmo und geimist

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Hallo Leute,

in diesem Regelblock geht es diesmal um "Online / Versand Rechnungen".
Ich habe eine Weile getüfftelt, um eine funktionierende Logik hinzubekommen. Die Layouts sind derart verschieden, dass ich versucht habe einen Kompromiss zu finden.


Ein paar wichtige Hinweise:
  • BITTE legt Euch für die "Amazon Rechungen" und die "Online / Versand Rechnungen" zwei neue / unterschiedliche Profile an. BITTE nicht in einem Profil benutzen, da es sonst zu unerwünschten Überschneidungen kommen kann.
  • Beachtet bitte auch hier, dass zur Verwendung die Beta zu installieren ist, da Multilineregex benötigt wird.
  • Bei der Adresssuche Regel 003/004 werden meist alle Adressen (bis auf 4 zeilige) gefunden.
  • Ich empfehle in diesem Profil unter OCR Optionen -f zu verwenden.
  • BITTE füllt unbedingt den / die Käufer in Regel 003/004 aus. Braucht Ihr mehr, diese Regeln einfach kopieren UND in jeder Regel den / die zusätzlichen Käufer in
    Code:
    (Vorname1 Nachname1|Vorname2 Nachname2|Vorname3 Nachname3)
    bzw.
    Code:
    (Vorname1\s*|Nachname1|Vorname2\s*|Nachname2|Vorname3\s*|Nachname3)
    ergänzen.


Zum Ausfüllen von Regel 003/004:
Bitte tragt den / die Nachnamen wie folgt ein
Code:
([^1]*(1([^2]|$)|12([^3]|$)|123([^4]|$)|1234([^5]|$)|12345([^6]|$)(123456([^L])|$)
Buchstabe 1 des Nachnamens usw.. "L" ist der letzte Buchstabe.
Braucht Ihr mehr Buchstaben dann immer diesen Block
Code:
|12345([^6]|$)
wieder hinzukopieren und entsprechend ändern.
Beispiel:
Code:
([^1]*(1([^2]|$)|12([^3]|$)|123([^4]|$)|1234([^5]|$)|12345([^6]|$)|123456([^7]|$)|1234567([^8]|$)(12345678([^L])|$)
Damit stellen wir sicher, das unser eigener Name bei der Suche ignoriert wird.


Die Erfassungsquote ist annähernd 100%, wobei der Käufername und zb. "Rechnung" enthalten sein muss.
Die Filenamen sind dann tw. etwas händisch zu korrigieren. Das ist allerdings das kleinere Übel.


Wer es nutzen möchte viel Spaß damit, und ein Feedback wäre schön.

Gruß Karsten


Hier nun die Regeln:
Code:
rule_001:
# Name Käufer => muss bekannt sein => Schreibweise "Vorname Nachname"
    tagname: Rechnung_§tagname_RegEx
    tagname_RegEx: (?i)\b(Vorname1 Nachname1|Vorname2 Nachname2)\b
    condition: all
    subrules:
    - searchstring: \b(Vorname1 Nachname1|Vorname2 Nachname2)\b
      searchtyp: is
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false

rule_002:
# Name Käufer => muss bekannt sein => Schreibweise "Vorname'neue Zeile'Nachname"
    tagname: Rechnung_§tagname_RegEx
    tagname_RegEx: (?i)\b(Vorname1 Nachname1|Vorname2 Nachname2)\b
    multilineregex: true
    condition: all
    subrules:
    - searchstring: \b(Vorname1 Nachname1|Vorname2 Nachname2)\b
      searchtyp: is not
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: \b(Vorname1\s*|Nachname1|Vorname2\s*|Nachname2)\b
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false

rule_003:
# Verkäufer mittels Adresse finden ==> Käufer 1
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(?=^([^1]*(1([^2]|$)|12([^3]|$)|123([^4]|$)|1234([^5]|$)|12345([^6]|$)(123456([^L])|$))?)*$)^(?>(^([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}]+)\b
    condition: all
    subrules:
    - searchstring: (GmbH|mbH|GbR|\sAG\s|\sKG\s|OHG|e.K.|Meister(betrieb)*)
      searchtyp: is not
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: \b(Vorname1\s*|Nachname1)\b
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: (?=^([^1]*(1([^2]|$)|12([^3]|$)|123([^4]|$)|1234([^5]|$)|12345([^6]|$)(123456([^L])|$))?)*$)^(?>(^([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}]+)\b
      searchtyp: is
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false

rule_004:
# Verkäufer mittels Adresse finden ==> Käufer 2
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(?=^([^1]*(1([^2]|$)|12([^3]|$)|123([^4]|$)|1234([^5]|$)|12345([^6]|$)|123456([^7]|$)|1234567([^8]|$)(12345678([^L])|$))?)*$)^(?>[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}]+)\b
    condition: all
    subrules:
    - searchstring: (GmbH|mbH|GbR|\sAG\s|\sKG\s|OHG|e.K.|Meister(betrieb)*)
      searchtyp: is not
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: \b(Vorname2\s*|Nachname2)\b
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: (?=^([^1]*(1([^2]|$)|12([^3]|$)|123([^4]|$)|1234([^5]|$)|12345([^6]|$)|123456([^7]|$)|1234567([^8]|$)(12345678([^L])|$))?)*$)^(?>[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}]+)\b
      searchtyp: is
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false

rule_005:
# Verkäufer mittels GmbH / GbR / AG etc. finden
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(.+?(GmbH|mbH|GbR|\sAG\s|\sKG\s|OHG|e.K.|Meister(betrieb)*))
    condition: all
    subrules:
    - searchstring: \b(Vorname1\s*|Nachname1|Vorname2\s*|Nachname2)\b
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: (GmbH|mbH|GbR|\sAG\s|\sKG\s|OHG|e.K.|Meister(betrieb)*)
      searchtyp: is
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false

rule_006:
# Artikel Name Variante 1
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)((?<=\N)(.{0,5}\w{0}\d{0,12}\s*))\b\K(?:[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(Vorname1\s*|Nachname1|Vorname2\s*|Nachname2)\b
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: ((?<=\N)(.{0,5}\w{0}\d{0,12}\s*))\b\K(?:[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: is
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false

rule_007:
# Artikel Name Variante 2 ==> fallback
    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: ((?<=\N)(.{0,5}\w{0}\d{0,12}\s*))\b\K(?:[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
      multilineregex: false
      source: content
      casesensitive: false
    - searchstring: \b(Vorname1\s*|Nachname1|Vorname2\s*|Nachname2)\b
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - 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: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false

rule_008:
# Rechnungsnummer
    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: \b(Vorname1\s*|Nachname1|Vorname2\s*|Nachname2)\b
      searchtyp: is
      isRegEx: true
      multilineregex: true
      source: content
      casesensitive: false
    - searchstring: (Rechnung|Invoice|Lieferschein|delivery note|Quittung|receipt|Bestellung|Auftrag|Online-Bestellung|Online-Auftrag|order|Barkauf|Barverkauf|cash purchase)
      searchtyp: contains
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
    - 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: is
      isRegEx: true
      multilineregex: false
      source: content
      casesensitive: false
 

Struppix

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

ich habe wieder mal dem wiki ein kleines Update verpasst. Ab sofort sind die Regeln gegenzeichnet, die überarbeitet worden sind. Für all diejenigen, die die Regeln verwenden, also bitte tauschen.

Gruß Karsten
 
  • Like
Reaktionen: Monacum

Struppix

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

ich habe die letzten Tage einen Exel YAML-Datei Konfigurator gebastelt. Hierbei handelt es sich noch um eine Testversion !

Da mein Exel gerade mal für den Hausgebrauch taugt und ich mich mit VBA noch nie beschäftigt habe, bitte ich um Nachsicht ;)

Derzeit habe ich das Problem, dass die Dateiausgabe nur auf 4 Regeln beschränkt ist, und ich weiß um's Verr..... nicht woran das liegen könnte.
Vielleicht könntet Ihr mir hier ein wenig helfen, wobei ich mich darüber riesig freuen würde. Zumal noch viele Dinge verbessert oder auch hinzu kommen könnten / sollten.

Gruß Karsten
 

Anhänge

  • synOCR_YAML_Konfigurator_Version_01_00_55_2023_04_23.zip
    232,8 KB · Aufrufe: 8
  • Like
Reaktionen: geimist

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
So, habe die Fehler dann doch noch selbst gefunden. Nun ist die Ausgabe vollständig und auch Leerzeilen zur besseren Übersichtlichkeit funktionieren jetzt auch. Ich versuche mich nun mal an einer Importfunktion. Wenn jemand unterstützen mag, wäre das toll.

Gruß Karsten
 

Anhänge

  • synOCR_YAML_Konfigurator_Version_01_00_58_2023_04_24.zip
    207,8 KB · Aufrufe: 5
  • Like
Reaktionen: geimist

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Hallo,
die neuste Version des Editors und einige Hinweise zur Nutzung findet Ihr in diesem Thread.

Gruß Karsten
 
  • Like
Reaktionen: Jesse69

driftkingisback

Benutzer
Mitglied seit
17. Sep 2020
Beiträge
122
Punkte für Reaktionen
4
Punkte
18
Hallo Struppix, find ich super das du so bemüht bist zu helfen und versuchst alles zu erklären. Ich hoffe du kannst mir weiterhelfen.
YAML Regeln habe ich über 100 Stück angelegt, bei den jährlichen Verträgen klappt das alles, wie z.B LVM KFZ dann wird das Datum geschrieben und direkt LVM KFZ BMW-E46 geschrieben. So weit so gut..

Wenn ich aber Rechnungen bekomme möchte ich gerne das die Firma oder was bestellt wurde im Text steht, wie kann ich das mit einer Regel lösen. Es geht mir nur um die Benennung, das verschieben macht Hazel.

Bekomme ich eine Rechnung, möchte ich diese einscannen und als Datei benannt werden:
2023-27-07#Rechnung#FIRMAXYZ#was bestellt wurde#
2023-27-07#Kassenzettel#FIRMAXYZ#was bestellt wurde#


(Kann auf die erste Seite begrenzt werden)
2023-27-07#Rechnung#Saturn#AppleAirpods#
2023-27-07#Rechnung#BMW-Kassel#Dichtung-Tür#
2023-27-07#Kassenzettel#Puma-Outlet#Schuhe

Kann man sowas realsieren?


Versicherungen Verträge wiederholt sich immer und die Regel benennt alles super

Über Hilfe würde ich mich freuen
 

Struppix

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

diesem Vorhaben habe ich mich vor geraumer Zeit schon gestellt. Und es hat sich als überaus schwierig erwiesen, da keine Rechnung der andern gleicht. Dennoch habe ich nach langem Probieren und Experimentieren eine Variante gefunden, die bei mir im "täglichen" Einsatz ist und ein wirklich hohe Trefferquote erreicht.
Du hättest übrigens einfach nur ein paar Beiträge hochscrollen müssen. Du kannst auch mit dem Link direkt dorthin.

Ich hoffe es ist das was Du suchst.
Die Benennung erfolgt dann derart:
2023_04_04_Rechnung_<Vorname>_<Nachname>_Biller_<Ort>_Quittung_Esstisch_Stuehle.pdf
2023_02_20_Rechnung_<Vorname>_<Nachname>_BoemAall_BV_BROTHER-HL-L2375DW_Laser.pdf
Die Benennungen (außer die persönlichen Infos) stammen direkt aus meiner Ablage.

Falls Du etwas anderes suchst oder Du eine leicht abgewandelte Variante brauchst einfach melden.

Im Übrigen gibt's dann noch etwas weiter zurück auch eine Amazon Variante die fast 100% matched.

Gruß Karsten
 
  • Like
Reaktionen: geimist

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Als Thema fällt mir da sofort dies ein:
1. Wie sieht eine RegEx Regel aus, die mir ein beliebiges Datum mit ausgeschriebenen Monat (1. Juli 2023) findet?
2. Und wie erstelle ich diese?
Hallo TJ,

hier eine mögliche Variante
Code:
(?=.)(?:(?:(?:[0-3]{0,1}[0-9]{1})[\.\,\-\:\;\•\|\/\\\*\ ]{1,3})(?:(?:(?:Jan|Febr)uar|M(?:.|ae)rz|April|Mai|Ju(?:n|l)i|August|(?:Okto|(?:Sept|Nov|Dez)em)ber)|(?:[\.\,\-\:\;\•\|\/\\\*\ ]{0,3}(?:[0-3]{0,1}[0-9]{0,1})))(?:[\.\,\-\:\;\•\|\/\\\*\ ]{1,3}(?:19|20)(?:[0-3]{1}[0-9]{1})))

die folgende Schreibweisen findet (Beispiele).
Code:
22.Januar 2023
01. März 1999
4/Mai/2000
27.01.2020
1.1.2023

Dabei sind folgende Trennzeichen berücksichtigt.
Code:
. , : ; • | / \ *

Gruß
Karsten

PS: Ich habe hier bei mir Probleme mit Umlauten, sodass wenn bei Dir das "ä" nicht gefunden oder ausgeben wird, einfach noch mal melden.
 

buntsche

Benutzer
Mitglied seit
22. Sep 2023
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,
habe mich gerade ein bisschen an RegEx ausprobiert, denn ich bekomme Vierteljährliche Briefe der Stadtwerke mit Preisanpassungen.
Ich würde gerne am Ende folgenden Dateinamen bekommen "Stadtwerke_Preisanpassung_Juli_2022"

mit unten stehenden Code habe ich es hinbekommen auf "Stadtwerke_Preisanpassung_Juli 2022" zu kommen.. jetzt stört mich aber total das Leerzeichen zwischen Monat und Jahreszahl :( kann ich das irgendwie wegbekommen?

Ist der Code noch verbesserungswürdig? (Als Einsteiger war mir jetzt erstmal wichtig: Er funktioniert! - aufgrund des vorangegangenen Post kann ich noch die unterschiedlicheren Schreibweisen einbauen...)
Kann man eigentlich den Monat auch ersetzen durch Zahlen? also für Juli z.B. dann 07.


Code:
rule_101:
    tagname: Stadtwerke_Preisanpassung
    targetfolder: /Stadtwerke_Preisanpassungen
    condition: all
    subrules:
    - searchstring: Stadtwerke
    - searchstring: Preisanpassung
rule_801:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)(?:[\.\,\-\:\;\•\|\/\\\*\ ]{0,3})(?:(19|20)([0-9]{2}))
    condition: all
    subrules:
    - searchstring: Preisanpassung.zum.(?:([0-3]{0,1}[0-9]{0,1}))(?:[\.\,\-\:\;\•\|\/\\\*\ ]{0,3})(?:Januar|Februar|M.rz|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)(?:[\.\,\-\:\;\•\|\/\\\*\ ]{0,3})(?:(19|20)([0-9]{2}))
      searchtyp: contains
      isRegEx: true
      source: content
      casesensitive: false

Viele Grüße
Stefan
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Hallo zusammen,
habe mich gerade ein bisschen an RegEx ausprobiert, denn ich bekomme Vierteljährliche Briefe der Stadtwerke mit Preisanpassungen.
Ich würde gerne am Ende folgenden Dateinamen bekommen "Stadtwerke_Preisanpassung_Juli_2022"
Das ist doch toll. Immer wieder schön wenn etwas klappt, bei mir zumindest. Quäle mich derzeit mit einem Sch... rum und finde keine wirklich funktionierende Lösung.
mit unten stehenden Code habe ich es hinbekommen auf "Stadtwerke_Preisanpassung_Juli 2022" zu kommen.. jetzt stört mich aber total das Leerzeichen zwischen Monat und Jahreszahl :( kann ich das irgendwie wegbekommen?
Ist das Leerzeichen denn im Originaldokument zwischen Monat und Jahr? Dann ist das logisch, weil Du ja das in einer Regel definiert hast.
Es gibt jetzt zwei Möglichkeiten:
1. Trenne die Regel in Monat und Jahr
2. Benutze meine Methode zum Ersetzen der Leerzeichen, hier im YT Channel Video 7 denke ich. Hier der Link zum Befehl.
Ist der Code noch verbesserungswürdig? (Als Einsteiger war mir jetzt erstmal wichtig: Er funktioniert! - aufgrund des vorangegangenen Post kann ich noch die unterschiedlicheren Schreibweisen einbauen...)
Kann man eigentlich den Monat auch ersetzen durch Zahlen? also für Juli z.B. dann 07.
Auch das ist möglich, aber nicht innerhalb unser RegEx. Das müsste man dann ähnlich dem Ersetzen der Leerzeichen machen, aber machbar.

Gruß
Karsten
 

buntsche

Benutzer
Mitglied seit
22. Sep 2023
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Ja wenn man sich in etwas rein vertieft und am Ende klappt es ist immer schön zu sehen :) und dann kommt der Perfektionist und sagt das geht aber noch besser :D
Ja im Orginaldokument ist ein Leerzeichen dazwischen.
Zum Tipp 1: Wie meinst du das genau? muss ich 2 Rules machen, jeweils eine für Monat und Jahr oder kann ich in einer Rule mehrere tagname_RegEx definieren? also tagname_RegEx1 und tagname_RegEx2? und die dann wieder zusammensetzen?
Zu Tipp 2: das werde ich mir mal anschauen. Da hatte ich auch für die Datums Suche schon abgeguckt. :)
 
Zuletzt bearbeitet von einem Moderator:

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Hi Stefan,
ja Du müsstest jew. eine Regel für Monat und eine für Jahr machen. Du findest aber die fertigen Beispiele im Wiki, aber die hast Du ja schon gefunden.
Also genauso wie Du es beschreibst.

Gruß
Karsten
 
  • Like
Reaktionen: buntsche

Chr!s

Benutzer
Mitglied seit
22. Dez 2021
Beiträge
46
Punkte für Reaktionen
25
Punkte
68
meine Begeisterung nimmt weiter zu, hab erst heute den thread entdeckt und von dem Editor erfahren. Muss mich da aber noch näher damit befassen. Da ich den Editor noch nicht zum laufen gebracht habe eine Frage... kann es sein dass der auf einem Mac nicht funktioniert? gibt es dazu evtl. Erfahrungen? Erhalte aktuell folgende Fehlermeldung:

Code:
Microsoft Visual Basic

Kompilierungsfehler in verborgenem Modul: "Modul18".
Dieser Fehler tritt häufig auf, wenn Code nicht mit der Version, Plattform
oder Architektur dieser Anwendung kompatibel ist.

Hoffe das Problem lässt sich auch klären denn so ein Editor ist echt ne riesige Hilfe.
 

Chr!s

Benutzer
Mitglied seit
22. Dez 2021
Beiträge
46
Punkte für Reaktionen
25
Punkte
68
@Struppix glaube hier ist der passendere Thread zum Thema YAML Datei..
hattest mich ja hier gefragt ob es zu meinem Fall eine Regel sein muss, dem ist nicht so ich habe mich zwischenzeitig hier im Thread nochmal belesen und meine Regel erstmal versuchsweise so umgeschrieben:
Code:
rule_100:
    tagname: KINDERGARTEN Rechnung Mittagessen
    targetfolder: /Städte/KINDERGARTEN/
    condition: all
    subrules:
    - searchstring: (?i)(Mittagsessen|Mittagessen)
      searchtyp: contains
      isRegEx: true
    - searchstring: Stadt
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
rule_101:
    tagname: Hans
    condition: all
    subrules:
    - searchstring: (?i)(Hans)
      searchtyp: is
      isRegEx: true

rule_102:
    tagname: Franz
    condition: all
    subrules:
    - searchstring: (?i)(Franz)
      searchtyp: is
      isRegEx: true

Würdest du die Regel ähnlich aufbauen? Anhand dem Post von @adallmo glaube ich die Logik mit der Gruppierung besser verstanden zu haben.



- rule 600/6001 machen die Ablage in den jeweiligen Namensordner und setzen einen tag mit dem "Vornamen Namen", sobald eines der Begriffe "Befund", "Labor" und "Vorsorge" gefunden wird?
- rule 602/603/604 setzen nur noch einen zusätzlichen tag mit dem jeweiligen Begriff?
Würde es in meinem Beispiel bedeuten dass rule_100 bis rule_102 eine Gruppe bilden wobei rule_100 die Kategorie vorgibt u.a. da ja auch der Speicherpfad angegeben ist. Wo endet dann der Nummernkreis? Bei der nächsten Regel die wieder einen Speicherpfad vorgibt.
also z.B. wenn ich folgende Regel anlegen würde:

Code:
rule_110:
    tagname: SCHULE Rechnung Mittagessen
    targetfolder: /Städte/SCHULE/
    condition: all
    subrules:
    - searchstring: (?i)(Mittagsessen|Mittagessen)
      searchtyp: contains
      isRegEx: true
    - searchstring: Stadt
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
rule_111:
    tagname: Hanni
    condition: all
    subrules:
    - searchstring: (?i)(Hanni)
      searchtyp: is
      isRegEx: true

rule_112:
    tagname: Nanni
    condition: all
    subrules:
    - searchstring: (?i)(Nanni)
      searchtyp: is
      isRegEx: true

somit hätte ich dann noch eine Reserve für weitere Tags von rule_103 bis rule_109?

Hoffe ich konnte meine Frage verständlich und nachvollziebar formulieren
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Guten Morgen Chris,
meine Begeisterung nimmt weiter zu, hab erst heute den thread entdeckt und von dem Editor erfahren. Muss mich da aber noch näher damit befassen. Da ich den Editor noch nicht zum laufen gebracht habe eine Frage... kann es sein dass der auf einem Mac nicht funktioniert? gibt es dazu evtl. Erfahrungen? Erhalte aktuell folgende Fehlermeldung:

Hoffe das Problem lässt sich auch klären denn so ein Editor ist echt ne riesige Hilfe.
ja, derzeit funktioniert der Editor nur auf Windows Systemen. Ich hatte vor langer Zeit mal den Versuch gewagt, den Editor zweigleisig für MAC und Windows umzubauen, und hatte auch schon einige Fortschritte. Da ich aber leider keinen MAC habe, war / bin ich hier auf Unterstützung beim Testen usw. angewiesen. Mangels "Freiwilliger" habe ich das Projekt allerdings verworfen. Wollte mir nicht noch nur deshalb einen MAC anschaffen.
Hinzu kommt:
- Inzwischen ist der Editor im Funktionsumfang deutlich gewachsen, und ich habe einige sehr spezielle, nennen wir es mal Routinen und Bibliotheken verwendet, die vermutlich nicht auf dem MAC laufen würden. Man kann die natürlich tw. ersetzen, aber ob dann zB. der neue Konfigurator so laufen würde, kann ich derzeit nicht abschätzen. Auf jeden Fall wäre das schon ein Stück Arbeit.
- Laut Statistik der Zugriffe sind nur etwa 15% aller Nutzer derzeit MAC-User.

Modul 18 ist übrigens das Update "Paket". Wenn ich nach ein paar Wochen mal nicht dran war, bin ich immer wieder erstaunt wie kompliziert das geworden ist.
Ich würde mich immer noch freuen, wenn jemand Interesse dafür hat, mich hierbei zu unterstützen.
Das Ziel, welches wir vor Augen haben, ist eine neutrale web Umsetzung, welche wir dann Plattform unabhängig direkt in synOCR einbinden könnten. Allerdings fehlt mir hierzu derzeit die Zeit und das Knowhow.

Also wenn jemand Zeit und Interesse hat so etwas zu konzipieren / zu realisieren, meldet Euch bitte.


@Struppix glaube hier ist der passendere Thread zum Thema YAML Datei..
hattest mich ja hier gefragt ob es zu meinem Fall eine Regel sein muss, dem ist nicht so ich habe mich zwischenzeitig hier im Thread nochmal belesen und meine Regel erstmal versuchsweise so umgeschrieben:

Würdest du die Regel ähnlich aufbauen? Anhand dem Post von @adallmo glaube ich die Logik mit der Gruppierung besser verstanden zu haben.

Würde es in meinem Beispiel bedeuten dass rule_100 bis rule_102 eine Gruppe bilden wobei rule_100 die Kategorie vorgibt u.a. da ja auch der Speicherpfad angegeben ist. Wo endet dann der Nummernkreis? Bei der nächsten Regel die wieder einen Speicherpfad vorgibt.
also z.B. wenn ich folgende Regel anlegen würde:

somit hätte ich dann noch eine Reserve für weitere Tags von rule_103 bis rule_109?

Hoffe ich konnte meine Frage verständlich und nachvollziebar formulieren
Aus meiner Sicht gibt es im Grundsatz nur 2 Wege die YAML Datei aufzubauen, so wie ich es im wiki auch beschreibe (im Absatz Kategorien, Hauptkategorie usw.)
Das wäre, der Blockaufbau mit allgemeinen Regeln, welche später zusammengesetzt eine fertige Umbenennung und Kategorisierung ergeben.
Und der Aufbau mit vielen kompletten einzelnen Regeln (oder auch Blöcken) die einfach aufeinander folgen.

Beides hat Vor- und Nachteile.
Meine Haupt-YAML ist von 0001 bis 1000, welche ich so unterteile, also 1-100,101-201 usw. Darin unterteile ich erneut in 10er,20er oä um freie Nummern für weitere Regeln zu haben.

Wichtig: Für alle die den Editor nutzen oder nutzen wollen ist das irrelevant. Da der Editor selbst nummeriert, und neue Regeln einfach zischen rein geschoben werden können. Die Philosophie ist aber die selbe.

Wenn Du möchtest schicke ich Dir mal einen Auszug aus meiner aktiven YAML. Ich müßte dort natürlich einiges entfernen, wie zB. Kunden- Kontonummern oä.

Konkret auf Deine Fragen:
- Ja würde ich so machen
- Der Speicherpfad ist nicht zwingend das "Trennzeichen" der Kategorie, und wird bei mir oft erst in einer Unterkategorie gesetzt. Das ist aber abhängig von Eurer Ordner- bzw. Ablagestruktur.

Beispiel:
Hauptkategorie - Bank
1. Unterkategorie - Deutsche Bank, Sparda, Hypo ...
2. Unterkategorie - Kontoauszüge, Info, FA .... => hier setze ich meinen Speicherpfad
3. Unterkategorie - Auszugsnummer
4. Unterkategorie - Kontonummer
usw.
Dadurch kann ich flexibel die "Bausteine" zusammensetzen, und habe im Handumdrehen eine neue Bank hinzugefügt.


Ich hoffe das war verständlich

Gruß
Karsten
 

Chr!s

Benutzer
Mitglied seit
22. Dez 2021
Beiträge
46
Punkte für Reaktionen
25
Punkte
68
Hi Karsten, danke dass du dir die Mühe machst so ausführlich zu helfen.
Ich habe mir letzte Nacht auch deine Videos zum Editor angeschaut, die waren auch sehr hilfreich und erklären das alles sehr gut.
Der Editor ist wohl das fehlende Modul. Ich bin gerade dabei meinen Thinclient mit Windows zu reaktivieren, darauf sollte Excel laufen mit Zugriff über Remotedesktop.

Ich hoffe es finden sich die nötigen Unterstützer für eine neutrale Webversion. Gerne würde ich Euch unterstützen sofern ich kann. Ich habe leider keine Programmierkenntnisse und wüsste nicht wie ich sonst unterstützen kann falls Ihr Ideen hab einfach mal melden.

Gruß Chris
 


 

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