Seite 1 von 1
String - alle Wörter weniger als X Zeichen löschen
Verfasst: Donnerstag 13. Juni 2019, 23:36
von Crusha
Hey,
ich bräuchte eine Hilfestellung.
Ich lese einen größeren Text aus einer Textdatei ein. Nach dem auslesen filtere ich den Text, indem ich alle Sonderzeichen ersetze. Zum Schluss zähle ich alle Wörter die in der Textdatei enthalten sind.
Ich würde gerne nach der Filterung alle Füllwörter, Artikel usw auch filtern / löschen. Meine Idee wäre es alle Wörter mit maximal 5 Buchstaben ersetzt oder gelöscht werden, aber leider habe ich keine Idee wie ich das umsetzen könnte.
Eines was mir einfiel wäre es mit einer if Schleife dies zu prüfen und zu ersetzen, aber leider hapert es mit der Umsetzung.
Vielleicht könntet ihr mir dabei weiterhelfen.
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 07:29
von Sirius3
if-Schleifen gibt es nicht.
Wo ist das Problem, wenn Du die Wörter zählst, nur die zu zählen, deren Länge größer als 5 ist?
Was hast Du denn schon versucht? Zeige Code!
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 08:51
von __blackjack__
@Crusha: Nur so am Rande: Das was Du als filtern/Filterung bezeichnest ist etwas anderes. Beim Filtern werden Elemente entfernt, nicht ersetzt. Wenn Du filtern/Filterung sagst, dann denken Leser an das was die `filter()`-Funktion macht.
Du kannst entweder eine Schleife schreiben in der eine neue, gefilterte Liste aufgebaut wird, in dem Du über die alte Liste iterierst und nur die Elemente zu der neuen Liste hinzufügst, die mehr als X Zeichen lang sind. Das lässt sich auch als „list comprehension“ ausdrücken. Oder Du könntest eine Funktion schreiben die ein Element bekommt und prüft ob das mehr als X Zeichen lang ist, und die `filter()`-Funktion damit verwenden.
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 09:50
von Jankie
Hey,
ich würde das folgendermaßen lösen:
mit regex.findall alle Wörter trennen, in eine Liste packen und dabei die Sonderzeichen nicht mitnehmen. Dann hast du alle Wörter in einer Liste. Dann würde ich durch die Liste iterieren und die Anzahl der Buchstaben pro Wort zählen. Wenn die Länge kleiner als x ist, fliegen Sie raus. Allerdings kann man in Python nicht während dem iterieren über eine Liste gleichzeitig Elemente entfernen, dafür brauchst du eine Kopie der Liste.
Vorschlag:
Du zeigst uns was du bisher hast und ich zeige dir wie ich es umsetzen würde.
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 09:54
von sparrow
"Sonderzeichen ersetzen" könnte auch bedeuten "ich habe die falsche Kodierung gewählt".
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 13:06
von Crusha
Sirius3 hat geschrieben: Freitag 14. Juni 2019, 07:29
if-Schleifen gibt es nicht.
Wo ist das Problem, wenn Du die Wörter zählst, nur die zu zählen, deren Länge größer als 5 ist?
Was hast Du denn schon versucht? Zeige Code!
Das wäre auch eine Idee
Ich poste mal den Code. Sry für die Verwirrung, bin andere Sprachen, außer Python gewohnt ^^
Code: Alles auswählen
from collections import Counter
with open('test_test.txt') as file:
data = file.read()
ersetzen = data.replace(".", "").replace(",", "").replace("-", "").replace(" ", " ") \
.replace("\n", "").replace("\d", "") \
.replace('"', "") \
.replace("A", "a").replace("B", "b").replace("C", "c").replace("D", "d").replace("E", "e").replace("F", "f") \
.replace("G", "g").replace("H", "h").replace("I", "i").replace("J", "j").replace("K", "k").replace("L", "l") \
.replace("M", "m").replace("N", "n").replace("O", "o").replace("P", "p").replace("Q", "q").replace("R", "r") \
.replace("S", "s").replace("T", "t").replace("U", "u").replace("V", "v").replace("W", "w").replace("X", "x") \
.replace("Y", "y").replace("Z", "z") \
.lstrip().rstrip().strip() ##löschen Leading, Trailing, Trimming
liste = ersetzen.split()
counts = Counter(liste)
print(counts)
file.close()
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 13:18
von Sirius3
@Crusha: da ist ja ganz schön viel Raten dabei. Für Kleinbuchstaben gibt es lower. "\d" ist kein Sonderzeichen. Bei lstrip, rstrip, strip sind mindestens 2 überflüssig, in Deinem Fall 3. Eingerückt wird immer mit 4 Leerzeichen pro Ebene. Bei with braucht man kein close.
Code: Alles auswählen
with open('test_test.txt') as file:
data = file.read().translate(dict.fromkeys(map(ord, '.,-"'))).lower()
words = data.split()
counts = Counter(words)
print(counts)
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 13:25
von Jankie
Das Entfernen würde ich so machen:
Code: Alles auswählen
import re
TESTSTRING = "Das ist ein Beispieltext. Um zu schauen ob das Entfernen der Wörter & Sonderzeichen mit einer Länge weniger als x aus einem String klappt"
def remove_all_words_with_length_less_x(text_input, max_word_lenght):
seperated_input = re.findall(r"[\w']+", text_input)
return " ".join([word for word in seperated_input if len(word) > max_word_lenght])
print(remove_all_words_with_length_less_x(TESTSTRING, 3))
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 13:29
von sparrow
Ergänzend:
String kennt lower() was den String komplett mit Kleinbuchstaben zurück gibt. Dann brauch man die nicht einzeln ersetzen (und selbst dafür würden sich bessere Lösungen finden).
strip() macht das selbe wie rstrip() + lstrip(). Das alles aufzurufen macht keinen Sinn. Und split() ist so schlau, dass man nicht davon braucht.
Wenn du etwas mit with öffnest, musst du es nicht explizit schließen. Dafür ist with nämlich da.
Irgendetwas durch nichts zu ersetzen halte ich für Schwierig. So rutschen unter Umständen. In "Dies ist die erste Zeile\nhier geht es weiter" exisitert dann nämlich das neue Wort "Zeilehier".
split trennt auch bei aufeinanderfolgenden Leerzeichen korrekt. Man muss die also nicht reduzieren.
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 13:42
von sparrow
@Jankie: In deiner Funktion wird das Schlüsselwort "input" überschrieben, was beim Lesen zu Verwirrung führen kann, und hinter "line" verbirgt sich keine "line".
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 13:50
von Jankie
@sparrow:
Danke, habe es oben angepasst.
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 14:11
von Crusha
Ohh, wow. Vielen Dank für die Hilfe und auch gleich den Code dazu!
Ich hatte nur nach alternativen geschaut wie die herangehensweise ist und habe hierzu replace gefunden und ausgebaut, aber hätte nicht gedacht das man das so extrem einfach kürzen kann...
Werde mir mal die von euch verwendeten regulären Ausdrücke genauer in einen Tutorial anschauen!
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Freitag 14. Juni 2019, 16:20
von __blackjack__
@Crusha: Selbst wenn es nur `replace()` geben würde, hätte man das nicht zig mal hingeschrieben, sondern eine Schleife über (alt, neu)-Paare geschrieben.
Re: String - alle Wörter weniger als X Zeichen löschen
Verfasst: Samstag 15. Juni 2019, 13:45
von Crusha
__blackjack__ hat geschrieben: Freitag 14. Juni 2019, 16:20
@Crusha: Selbst wenn es nur `replace()` geben würde, hätte man das nicht zig mal hingeschrieben, sondern eine Schleife über (alt, neu)-Paare geschrieben.
Das war mir klar ^^, aber ich hatte bis dato noch nicht diese kurze Möglichkeit gefunden
