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

wegomyway

Benutzer
Mitglied seit
03. Aug 2022
Beiträge
387
Punkte für Reaktionen
172
Punkte
99
Nachdem im synOCR-Thread bezüglich der "Leerzeichen" in der GUI von synOCR ich den "Erfolg" erzielte den ich benötigte, geht es weiter:
Mein Test-Doku wurde dort abgelegt wo es rein sollte.
Aber :) etwas komisch, vielleicht aber normal, wurde die Begriffe "Auto" und "Vxxxxxxxxl" "gefunden und sind im Namen des abgelegten Dokus mit dabei und dazu der Begriff um den es geht.
Kann man in der YAML-Datei Suchbegriffe aussperren/ausschließen/umgehen etc. lassen sodass diese NICHT im Namen des Dokus erscheinen ?
Ich habe natürlich die beiden Begriffe für andere Zielordner als Regel erstellt.
 

Struppix

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

machen kann man so ziemlich alles. Nur kann ich Dir gerade gedanklich nicht mehr folgen.
Was möchtest Du genau ?

Karsten

 

guidovg

Benutzer
Mitglied seit
26. Nov 2011
Beiträge
129
Punkte für Reaktionen
39
Punkte
34
Hallo,

natürlich geht dies. Hierzu einfach mal in unseren Youtube Kanal schauen.

Gruß Karsten
Hallo,

also erstmal vielen Dank. Das hat mit der Textzeile

YAML:
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/ /_/g')"

wunderbar funktioniert. Gäbe es auch die Möglichkeit aus Leerzeichen (1 oder mehr) jeweils nur ein Unterstrich zu machen? Wenn nicht, werde ich lieber alle Leerzeichen komplett entfernen.

YAML:
    postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/ //g')"

Da die 'mv' Variante ja doch ein großes Risiko darstellt, wäre es toll, wenn dies vielleicht in Zukunft als Option in SynOCR per GUI oder YAML-Datei möglich wäre.

Kann man eig. Python-Elemente im YAML-Skript nutzen? Das war bei Organize ganz schön. Z.B.:

YAML:
      - filecontent: (?P<wwkcode>\d{2}\s*\d{3}\s*\d{3})
      - python: |
          resulttext = filecontent.wwkcode
          return {"texting": resulttext.replace(" ", "")}


Na ja, auf jeden Fall Dank der tollen Arbeit von Struppix und Geimist kann ich mich jetzt schon von Organize als Docker-Modul trennen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Struppix

guidovg

Benutzer
Mitglied seit
26. Nov 2011
Beiträge
129
Punkte für Reaktionen
39
Punkte
34
Ich habe nun den für mich korrekten SED Befehl gefunden.

YAML:
postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/ \{1,\}/_/g')"

Nun werden ein oder mehr Leerzeichen durch einen Unterstrich ersetzt.
 

Struppix

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

willkommen zurück. Ich musste jetzt echt mal aufs Datum schauen, wie lange das schon her ist ....

Gäbe es auch die Möglichkeit aus Leerzeichen (1 oder mehr) jeweils nur ein Unterstrich zu machen?
Teste doch bitte erst einmal, was der Schalter im GUI "Leerzeichen bereinigte Suche" mit "Leerzeichen bereinigen" bringt. Das sollte eigentlich genau das bewirken.

