synOCR synOCR - GUI für OCRmyPDF

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.541
Punkte für Reaktionen
1.373
Punkte
234
Dabei gibt es auch noch einen größeren Freiraum zwischen LfdNr und der Zahl selbst.
Es gibt in der GUI auch den Schalter für die Leerzeichen bereinigte Suche, bei der alle multiplen Leerzeichen auf eins reduziert werden.
 
Zuletzt bearbeitet:

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14

Struppix

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

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14
Diese Abrechnung bekomme ich jeden Monat und der Kopf der Rechnung, wo sich auch die LfdNr befindet, sieht immer gleich aus.

Ich habe meine bereits existierende Regel mal um deine Idee erweitert. Leider funktioniert sie im moment noch nicht. Wäre ja zu einfach gewesen.

Zur Zeit sieht es so aus:
Code:
Regel_03_Abrechnung:
    tagname: abrechnung_§tagname_RegEx
    tagname_RegEx: (?i)\b(LfdNr[\ \:]*\K[1-9]*)\b
    targetfolder: /volume1/rechnungen/§yocr4
    condition: all
    subrules:
    - searchstring: abrechnung
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: 123456789
      searchtyp: contains
      isRegEx: false
      source: content
      casesensitive: false
    - searchstring: (?i)\b(LfdNr[\ \:]*\K[1-9]*)\b
      searchtyp: contains
      isRegEx: true
      casesensitive: false

Oder habe ich da noch Fehler drin?
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
882
Punkte für Reaktionen
184
Punkte
63
Diese Abrechnung bekomme ich jeden Monat und der Kopf der Rechnung, wo sich auch die LfdNr befindet, sieht immer gleich aus.

Ich habe meine bereits existierende Regel mal um deine Idee erweitert. Leider funktioniert sie im moment noch nicht. Wäre ja zu einfach gewesen.


Oder habe ich da noch Fehler drin?
Zumindest hast Du meinen Fehler beseitigt und isRegEx aktiviert.(y)
Nun starte mal den debuglevel 2 und schau Dir mal an welche Subregel nicht erfüllt wird.
Das mit dem targetfolder habe ich so noch nicht genutzt, interessant. Wusste gar nicht das das geht.

Gruß Karsten
 

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14
Zumindest hast Du meinen Fehler beseitigt und isRegEx aktiviert.(y)
Ja, ich dachte mir ,das sollte da noch rein. Und das mit den Ordnern und Unterordnern nutze ich viel. Das spart mir eine Menge Arbeit und ich brauche mich nach dem scannen um nichts mehr kümmern.

Ich habe die Einstellung zum Entfernen der überflüssigen Leerzeichen (Leerzeichen bereinigen) jetzt mal aktiviert und den Loglevel auf 2 gestellt. So genau kann ich da aber keine definierten Fehler finden. Was habe ich herausgefunden:

1. Die RegEx-Regel Formel scheint noch nicht zu funktionieren
2. Statt der laufenden Nummer nimmt er beim Umbenennen den Tag: _§tagname_RegEx
3. Laut Log macht OCR erstmal aus den großen Freiräumen der gesuchten Zeile "LfdNr . 86"
4. Unter der Regel steht dann aber: RegEx not found (fallback to abrechnung_§tagname_RegEx)

Code:
search by tag rule: "Regel_03_Abrechnung" ➜ 
                  ➜ condition:        all
                  ➜ tag:              abrechnung_§tagname_RegEx
                  ➜ destination:      /volume1/rechnungen/§yocr4
                  ➜ RegEx for tag:    (?i)\b(LfdNr[\ \:]*\K[1-9]*)\b
                  ➜ multilineregex:   [value for multilineregex is empty - "false" is used]
                      [Subrule]:
                          [value for multilineregex is empty - "false" is used]
                      >>> search for:      abrechnung
                          isRegEx:         false
                          searchtype:      contains
                          source:          content
                          casesensitive:   false
                          multilineregex:  false
                          grep parameter:  i
                          ➜ Subrule matched
                          [value for multilineregex is empty - "false" is used]
                      >>> search for:      123456789
                          isRegEx:         false
                          searchtype:      contains
                          source:          content
                          casesensitive:   false
                          multilineregex:  false
                          grep parameter:  i
                          ➜ Subrule matched
                          [value for source is empty - "content" is used]
                          [value for multilineregex is empty - "false" is used]
                      >>> search for:      (?i)\b(LfdNr[\ \:]*\K[1-9]*)\b
                          isRegEx:         true
                          searchtype:      contains
                          source:          content
                          casesensitive:   false
                          multilineregex:  false
                          grep parameter:  i
                          ➜ Subrule matched
                          >>> Rule is satisfied
                              ➜ search RegEx for tag ➜ RegEx not found (fallback to abrechnung_§tagname_RegEx)
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.541
Punkte für Reaktionen
1.373
Punkte
234
3. Laut Log macht OCR erstmal aus den großen Freiräumen der gesuchten Zeile "LfdNr . 86"
Das Textfile, welches der Suche zugrunde liegt, wird im Loglevel 2 mit im Logordner abgelegt. Dort kannst du dir auch den Unterschied ansehen, mit aktivierter Einstellung und ohne.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
882
Punkte für Reaktionen
184
Punkte
63
Hi TJ

bei mir klappt das prima. Oder übersehe ich etwas?
Lade mir bitte mal das LOG und das searchfile hoch, das würde mich interessieren.
Unbenannt.PNG
Karsten

Den Upload kannst Du unten in meiner Signatur finden...
 
Zuletzt bearbeitet:
  • Like
