Seite 1 von 1

Einfache Wortliste aus beliebiger .txt

Verfasst: Samstag 11. April 2020, 14:55
von Prexomat
Hey zusammen,

ich bin ziemlicher Python-Anfänger, also sorry schon mal, wenn ich hier Fachtermini nicht korrekt ausdrücke :?

Was ich erreichen will: Eine Liste aus Wörtern die aus einer beliebigen .txt erstellt wird.
Die .txt ist dabei ein beliebiger Text mit Satzzeichen, Klammern etc.

Hier bin ich aktuell:

Code: Alles auswählen

raw_list = list()
test = 'test.txt'
file = open(test, encoding="utf8")
# badchars = '().;,'

with file as words:
    for word in words:
        if word not in raw_list:
            raw_list.append(word.strip())

print (raw_list)

newfile = 'dic.txt'
with open(newfile, 'w') as fout:
    for words in raw_list:
        fout.write(words + '\n')
Wo ich jetzt nicht weiterkomme:
  • Alle Zeichen beim "importieren" ignorieren, sodass nur die Wörter der .txt ausgewählt werden, und keine Zeichen wie Kommas, Klammern etc. (siehe badchars).
  • Alle Wörter die mit einem Kleinbuchstaben beginnen ignorieren
Ich habe schon einige Ansätze probiert, aber leider mit keinem zufriedenstellenden Ergebnis.

Ich freue mich über jede Hilfe bzw. jeden Tipp. Danke!

Re: Einfache Wortliste aus beliebiger .txt

Verfasst: Samstag 11. April 2020, 17:23
von Prexomat
Ok ich habe jetzt nach langem Suchen erstmal selber eine Lösung gefunden :D:
Falls jemand allerdings eine elegantere Lösung kennt, bin ich froh für Tipps.

Code: Alles auswählen

raw_list = list()
test = 'test.txt'
file = open(test, encoding="utf8")

with file as words:
    for word in words:
        if word not in raw_list:
            raw_list.append(word.strip())

listToStr = ' '.join([str(elem) for elem in raw_list])

raw_list2 = listToStr.translate({ord(i):(' ') for i in '!@#$().;,'})

raw_list3 = [word for word in raw_list2.split() if word[0].isupper()]
raw_list3 = list(set(raw_list3))

raw_list3.sort()
print (raw_list3)

newfile = 'dic.txt'
with open(newfile, 'w') as fout:
    for words in raw_list3:
        fout.write(words + '\n')

Re: Einfache Wortliste aus beliebiger .txt

Verfasst: Samstag 11. April 2020, 17:53
von Sirius3
Statt der Variable `file` wird normalerweise das `open` direkt in `with` geschrieben. `raw_list` enthält „Wörter” ohne Zeileendezeichen, Du prüfst aber, ob `word` mit Zeileendezeichen in `raw_list` ist. Das kann nie der Fall sein. Statt dessen benutzt man normalerweise auch einfach ein Set:

Code: Alles auswählen

with open('test.txt', encoding="utf8") as words:
    raw_words = set(w.strip() for w in words)
`listToStr` ist falsch geschrieben, weil Variablen immer komplett_klein geschrieben werden. raw_list enthält schon Strings, so dass der Aufruf von str unnötig ist, auch bräuchte man keine Liste erstellen, sondern könnte join mit einem Generator füttern.

Code: Alles auswählen

raw_words = ' '.join(raw_words)
Man braucht auch nicht immer wieder einen neuen Variablennamen zu benutzen, vor allem, wenn die Namen sich nur durch eine Nummer unterscheiden.
Dann ist es ziemlich umständlich, erst eine Datei zeilenweise zu lesen, um sie wieder in einen String zu packen um dann Zeichen zu ersetzen, das ganze wieder zu splitten und diese Liste in ein Set zu verwandeln, das dann wieder zu einer Liste wird.
Beim Schreiben fehlt das Encoding. `words` in der for-Schleife ist immer nur ein Wort.

Code: Alles auswählen

TRANSLATION = {ord(c):' ' for c in '!@#$().;,'}

with open('test.txt', encoding="utf8") as words:
    words = set(words.read().translate(TRANSLATION).split())
words.sort()
with open('dic.txt', 'w', encoding="utf8") as output:
    for word in words:
        output.write(f"{words}\n")

Re: Einfache Wortliste aus beliebiger .txt

Verfasst: Samstag 11. April 2020, 18:27
von __blackjack__
`set` hat keine `sort()`-Methode. Ausserdem wird `words` zweimal für sehr unterschiedliche Dinge verwendet.

Code: Alles auswählen

from pathlib import Path

TRANSLATION = {ord(c): " " for c in "!@#$().;,"}


words = sorted(
    set(
        Path("test.txt")
        .read_text(encoding="utf-8")
        .translate(TRANSLATION)
        .split()
    )
)

with open("dic.txt", "w", encoding="utf8") as output:
    output.writelines(f"{word}\n" for word in words)
Wobei ich den Ansatz eine feste Liste von Zeichen zu verbieten bei der Vorgabe „beliebige Textdatei“ eher nicht wählen würde, denn da fehlt dann ja alles Mögliche was in beliebigen Textdateien so vorkommen kann. Fragezeichen, Bindestriche in verschiedenen Ausprägungen, „bullet points“ in verschiedenen Ausprägungen, vielleich auch mal ein Schrägstrich, Auslassungspunkte, Typografische Anführungsstriche in verschiedenen Ausprägungen, …

Re: Einfache Wortliste aus beliebiger .txt

Verfasst: Montag 13. April 2020, 00:13
von Prexomat
Danke, hat geklappt! Und danke für die Tipps :).