synOCR synOCR - GUI für OCRmyPDF

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:
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?
 
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
 
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)
 
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.
 
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.
Das würde ich gerne machen, aber da sind echt viele sensible Daten drin. Da bin ich jetzt echt unsicher...
 
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.
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?
 
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.
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!
 
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
 
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?
 
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
 
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.
 
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
 


Schreibe deine Antwort....

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