Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss15:text_rein_-_gedicht_raus

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss15:text_rein_-_gedicht_raus [2015/09/05 14:06]
H_Hilliger-1995 [Einleitung]
ss15:text_rein_-_gedicht_raus [2016/05/10 14:46] (aktuell)
Zeile 1: Zeile 1:
 +===== Text rein - Gedicht raus =====
 ==== Einleitung ==== ==== Einleitung ====
-In dem Projekt Text_rein-Gedicht_raus geht es darum, einen Python-Code zu schreiben, der aus einem beliebigen Text ein Gedicht generiert. Dieses ist zwar nicht unbedingt logisch und grammatikalisch richtig, hat aber den Anschein und Klang eines richtigen ​Gedichtes. +In dem Projekt Text_rein-Gedicht_raus geht es darum, einen Python-Code zu schreiben, der aus einem beliebigen Text ein Gedicht generiert. Dieses ist zwar nicht unbedingt logisch und grammatikalisch richtig, hat aber den Anschein und Klang eines wirklichen ​Gedichtes.
-Hier kommt ihr zu: +
-  * Details zum Code und dem Code selbst: [[Der Code]] +
-  * Protokollen der Arbeit: [[Protokolle]] +
-  * Schlussfolgerungen unserer Arbeit, sowie einigen Beispielen: [[Ergebnisse]]+
  
- +Dem großen Ziel der Gedichtgenerierung ​waren folgende Ziele untergeordnet:​
- +
-==== Ziele ==== +
-Dem großen Ziel der Gedichtgenerierung ​sind folgende Ziele untergeordnet:​+
   * Einlesen der Texte (erledigt)   * Einlesen der Texte (erledigt)
   * Variieren der Text (erledigt)   * Variieren der Text (erledigt)
Zeile 19: Zeile 13:
   * Überarbeiten der Wahrscheinlichkeitsspeicherung der n-Gramms zur Verschnellerung der Laufzeit (nicht erledigt)   * Überarbeiten der Wahrscheinlichkeitsspeicherung der n-Gramms zur Verschnellerung der Laufzeit (nicht erledigt)
  
