Mit Regex einfache und doppelte Anführungszeichen suchen

FatManStanding

Lt. Junior Grade
Registriert
Aug. 2021
Beiträge
491
tach,

ich habe hier ein buch, dass durch eine ocr-software geschickt wurde zur texterkennung. die erkennung der anführungszeichen (hier ‹ und « statt ' und ") ist nicht immer zuverlässig. ich will versuchen die meisten fehler zu finden und wollte mit einer regex-suche nach einfachen anführungszeichen suchen lassen die aber durch doppelte "beendet" werden (und umgedreht). im bsp.

bla bla ‹laber laber sülz» bla bla bla

sollte er die zeichenfolge

‹laber laber sülz»

finden. wenn das einfache ausführungszeichen aber korrekt gesetzt wurde, soll er nichts finden

bla bla ‹laber laber sülz› bla bla bla

das geht grundsätzlich mit

Code:
‹.*»

er findet da aber auch das einfache beendende anführungszeichen selbst. im dritten korrekten bsp. oben würde er alles finden bis irgendwann ein doppeltes ausführungszeichen kommt. das soll so nicht sein. sowas geht nicht.

Code:
‹.*[^›]»
 
Nur mit regex geht das nicht, glaube ich.
Eine übliche Methode für diese Art von Problem besteht in der Verwendung eines Stacks, aber das könnte hier sogar schon overkill sein da es keine Verschachtelung gibt. Mach einfach nen simples if-else und merkd dir halt das jeweils letzte relevante Symbol.
 
Sollte da nicht einfach
‹[^›]*»

reichen? Im inverted Set suchst du ja eh alles außer das beendende Anführungszeichen.
 
  • Gefällt mir
Reaktionen: FatManStanding und BeBur
Ich wollte grad was schreiben, aber Shio war schneller.
Das sollte so funktionieren: Einfaches Anführungszeichen, beliebige Anzahl von beliebigen Zeichen die kein einfaches Anführungszeichen sind und danach ein Doppeltes.
 
Zuletzt bearbeitet:
@floq0r
[^›] sollte "jedes Zeichen was nicht > ist" sein .
Durch * sagen wir mindestens keins (min. eins wäre +) und beliebig viele dieser Zeichen.
 
ja das geht, danke. dachte man muss erst "alles" suchen und dann das "außer" definieren.
 
Fälle wie
Code:
<hallo <und noch eines auf>
gibt es nicht?

Ja, ich habe einfach eine Spitze Klammer statt dem korrekten Zeichen verwendet, aber soll ja nur zur Veranschaulichung sein.
 
da eine texterkennung bei einem buch sie perfekt ist, könnte es das auch geben. das müsste man mit

Code:
‹[^›]*‹

finden können. hatte sowas im dem buch hier nicht.
 
  • Gefällt mir
Reaktionen: tollertyp
Ist denn überhaupt gewährleistet, dass die OCR nicht spitze Klammern (die in Regex übrigens Metacharacters sind) findet, sondern typographische Anführungszeichen erkennt? Da müsste die Texterkennung aber schon ganz ordentlich auf Zack sein.
Wie angedeutet, falls im Text doch spitze Klammern stehen sollten, wären diese für den regulären Ausdruck zu escapen.
 
  • Gefällt mir
Reaktionen: BeBur
da ist die ocr in der tat nicht gut. im dem buch hier stehen auch nur wenige klammern drin.
 
OCR ist immer so eine Sache, da kann irgendwas bei rumkommen, einschließlich kompletter Käse.

Würde das daher mehrstufig machen und dazu auch den einen oder anderen verarbeiteten Text als Sample hernehmen um zu sehen, was von der OCR wie zurückgegeben wird.

Wenn das « » als Quotation Marks sind, dann gehe ich jede Wette ein ist beim Input alles dabei von <, <<, « und wer weiß was nicht noch, wobei noch nicht mal klar ist, ob und ggfs was davon an anderer Stelle tatsächlich hingehören würde.

Man kann sich sicherlich einen gewissen Überblick verschaffen. Die Anzahl von « und » im Text sollte bspw. (möglichst) gleich sein. Dagegen sollte vermutlich sowas wie >> und << überhaupt nicht auftauchen, dh die ermittelte Anzahl irgendwo bei 0 sein.

In jedem Fall wird es aufwendiger und insbesondere... Kontext, Kontext, Kontext. Sonst ersetzt man buchstäblich irgendwas irgendwomit. Sonst ersetzt man irgendwann "lo" mit "10", weil OCR das irgendwo so erkannt hat, und stellt hinterher fest, daß sich der Aufwand nicht nur nicht ge10hnt, sondern man Hunderte Stunden wegen Bl10dsinn ver10ren hat.
 
  • Gefällt mir
Reaktionen: Phrasendreher
Zurück
Oben