Ansonsten der Befehl
Code:
postscript: mv "${output}" "${output%/*}/$(echo "${output##*/}" | sed 's/ \+/_/g')"

Das mit python habe ich noch nie genutzt oder getestet.

Dankeschön ... dann ändere mal Deine Signatur. :giggle:
Karsten

Edit: Deine Schreibweise geht natürlich auch (y)
 
  • Like
Reaktionen: guidovg

guidovg

Benutzer
Mitglied seit
26. Nov 2011
Beiträge
129
Punkte für Reaktionen
39
Punkte
34
Teste doch bitte erst einmal, was der Schalter im GUI "Leerzeichen bereinigte Suche" mit "Leerzeichen bereinigen" bringt. Das sollte eigentlich genau das bewirken.

Greift das auch auf den Dateinamen? Dann habe ich den Hilfetext aber falsch interpretiert. Ich bin davon ausgegangen, dass das nur den Dateiinhalt betrifft.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Gute Frage muss ich gerade passen, bin gerade brav arbeiten und kann mich nicht erinnern.
Wenn man aber etwas per RegEx sucht, muss ja die Suche mit dem Ergebnis matchen, was man dann ja per Ausgabe im Dateinamen verwenden kann. :unsure:
 

wegomyway

Benutzer
Mitglied seit
03. Aug 2022
Beiträge
387
Punkte für Reaktionen
172
Punkte
99
Hallo wegomyway,

machen kann man so ziemlich alles. Nur kann ich Dir gerade gedanklich nicht mehr folgen.
Was möchtest Du genau ?

Karsten

Hab nun erstmal rules ordentlich erstellt (aktuell im oberen 2stelligen Bereich).
Um das, mein, Thema aufzugreifen :
Eine rule mit "xxxxxxxxxx" besteht. Den Begriff gibt es leider auch auf anderen Dokumenten.
Kann eine/mehrere subrule dafür sorgen das wenn "xxxxxxxxxx" gefunden wird dann zusätzlich "yyyy" und "zzzz" suchen. Werden die drei in Kombi im Doku gefunden, soll das Doku im angelegten Zielverzeichnis abgelegt werden.
Mein Ziel wäre das ich ein Doku nach einem Begriff suchen lassen und wenn folgende weitere Begriffe ebenso gefunden werden, dann halt ablegen.
Also eine rule in Verbindung mit subrules um besser zu sortieren.

Ich vergleich mal mit der "wenn-Funktion" in Verbindung mit "oder" und/oder "oder" in Excel. Mit der kann man gnadenlos verschachtelt, ausschließen oder zulassen usw...

Als Rand-Info : meine am Book bearbeitete/gesicherte YAML-Datei wird ebenso wie die txt-Datei gleichzeitig über Synology Drive hochgeladen und die beiden "älteren" werden überschrieben. Dazu mein tägliches Backup auf externe SSD und da sollte ich nicht so schlecht in sachen Sicherung dastehen.
 
Zuletzt bearbeitet:

Struppix

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

genauso wie Du es ja selber schreibst ist es.
Mit Hilfe der subrules wird quasi eine "und / oder" Prüfung durchgeführt, wobei die Negation auch funktioniert.

Somit hast Du schon alles, was es braucht...

Karsten
 
  • Like
Reaktionen: wegomyway

wegomyway

Benutzer
Mitglied seit
03. Aug 2022
Beiträge
387
Punkte für Reaktionen
172
Punkte
99
sodele, ich werd mich da durchackern, koste was es wolle ;) auch ne Kiste 🍺oder zwei Kisten 🍻
Mal schauen:
Habe in Zeile 79 eine Rule erstellt. Diese nach speichern/Hochladen usw. mit entsprechendem Doku erfolgreich getestet.
Darunter dann nacheinander insgesamt 4 Subrules mit Begriffen die in dem Doku vorkommen.
Das die Subrules zum Rule "gehören" konnte ich sehen wo ich die Rule in Zeile 79 deaktiviert habe und angezeigt wurde das die Subs bis Zeile 83 ebenfalls deaktiviert sind. Aktivieren brachte eben die gleiche Meldung andersrum. Wieder gespeichert/hochgeladen.
Nun entsprechendes Doku eingescannt. Ergebnis : Der "Rule-Begriff" wird aus Zeile 79 wird im abgelegten Zielordner im Doku-Dateinamen mit vorangestelltem # angezeigt, die Subrules-Begriffe nicht. Normal, weil der Rule-Begriff gefunden wurde ? Mein 2tes fast identische Doku, Unterschied nur im Datum, mit gleichem Ergebnis.
Mach ich was verkehrt ?
Weitere Frage: Hat synOCR bei Suchbegriffen mit äÄ, öÖ und üÜ Probleme ?
Ich habe Münzhandelsgesellschaft als Subrule eingetragen und "Vollmacht" landete mit im Dateinamen. Habe einen anderen Begriff gewählt und schon war "Vollmacht" nicht mehr im Dateinamen.
 

wegomyway

Benutzer
Mitglied seit
03. Aug 2022
Beiträge
387
Punkte für Reaktionen
172
Punkte
99
Nochmals den YT-Kanal durchforstet. Was gefunden was mir weiterhelfen wird. Probiere ich heute Abend aus.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
856
Punkte für Reaktionen
160
Punkte
63
Hallo wegomyway,
Mach ich was verkehrt ?
ich denke nicht, und ich dachte anhand Deines letzten Post, es wäre klar.
Dann muss ich etwas weiter ausholen.

Mein Ziel wäre das ich ein Doku nach einem Begriff suchen lassen und wenn folgende weitere Begriffe ebenso gefunden werden, dann halt ablegen.
Also eine rule in Verbindung mit subrules um besser zu sortieren.
Also, die Umbenennung des durchsuchten Dokumentes erfolgt NUR in der Hauptregel mittels 'tagname:'.

