Leerzeichen handling

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ruffy
User
Beiträge: 34
Registriert: Dienstag 2. Oktober 2012, 11:26

Hi,
ich hab ein kleines Problemchen und zwar versuche ich einen string zu parsen, in dem wieso auch immer an unterschiedlichen stellen einfach mal ein leerzeichen auftauchen kann. Leider werden die wörter dann nicht erkannt bsp:

string = "Hallo das ist e in Test String m it Fehler"

nun suche ich nach "ein" und "mit", finde aber nichts da ja leerzeichen dazwischen sind, replace bringt mir auch ichts da sonst gar keine leerzeichen mehr vorhanden sind was auch nicht sinnvoll ist... Ziel ist also irgendwie an einen "normalen" Satz zu kommen:

ziel_string = "Hallo das ist ein Test String mit Fehler"

hat jemand vll eine idee?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Was machst du mit Sätzen wie "Es gibt ein e in dem Wort Brett"?
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Woher weißt du, was ein korrektes Wort ist? Hast du eine Wörterliste?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sowas sollte man grundsätzlich *nie* automatisieren bzw sich nicht auf das Ergebnis verlassen. Wenn garantiert ist (und das wird bestimmt nicht der Fall sein), dass es nur um Vorkommen geht, bei denen ein einzelner Buchstabe (bzw Zeichen) vor dem Rest des Wortes steht, dann könnte man mit regulären Ausdrücken arbeiten:

Code: Alles auswählen

>>> import re
>>> string = "Hallo das ist e in Test String m it Fehler"
>>> re.sub(r'(?<!\S)(\S) (\S)', r'\1\2', string)
'Hallo das ist ein Test String mit Fehler'
Du wirst damit aber sicherlich auf Probleme stoßen, weil man davon ausgehen muss, dass die Anforderungen weitaus größer sind als dir vielleicht gerade bewusst ist.

Trotzdem konnte ich's nicht lassen, das zu posten. *gnihihi*
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Wie pillmuncher bereits geschrieben hat, ist die größte Schwierigkeit, herauszufinden wo das Wort geteilt wurde.
In deinen Beispiel, wurde lediglich das Wort in eine Richtung geteilt, wenn nur das zutrifft, ist es sogar ohne Wortliste machbar.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Moin,

"Wir essen gleich Oma!" - fehlt da ein Komma oder nicht?

Wie schon gesagt wurde, ist das nur automatisierbar, wenn man klare Regeln für den Fehler hat.

"Ein stein geht um die Welt." wird bei Verwendung einer Wörterliste keinen Fehler werfen, dann fehlt noch ein Semantikinterpreter...

Ich fürchte, hier hilft nur die Problembeseitigung auf Inputseite (sprich: müssen da Leerzeichen reingeschoben werden?). :-)

VG,
Micha
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Ruffy
User
Beiträge: 34
Registriert: Dienstag 2. Oktober 2012, 11:26

Hallo, erst mal danke für die Antworten, ich hab das ganze jetzt noch mehrfach überprüft und dabei ist mir aufgefallen dass diese Trennung genau alle 50 Zeichen Auftritt.

Wieso genau das so ist konnte ich allerdings auch auf der Input Seite nicht heraus finden da ich darauf leider keine Einfluss habe, aber in nem String zu checken ob das 50te Zeichen ein Leerzeichen ist und dass dann gegebenenfalls zu ersetzten war kein Problem.

Scheint auch alles zu funktionieren bisher.
Danke nochmals :)
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Hier noch ein Programm, wie man auf einfache Art und Weise nach jedem 50. Zeichen ein Leerzeichen einfügt:

Code: Alles auswählen

def read_with_spaces(filehandle, blocksize=50):
    result = []
    while True:
        block = filehandle.read(blocksize)
        if not block:
            break
        result.append(block)
    return ' '.join(result)

with open('test.txt') as filehandle:
    text = read_with_spaces(filehandle)
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Sirius3 hat geschrieben:Hier noch ein Programm, wie man auf einfache Art und Weise nach jedem 50. Zeichen ein Leerzeichen einfügt:
Cool, sieht gut aus. Jetzt hat Ruffy eine Lösung, um die überzähligen Leerzeichen zu entfernen und eine, um seine Lösung ausgiebig zu testen. :-)

Gruß
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten