Seite 1 von 1
Leerzeichen handling
Verfasst: Mittwoch 14. August 2013, 15:55
von Ruffy
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?
Re: Leerzeichen handling
Verfasst: Mittwoch 14. August 2013, 16:03
von pillmuncher
Was machst du mit Sätzen wie "Es gibt ein e in dem Wort Brett"?
Re: Leerzeichen handling
Verfasst: Mittwoch 14. August 2013, 16:04
von /me
Woher weißt du, was ein korrektes Wort ist? Hast du eine Wörterliste?
Re: Leerzeichen handling
Verfasst: Mittwoch 14. August 2013, 16:43
von snafu
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*
Re: Leerzeichen handling
Verfasst: Mittwoch 14. August 2013, 20:40
von Dami123
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.
Re: Leerzeichen handling
Verfasst: Donnerstag 15. August 2013, 08:34
von Michael Schneider
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
Re: Leerzeichen handling
Verfasst: Sonntag 18. August 2013, 05:18
von Ruffy
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

Re: Leerzeichen handling
Verfasst: Sonntag 18. August 2013, 08:17
von Sirius3
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)
Re: Leerzeichen handling
Verfasst: Sonntag 18. August 2013, 08:25
von Michael Schneider
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ß