Die zusätzlichen subrules (wichtig, die erste subrule gehört zur Hauptregel) dienen nur zur, nennen wir es mal "der Verfeinerung, dem Eindeutig Machen" der Suche und sind optional. Dabei spielt der Parameter 'condition:' eine entscheidende Rolle.
Ein Beispiel:
Code:
rule_1007:
    tagname: Bundesagentur_f_Arbeit_Familienkasse
    condition: all
    subrules:
    - searchstring: Familienkasse
Dies ist mindestens anzugeben, damit die Regel vollständig beschrieben ist


Ein weiteres Beispiel:
Code:
rule_1008:
    tagname: Anwalt
    condition: any
    subrules:
    - searchstring: Anwalt
      searchtyp: contains
    - searchstring: Rechtsanwalt
      searchtyp: contains
    - searchstring: Anwältin
      searchtyp: contains
    - searchstring: Rechtsanwältin
      searchtyp: contains
Hier wird die Hauptregel erst angewendet, wenn mindestens eine subregel erfüllt wird, da 'condition: any'. Wird keine subregel erfüllt, wird die Hauptregel quasi "übersprungen".


Es gibt nun 2 Möglichkeiten, wenn Du "xxxx" "yyyy" "zzzz" im Dateinamen haben möchtest.

1) Wenn die Suchbegriffe "xxxx" "yyyy" "zzzz" immer die gleichen sind dann:
Code:
rule_1008:
    tagname: xxxx yyyy zzzz
    condition: all
    subrules:
    - searchstring: xxxx
      searchtyp: contains
    - searchstring: yyyy
      searchtyp: contains
    - searchstring: zzzz
      searchtyp: contains

2) Wenn die Suchbegriffe nicht immer gleich sind und zB über eine RegEx gesucht werden, dann musst Du mehrere Regeln verwenden. Die Umbenennung erfolgt dann in der Reihenfolge der der Regeln.
Code:
rule_1004:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(xxxx hier zb Beispiel der variable Suchtext)
    condition: all
    subrules:
    - searchstring: (?i)(xxxx hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true
    - searchstring: (?i)(yyyy hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true
    - searchstring: (?i)(zzzz hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true

rule_1005:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(yyyy hier zb Beispiel der variable Suchtext)
    condition: all
    subrules:
    - searchstring: (?i)(yyyy hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true
    - searchstring: (?i)(xxxx hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true
    - searchstring: (?i)(zzzz hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true

rule_1006:
    tagname: §tagname_RegEx
    tagname_RegEx: (?i)(zzzz hier zb Beispiel der variable Suchtext)
    condition: all
    subrules:
    - searchstring: (?i)(zzzz hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true
    - searchstring: (?i)(xxxx hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true
    - searchstring: (?i)(yyyy hier zb Beispiel der variable Suchtext)
      searchtyp: contains
      isRegEx: true

Zugegeben, dass sind abstrakte Beispiele. Wie ich schon mal sagte, lade mir ein Beispiel hoch, dann bin ich behilflich.


Gruß Karsten
 

wegomyway

Benutzer
Mitglied seit
03. Aug 2022
Beiträge
387
Punkte für Reaktionen
172
Punkte
99
... Es gibt nun 2 Möglichkeiten, wenn Du "xxxx" "yyyy" "zzzz" im Dateinamen haben möchtest.

1) Wenn die Suchbegriffe "xxxx" "yyyy" "zzzz" immer die gleichen sind dann:
Code:
rule_1008:
    tagname: xxxx yyyy zzzz
    condition: all
    subrules:
    - searchstring: xxxx
      searchtyp: contains
    - searchstring: yyyy
      searchtyp: contains
    - searchstring: zzzz
      searchtyp: contains
@Struppix, Hallo Karsten, für deine "etwas ausgeholte" Antwort und ebenso dein Angebot der Hilfestellung ...
DANKE dafür (y) ich weiß es zu schätzen und es NICHT selbstverständlich.

Ich hatte ja auch nochmals den YT-Kanal besucht (man muss ab und an halt 2fach oder 3fach sich die/das Video ansehen. Der Teufel steckt ab und an im Detail) und dort habe ich sozusagen den "aha-Effekt" beim anschauen erhalten. Dazu, siehe Zitat, deine Möglichkeit die dann als weiteres meinen "Denkfehler" aufgezeigt hat (Stichwort "condition"). Aktuell eben umgesetzt und übliches Prozedere, Speichern/hochladen/testen, nun erfolgreich.
Nun geht es weiter die Rules anpassen und u. U. mit Subrules verfeinern.
Ab und an braucht man den Griff ins Genick und dann die Fresse rein in die Suppe ;)
 


 

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