@__blackjack__
Bei mehr als einem Wort macht es aber einen Unterschied:
verstehe

lieben Dank und gut zu wissen, denn dann wäre mein vorheriger Funktionsname ohnehin auch noch semantisch falsch/verwirrend gewesen.
Man kann ja auch der Meinung sein, dass man erst das ”grosse, grobe Bild malt” und die kleineren detaillierteren Teile danach ausfüllt. Also von der Hauptfunktion startend, und dann die Einzelschritte, bis zu Detailaufgaben und Hilfsfunktionen runter, der Quelltext im Laufe der Datei immer spezieller wird.
ja genau, das schlägt Hr. Martin vor.
hier mal der gesamte Code, wie ich ihn nun habe:
Auszug Sprueche.txt
Code: Alles auswählen
A
"Abends werden die Faulen fleissig." - Citatboken, Bokförlaget Natur och Kultur, Stockholm, 1967, ISBN 91-27-01681-1
"Abwarten und Tee trinken." - Wander-DSL, Bd. 5, Sp. 702, commons. (Dort zitiert als: "Abwarten und Theetrinken.")
"Adel verpflichtet." (Noblesse oblige) - nach Pierre-Marc-Gaston de Lévis, Maximes et réflections
"Alle Menschen in der Welt streben nur nach Gut und Geld; und wenn sie es dann erwerben legen sie sich hin und sterben." - Citatboken, Bokförlaget Natur och Kultur, Stockholm, 1967, ISBN 91-27-01681-1
"Alle Sünden in eine münden."
"Alle Wege führen nach Rom." - Wander-DSL, Bd. 4, Sp. 1842, commons
"Aller Anfang ist schwer." - Wander-DSL, Bd. 1, Sp. 80, commons
"Aller guten Dinge sind drei." - Wander-DSL, Bd. 1, Sp. 605, commons. (Dort zitiert als: "Aller guten Ding seynd drey.")
"Alles Gute kommt von oben."
"Alles hat seine Zeit, nur die alten Weiber nicht." - Wander-DSL, Bd. 1, Sp. 46, commons
"Alles neu macht der Mai." - nach dem Gedicht von Hermann Adam von Kamp "Alles neu, macht der Mai" (1818)
Code: Alles auswählen
from pathlib import Path
def investigate_sayings():
# TODO
# Verbesserung mittels wiki-api - Texte direkt aus Wikipedia "Sprichwörter" auslesen?
# Methode "tut" zu viel - Zerlegen in Beschaffung der Daten und Erstellen des Datenmodells
filename = Path("C:/Users/Buchfink/Documents/Projkete/WortspielGenerator/Sprueche.txt")
with open(filename, "r", encoding="UTF-8") as file:
investigated_sayings = {}
for line in file:
splitted = line.strip().split(".\"")
saying = splitted[0].strip().replace('\"', '')
if len(saying) == 1:
continue
words = saying.split(" ")
interesting_words = []
for word in words:
if word.istitle():
interesting_words.append(word)
investigated_sayings[saying] = interesting_words
return investigated_sayings
def get_rhyme(word):
# TODO
# Quelle ist noch unklar. Daher nur mal exemplarische simplifizierte Beispielzuordnung
# Ungelöste Probleme:
# - Quelle selbst, hardcodiert ist ja keine Lösung :)
# - Artikelproblem - gleicher Artikel funktioniert immer, unterschiedliche Artikel eher weniger (kontextabhängig)
# - es gibt ggf. mehrere Reimwörter pro Wort,
# - Plural vs. Singular
# - Beidseitigkeit - sprich Laus reimt sich auf Maus und umgekehrt. Man könnte vereinfachen, indem man
# jedes Pärchen nur einmal einfügt
rhymes = {
"Esel": "Sessel", "Sessel": "Esel",
"Geld": "Held", "Held": "Geld",
"Spiegel": "Igel", "Igel": "Spiegel",
"Kopf": "Topf", "Topf": "Kopf",
"Baum": "Raum", "Raum": "Baum",
"Berg": "Zwerg", "Zwerg": "Berg",
"Laus": "Maus", "Maus": "Laus",
"Adel": "Sargnagel", "Sargnagel": "Adel",
"Wunsch": "Punsch", "Punsch": "Wunsch",
"Flügel": "Kleiderbügel",
"Waffen": "Karaffen",
"Macht": "Verdacht"
}
rhyme = rhymes.get(word)
return rhyme
def substitute_with_rhymes(investigated_sayings):
substituted_sayings = []
for key, value in investigated_sayings.items():
for word in value:
substituted_word = get_rhyme(word)
if substituted_word is not None:
substituted_sayings.append(key.replace(word, substituted_word))
return substituted_sayings
def show_sayings(sayings):
for saying in sayings:
print(saying)
print(f"Anzahl {len(sayings)}")
def main():
investigated = investigate_sayings()
substituted = substitute_with_rhymes(investigated)
show_sayings(substituted)
if __name__ == '__main__':
main()
Ich denke, dass das wohl eine pythonische Reihenfolge ist - korrekt?
Am Rande:
Der Code tut was er soll. Aber Ich bin trotzdem ein bisschen unglücklich damit. Hier mal eine Liste all meiner Unglücksfaktoren
1) Ich lese aus einer Datei. Für ein Code-Review ist das blöd, denn man kann den Code dann nicht einfach mal ausprobieren. Ich möchte hier wenn's geht, keine riesigen Aufwände generieren. Dieser Code in investigate_sayings() ist daher schlecht.
Verbesserungsvorschlag: direkt aus Wikipedia auslesen. Ich bin hier aber noch am Recherchieren wie das genau geht und melde mich ggfls. mit konkreten Fragen
2) Das Datenmodell gefällt mir nicht. Es fühlt sich falsch an, einen Spruch als "key" zu missbrauchen. Ein Key mit Leerzeichen oder Umlauten ist irgendwie schräg.
Verbesserungsvorschlag: Klassen, die die Daten halten.
Was meint ihr so?
3) hardcodierte Reim-Zuordnung. Tja nun

Es ist nur ein Prototyp und ich wollte erst mal sehen, ob das überhaupt eine gute Idee ist. Letztlich musss da aber was generisches hin.
4) Algorithmus zur Substitution: hier könnte man auch flexibler werden und vielleicht mal gucken wollen, ob man statt Reime Synonyme oder Antonyme durchprobiert.
Hier mangelt es an Flexibilität aus meiner Sicht.
Verbesserungsvorschlag: auf ein Klassenmodell umziehen und dann mittels Polymorphie (oder Funktion als Parameter?)
5) Algorithmus zum Finden interessanter Wörter: könnte man auch für Verben haben wollen. Nomen sind halt leichter heuristisch einigermaßen erkennbar, daher sind es im ersten Wurf Nomen geworden.
6) Main: könnte man auch mit einem Einzeiler schreiben.
Zum debuggen finde ich es manchmal praktischer, wenn es nicht ganz so kompakt steht. Was meint ihr denn?
7) siehe TODOs im Code selbst.

continue.... tja nun... ich bin unentschlossen. Ich mag "continue" eigentlich gar nicht. Besser in zwei Funktionen splitten? Ein If erhöht halt wiederum die Verschachtelungstiefe. Was meint Ihr?
Es gibt noch einen Haufen Aspekte, die man verbessern könnte. Ich poste den Code hier mal, damit Ihr einen Eindruck bekommt, was ich so mache.
Ich freue mich auf Euer Feedback!
LG