-==== Protokolle ==== +Hier geht es weiter
-28.05.15 +  * [[Der Code]] 
-  * Klären der Projektziele +  * [[Ergebnisse]] 
-  * Einigung auf englische Texte +  * [[Protokolle]]
-  * Suche nach Wegen um aus vielen Songtexten eine Datenbank zu erstellen +
-  * Organisieren der Gruppe (Kommunikationsmittel,​ vorläufige Aufgabenverteilung) +
-  * erste Idee für einen Code zur Erkennung von Reimen: +
-<code python>​ +
-# Beispielreim:​ +
-eingabe = "​I'​m not afraid to take a stand \n\ +
- ​Everybody come take my hand \n\ +
- ​We'​ll walk this road together, through the storm \n\ +
- ​Whatever weather, cold or warm \n\ +
- Just let you know that, you're not alone \n\ +
- Holla if you feel that you've been down the same road"​ +
- +
-# Die Verse werden ohne Zeichen in liste_mit_eingegebenen_zeilen als einzelne Strings gespeichert:​ +
-eingabe_ohne_zeichen = eingabe.replace("​.",​ ""​).replace(",",​ ""​).replace("​!",​ ""​).replace("?",​ ""​).replace(";",​ ""​) +
-liste_mit_eingegebenen_zeilen = eingabe_ohne_zeichen.split('​ \n ', 1000) +
-print "Liste mit eingegebenen zeilen: \n", liste_mit_eingegebenen_zeilen,​ '​\n'​ +
- +
-Hier sollen die ersten Reime gefunden und in der reimliste gespeichert werden. +
-reimliste = [] +
-for vers1 in liste_mit_eingegebenen_zeilen:​ +
- for vers2 in liste_mit_eingegebenen_zeilen:​ +
- if vers1[-3:] == vers2[-3:] and vers2 != vers1 : +
- reimliste.append(vers1)  +
- else: +
- continue +
-print "​Reimliste:​ \n", reimliste +
-</​code>​ +
- +
-04.06.15+
-  * Sammeln der Informationen über n-Gramms und Entscheidung,​ diese zur Generierung zu nutzen +
-  * Erstellung bzw. Verstehen des Zugriffs auf Texte als Eingabe +
- +
-11.06.15: +
-  * Finden und Benutzbarmachung eines Wörterbuchs,​ in dem die meisten englischen Wörter mit ihren Phonemen gespeichert sind: +
-<code python>​ +
-import pickle +
-f=file("​cmudict.dump","​rb"​) +
-p=pickle.Unpickler(f)  +
-betonungen=p.load() # auf das Phonem-Wörterbuch wird zugegriffen +
-dictionary = dict(betonungen) +
-print dictionary["​laugh"​] +
-print dictionary["​love"​] +
-</​code>​ +
-Das gibt aus: +
-['​L',​ '​AE1',​ '​F'​] +
-['​L',​ '​AH1',​ '​V'​+
-  * Einigung auf einen vorläufigen (später verworfenen) Generierungsweg des Gedichts: Mit Hilfe von 2-Gramms viele Sätze generieren und dann die, die sich reimen, zum Gedicht hinzufügen +
- +
- +
-18.06.2015:​ +
-  * Schreiben eines Codes, der auf alle Songs in einer Dump-Datei je nach Interpret als Quelle der Textgenerierung zugreift und daraus die 2-Gramms erstellt: +
-  +
-<code python>​ +
-#​!/​usr/​bin/​env python +
-# -*- coding: utf-8 -*- +
-import copy +
-import pickle +
-from extractor import * +
-songs_tss=read_songs("​bobdylan.dump"​) +
-eingabe = songs_tss +
-liste_mit_eingegebenen_zeilen = [+
-neueliste = [] +
-KopierteListe = [] +
-ngrams = {} +
-print len(eingabe) +
-# Liste mit Liedzeilen ohne Sonderzeichen wird erzeugt. +
-for x in range(0, len(eingabe)):​ +
- eingabe_ohne_zeichen =unicode(eingabe[x].lyrics.replace("​.",""​).replace(",",""​).replace("​!",""​).replace("?",""​).replace(";",""​)) +
- liste_mit_eingegebenen_zeilen.append(eingabe_ohne_zeichen.split("​\n"​)) +
-# Lyricliste kopieren, um gleich darauf eine neue Liste zu erzeugen, in der die Liste in einzelne Wörter geteilt wird +
-for x in range(0, len(eingabe)):​ +
- eingabe_ohne_zeichen =unicode(eingabe[x].lyrics.replace("​.",""​).replace(",",""​).replace("​!",""​).replace("?",""​).replace(";",""​).replace("​\n","​ ")) +
- KopierteListe.append(eingabe_ohne_zeichen.split("​ ")) +
-# Erzeugung der 2grams +
-for x in range(len(KopierteListe)):​ +
- for y in range(len(KopierteListe[x])):​ +
- if not(KopierteListe[x][y] in ngrams): +
- ngrams[KopierteListe[x][y]] = [KopierteListe[x][y-1]] +
- else: +
- ngrams[KopierteListe[x][y]].append([KopierteListe[x][y-1]]) +
-#Testen mit beliebig gewähltem key +
-print ngrams["​you"​] +
-</​code>​  +
- +
-25.06.15: +
-  * Versuch der Erstellung eines zweiten 2-Gramms, das Reimpaare bildet; im Prinzip wirkungslos,​ da Reimschemata unterschiedlich und somit alle letzten Wörter sich immer zur Hälfte reimen und zur Hälfte auch nicht: +
-<code python>​ +
-liste_mit_eingegebenen_zeilen = []# ist eine Liste mit Listen,die pro Liste einen Absatz/​Zeile speichert, wobei  +
- #jedes Wort in einem String steht. +
-ngrams = {} # Hier werden am Ende von letztewoerter() alle letzten Wörter mit der Wahrscheinlichkeit ihrer  +
- #​Zusammenstellung in einem Wörterbuch gespeichert,​ wobei jedes Wort ein Key ist, das als Value  +
- #jeweils die nächsten beiden Worte hat, die dem jeweils folgen. +
-def letztewoerter():​ +
- """​ diese Funktion liest vom Text eingabe1 alle Wörter am Ende eines Absatzes ein und macht somit den Pool,  +
- aus dem die Reimwörter kommen"""​ +
- global liste_mit_eingegebenen_zeilen +
- for x in range(0, len(eingabe1)):#​ in der Schleife werden wieder alle Zeichen und Absätze entfernt, sowie  +
- #alle Buchstaben in Kleinbuchstaben umgewandelt. +
- eingabe_ohne_zeichen = eingabe1[x].lyrics.replace("​.","​ "​).replace(",","​ "​).replace("​!","​ "​).replace("?","​ "​).replace(";","​ "​).replace("​(","​ "​).replace("​)","​ "​).replace("​-","​ "​).replace('"',"​ ") +
- eingabe_ohne_zeichen = eingabe_ohne_zeichen.lower() +
- liste_mit_eingegebenen_zeilen.extend(eingabe_ohne_zeichen.split("​\n"​)) +
- liste_2=[# ist eine Liste von Liste mit Strings, wobei in einer Liste eine Zeile und in ihr dann Strings  +
- #mit einer String pro Wort steht. +
- for zeile in liste_mit_eingegebenen_zeilen:​ # splittet die Zeilen in Wörter, sodass jede Zeile eine Liste  +
- #mit Strings und die Strings ein Wort haben. +
- liste_2.append(zeile.split()) +
- liste_mit_eingegebenen_zeilen=liste_2 +
- for x in range(0, len(liste_mit_eingegebenen_zeilen)):#​ nimmt jede Zeile (Liste mit Strings) und speichert die  +
- #​Häufigkeit der Zusammenstellungen der letzten Wörter. +
- try: +
- if liste_mit_eingegebenen_zeilen[x][-1] not in ngrams:# wenn das letzte Wort der Zeile noch nicht in  +
- #ngrams ist, wird es als Key gespeichert und die Endwörter der nächsten beiden Zeilen werden als  +
- #Value gespeichert. +
- try: +
- ngrams[liste_mit_eingegebenen_zeilen[x][-1]] = [liste_mit_eingegebenen_zeilen[x+1][-1]] +
- ngrams[liste_mit_eingegebenen_zeilen[x][-1]].append(liste_mit_eingegebenen_zeilen[x+2][-1]) +
- except IndexError:​ +
- continue +
- except: +
- continue +
- try: # wenn das letzte Wort der Zeile schon als Key vorhanden ist, werden die Enwörter der nächsten beiden  +
- #Zeilen nur in die Liste als strings gehängt. +
- if liste_mit_eingegebenen_zeilen[x][-1] in ngrams: +
- try: +
- ngrams[liste_mit_eingegebenen_zeilen[x][-1]].append(liste_mit_eingegebenen_zeilen[x+1][-1]) +
- ngrams[liste_mit_eingegebenen_zeilen[x][-1]].append(liste_mit_eingegebenen_zeilen[x+2][-1]) +
- except IndexError:​ +
- continue +
- except: +
- continue +
- return ngrams +
-</​code>​ +
-  * Versuch die Silben von Wörtern in verschiedenen Listen zu speichern, um Reime silbenweise zu überprüfen  +
- +
-02.07.15: +
-  * Erstellung eines Toleranz-Wörterbuchs,​ das ähnliche Laute in dem Phonem-Wörterbuch vereinheitlicht (da man gemischte Vokale und Konsonanten nun mit nur einem einheitlichen Buchstaben bezeichnet, womit Silben leichter erkannt werden und Wörter einfacher auf Reime überprüft werden können) (siehe Der Code: 3.) +
-  * Schreiben einer Funktion, die die Silbenzahl eines Wortes erkennt +
- +
-06.07.15: +
-  * Zusammensetzung unserer Codeschnipsel zu einem Code +
-  * erstes Generieren von Gedichten +
-  * Vorstellung des Projekts im Wissenschaftsfenster +
- +
-09.07.15: +
-  * Säuberung des Codes +
-  * Fehlersuche in Code um Wortdoppelungen zu vermeiden und Fehler durch nicht verarbeitbare Wörter zu verhindern +
-  * weiteres Zusammensetzen des Codes +
-  * Vorbereitung auf Projekttage +
-  * Planung des restlichen Projekts +
-  * Festlegen der letzten Ziele +
- +
-28.07.15 (1. Projekttag):​ +
-  * Fertigstellung des Basis-Codes zur Gedichtgenerierung +
-  * Fertigstellung der Säuberung des Basis-Codes +
-  * Vereinheitlichung der Variablen zur besseren Übersichtlichkeit +
-  * Einbauen der Möglichkeit zum Ändern des Reimschemas,​ der Länge der Strophen und Zeilen, Anzahl der Reimpaare und der Anzahl der Strophen +
-  * Generierung von Gedichten +
-29.07.15 (2. Projekttag):​ +
-  * Einbauen der Möglichkeit zum Benutzen von text-Dateien als Quelltexte +
-  * Generierung von mehr Gedichten +
-  * Ermöglichung von unterschiedlichen Texten zur Reimpaar- und Zeilen-Generierung +
-  * Beginn der Kommentierung des Codes +
- +
-30.07.15 (3. und letzter Projekttag):​ +
-  * Fertigstellung der Durchkommentierung des gesamten Codes +
-  * Mitteilen der Ergebnisse an Gruppenpartner +
- +
-==== Ergebnisse ==== +
-Wir haben also einen Code, bei dem man Folgendes selbst bestimmen kann: +
-  * Anzahl der Reimpaare +
-  * Anzahl der Strophen +
-  * Anzahl der Zeilen pro Strophe +
-  * Anzahl der Silben pro Zeile und deren Toleranz +
-  * Reimschema (aabb, abab oder abba) +
-  * Text aus dem die Reime kommen +
-  * Text aus dem der Rest jeder Zeile kommt. +
- +
-Hier sind nun einige Beispiele, die wir generieren konnten: +
- +
-Eingabetexte:​ Bob Dylan;  +
-Reimschema: aabb +
-<code pseudocode>​ +
-hope you're finally arrived +
-indian you know i've survived +
-lucky as you're an instant +
-no food to change the pavement +
-pleasant and west split and rub +
-the hotel a hot tub +
-something only be sprung +
-at his fat food was hung +
-their water in my brains +
-the middle but then complains +
-mississippi a job that loads +
-i see  built boats +
-</​code>​ +
- +
-Eingabetexte:​ Bob Dylan;  +
-Reimschema: aabb +
-<code pseudocode>​ +
-there like a glance through the scars +
-the coast of water rushed +
-when the water hushed +
-feelin'​ fine well she sleeps +
-into dealing drugs and tips +
-be in the penny knife +
-what one by his life +
-victory some more night for the dragon +
-her head on that painted wagon +
-of camille 'neath holes +
-uncle took him much of souls +
-</​code>​ +
- +
-Eingabetexte:​ Bob Dylan;  +
-Reimschema: aabb +
-<code pseudocode>​ +
-luther king and some trains +
- and you had no brains +
-swimmin'​ i could care oh the summer +
-rich wealthy farmer farmer +
-answers can i could get uglier +
-i'm a-walkin'​ down the mirror +
-whispered "not even started +
-baby be an iron rotted +
-you get it is like silk +
-you mind clinging of milk +
-we thought it wasn't contagious +
-as dry  was outrageous +
-</​code>​ +
- +
-Eingabetexte:​ Bob Dylan;  +
-Reimschema: aabb +
-<code pseudocode>​ +
-next door you hear a prayer +
-can be my record player +
-brokin'​ down the mountain range +
-fair throne and said to change +
-gonna throw a parking meter +
-i'll call you back the editor +
-glowing gleaming in argentina +
-but i was put my mind corrina +
-you or soul our ship confused +
-all your brownsville girl so amused +
-criticize tell me that mistake +
-tried to ride gonna break +
-</​code>​ +
- +
-Eingabetexte:​ Bob Dylan;  +
-Reimschema: aabb +
-<​code>​ +
-nothin'​ standing +
-i can'​t ​ who's pretending +
-it invokes it's your bed sally +
-yourself a lonesome valley +
-if god's in the kind favor +
-what my dues getting braver +
-i'll flip a pretty stars +
-with no visible scars +
-way of birth well my baby +
-for the same again maybe +
-that says hello to explode +
-and handsome girl now corrode +
-</​code>​ +
- +
-Ausgangstext-Reime:​ Bob Dylan;  +
-Ausgangstext-Zeile:​ Bibel;  +
-Reimschema: abab +
-<​code>​ +
-him a morsel of thine aunt +
-masters according to cover +
-a lamb for wherein the want +
-ninety and yet will discover +
- +
-with fenced cities and there hang +
-am withered it is baby +
-and people unto their bang +
-among the new moon maybe +
- +
-unto the stone for his brother +
-serve god in argentina +
-according to go forth and mother +
-me in vain thing corrina +
- +
-a land and came out water +
-name will give you forever +
-that when david the daughter +
-while ye have i will never +
-</​code>​ +
- +
-Ausgangstext-Reime:​ Bob Dylan;  +
-Ausgangstext-Zeile:​ Bibel;  +
-Reimschema: abab +
-<​code>​ +
-we gave him that something cooking +
-even if i say i scuff +
-the rich ye are exploding +
-for their poverty enough +
-  +
-israel and the lord require +
-came and lifted up the law +
-ye shall not through desire +
-followed me not know it's alright ma +
-  +
-thou shalt not many and snorts +
-the border was very act +
-so to burn all the vain thoughts +
-troubled i able to direct +
-  +
-heathen and built an angel rides +
-whom we ceased in the ocean +
-we shall baptize you for lights +
-it and of the night season +
-</​code>​ +
- +
- +
-Ausgangstext-Reime:​ Eminem;  +
-Ausgangstext-Zeile:​ Bibel;  +
-Reimschema: aabb +
-<​code>​ +
-kindle a sin and fetched a sign +
-syrians and an help from mine +
-of the god is our sister +
-because of their register +
- +
-about and spotted and a young +
-by fire as none shall be sung +
-treasures by whatsoever craft +
-samuel the house he will i laughed +
-</​code>​ +
- +
- +
-Ausgangstext-Reime:​ Bibel;  +
-Ausgangstext-Zeile:​ Eminem;  +
-Reimschema: abab +
-<​code>​ +
-Me plus i will he granted +
-Can’t say that the exit wounds +
-Am whatever your feet planted +
-Chance I grow up touch your husbands +
- +
-Don’t look back tell ‘em to the sheaves +
-Drunk and land time while they pitched +
-Get this shit out of olives +
-Up I hate me to be preached +
-</​code>​ +
- +
-Ausgangstext-Reime:​ Eminem;  +
-Ausgangstext-Zeile:​ Bibel; ; +
-Reimschema: abab +
-<​code>​ +
-this day that which concern +
-i am not gonna +
-counsel thine hand and burn +
-wanna marijuana +
- +
-valley of the basket +
-than a jackass i'm revoked +
-vessels of the casket +
-and hated him and smoked +
-</​code>​ +
- +
-Ausgangstext-Reime:​ Eminem;  +
-Ausgangstext-Zeile:​ Bibel;  +
-Reimschema: abab +
-<​code>​ +
-Into the monotony +
-The city of his pets +
-Women and great company +
-Of the land was war vets +
- +
-Consolation a stone unturned +
-Two covered on anyway +
-Speaking unto god turned +
-But saul went in the freeway +
-</​code>​ +
- +
-Ausgangstext-Reime:​ Eminem;  +
-Ausgangstext-Zeile:​ Bibel;  +
-Reimschema: abab +
-<​code>​ +
-Him against him the earth +
-Maxine phone I’m gonna +
-As a man have been worth +
-The lord your marijuana +
- +
-The half animal caged +
-That a convertible +
-To make thee that engaged +
-Ruin a cannibal +
-</​code>​ +
- +
-Ausgangstext-Reime:​ Bob Dylan;  +
-Ausgangstext-Zeile:​ Bibel;  +
-Reimschema: abab +
-<​code>​ +
-God and they wanted recruits +
-Be cut down from a just showed +
-For we will plant pleasant fruits +
-Generation to explode +
- +
-Hundred and captains and locked +
-Many people from the cash +
-Holy and simon peter knocked +
-The day and I was a flash +
- +
-</​code>​ +
- +
-Ausgangstext-Reime:​ Bob Dylan;  +
-Ausgangstext-Zeile:​ Bibel;  +
-Reimschema: abab +
-<​code>​ +
-Page of a smile his wonders +
-But the American towns +
-My hand there’s seven thunders +
-All loaded and twenty pounds +
- +
-In a jail high they removed +
-Watered down that thou hast striven +
-Valerie say you say to avoid +
-To the sky with fate driven +
-</​code>​+
  
-Ausgangstext-Reime:​ Eminem; ​ 
-Ausgangstext-Zeile:​ Moby Dick;  
-Reimschema: abba 
-<​code>​ 
-No means of the trigger 
-Sudden grunt of one dense crowd 
-Of view of those whose loud 
-Round the crazy nigger 
  
-He placed upon first broke 
-The oriental waters 
-Extremities of the daughters 
-Fishery spain our smoke 
-</​code>​ 
 ==== Quellen ==== ==== Quellen ====
-n-grams bzw. Markov-Ketten:​ 
   *{{http://​shiffman.net/​teaching/​a2z/​generate/#​ngrams|Daniel Shiffmans Seite}}   *{{http://​shiffman.net/​teaching/​a2z/​generate/#​ngrams|Daniel Shiffmans Seite}}
   *http://​www.decontextualize.com/​teaching/​rwet/​n-grams-and-markov-chains   *http://​www.decontextualize.com/​teaching/​rwet/​n-grams-and-markov-chains
ss15/text_rein_-_gedicht_raus.1441454813.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)