Reaktionen: TJ.

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14
Das würde ich gerne machen, aber da sind echt viele sensible Daten drin. Da bin ich jetzt echt unsicher...
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
882
Punkte für Reaktionen
184
Punkte
63
Kein Problem.
Läuft hier unter meinem synOCR auch sauber durch

Code:
[runtime up to now:    00:00:00]

                search by tag rule: "rule_1001" ➜ 
                  ➜ condition:        all
                  ➜ tag:              test_§tagname_RegEx
                  ➜ destination:     
                  ➜ RegEx for tag:    (?i)\b(LfdNr[\ \:]*\K[1-9]*)\b
                  ➜ multilineregex:   [value for multilineregex is empty - "false" is used]
                      [Subrule]:
                          [value for source is empty - "content" is used]
                          [value for multilineregex is empty - "false" is used]
                      >>> search for:      (?i)\b(LfdNr[\ \:]*\K[1-9]*)\b
                          isRegEx:         true
                          searchtype:      contains
                          source:          content
                          casesensitive:   false
                          multilineregex:  false
                          grep parameter:  i
                          ➜ Subrule matched
                          >>> Rule is satisfied
                              ➜ search RegEx for tag ➜ test_86



                rename tag is: "_test_86"

Karsten
 
  • Like
Reaktionen: TJ.

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14
Hmm, ich bekomme es irgendwie nicht hin. Egal was ich probiere. Vermutlich liegt es an der Zeile wie sie ocr't wird. Reicht es dir auch, wenn du die betroffene Zeile der beiden Dokumente sehen könntest?
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
882
Punkte für Reaktionen
184
Punkte
63
Hallo TJ,
also Du hast keinen Fehler gemacht.
Das scheint wieder mal das Problem mit dem ":" zu sein.
Schreib die RegEx mal so:
Code:
(?i)\b(LfdNr\s+\S+\s+\K[1-9]{1,3})\b

Karsten
 
  • Like
Reaktionen: geimist und TJ.

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14
Wahnsinn, jetzt funktioniert es! Du bist echt eine RegEx-Maschine! :love: 1000 DANK!

Das scheint wieder mal das Problem mit dem ":" zu sein.
Da kann ich dir zwar nicht folgen, da ich es nicht wirklich verstehe, aber ich werde versuchen deine Befehlszeile mit dem Wiki zu verstehen.

Werde morgen nochmal versuchen ältere Abrechnungen zu scannen, um zu sehen, ob das Erkennen der Zeile auch zuverlässig funktioniert. Denn das ist schon echt ein blödes Dokument. Da hast du mir echt geholfen! Nach dem morgigen Testen werde ich mich nochmal melden!

Aber du bist auf jeden Fall mein Held des Tages!
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
882
Punkte für Reaktionen
184
Punkte
63
Da kann ich dir zwar nicht folgen, da ich es nicht wirklich verstehe, aber ich werde versuchen deine Befehlszeile mit dem Wiki zu verstehen.
Hallo TJ,
dies Thema hatte wir in der Vergangenheit schon ein paar Mal. Der ":" führt manchmal zu Problemen. Interessanterweise nicht immer und nicht bei jedem. Man muss sich nur daran erinnern, was mir mit zunehmenden Alter immer schwerer fällt ;) :rolleyes:
Weitere Infos hier, auch für alle die es interessiert.

Bei mir fällt das nicht auf, da ich nur ein klitzekleinwenig am Code von Stefan, sry @geimist, gebastelt habe, und bei mir diese und andere Zeichen anders gehandelt / tw. ersetzt werden.

Gruß
Karsten
 

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14
Hallo @Struppix,
Ja, mir fällt es auch immer schwerer den Dingen hier zu folgen. Aber ich versuche mich durchzubeißen, denn der Mehrwert im Alltag ist herausragend.

Ich habe inzwischen mit ein paar anderen Abrechnungen etwas getestet. Dabei musste ich feststellen, dass der ":" tatsächlich eine Rolle spielt. Bei den anderen Dokumenten wurde der ":" beim ocr'n nicht erkannt, sodass der RegEx-Befehl nicht mehr funktionierte. Ich habe dann versucht zu verstehen, was genau der Befehl bewirkt und einfach mal die Zeichen "\s+\S+" weggelassen. Damit funktionierte es wieder bei den Dokumenten ohne ":". Nun habe ich erstmal eine zweite Regel mit diese Anpassung erstellt, damit beide Varianten erkannt werden.

Da die Regel zwei weitere Subrules enthält, die erfüllt sein müssen, kann ich die beiden RegEx-Befehle nicht als "any"-Subrules in diese mit einbinden. Oder kann man die beiden Befehle zu einer vereinen?
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
882
Punkte für Reaktionen
184
Punkte
63
Natürlich geht das beide RegEx zusammengefasst werden können. Ich kann das gerade nicht testen, da ich unterwegs bin.
Teste mal
Code:
(?i)\b(LfdNr(\s\S\s)*?\K[1-9]{1,3})\b
Oder
Code:
(?i)\b(LfdNr(\s\S\s)+?\K[1-9]{1,3})\b
Gruß Karsten
 

TJ.

Benutzer
Mitglied seit
29. Apr 2021
Beiträge
40
Punkte für Reaktionen
3
Punkte
14
Kein Stress. Bin dir so schon dankbar für deine Hilfe. Beide Varianten funktionieren leider nicht für die Dokumente, wo der ":" nicht erkannt wird.
 

Struppix

Benutzer
Mitglied seit
10. Apr 2009
Beiträge
882
Punkte für Reaktionen
184
Punkte
63
Hi TJ,
dann mal anders. So das sollte aber jetzt passen,
Code:
(?i)\b(?!LfdNr\s*\S*\s*)\K(?:\d+)\b
denke ich.

Gruß Karsten
 


 

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