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?
Leerzeichen handling
- 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.
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:
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*
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'
Trotzdem konnte ich's nicht lassen, das zu posten. *gnihihi*
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.
In deinen Beispiel, wurde lediglich das Wort in eine Richtung geteilt, wenn nur das zutrifft, ist es sogar ohne Wortliste machbar.
- 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
"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 ...
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
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
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)
- Michael Schneider
- User
- Beiträge: 569
- Registriert: Samstag 8. April 2006, 12:31
- Wohnort: Brandenburg
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.Sirius3 hat geschrieben:Hier noch ein Programm, wie man auf einfache Art und Weise nach jedem 50. Zeichen ein Leerzeichen einfügt:
Gruß
Diese Nachricht zersört sich in 5 Sekunden selbst ...