Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss15:text_rein_-_gedicht_raus

Dies ist eine alte Version des Dokuments!


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. Hier kommt ihr zu:

  • Details zum Code und dem Code selbst: Der Code
  • Protokollen der Arbeit: Protokolle
  • Schlussfolgerungen unserer Arbeit, sowie einigen Beispielen: Ergebnisse

Ziele

Dem großen Ziel der Gedichtgenerierung sind folgende Ziele untergeordnet:

  • Einlesen der Texte (erledigt)
  • Variieren der Text (erledigt)
  • Reimerkennung möglichst genau machen (erledigt)
  • Zusammensetzen der Reimpaare durch Zufall (erledigt)
  • Generierung der Zeilen möglichst passend (erledigt)
  • Variieren des Aufbaus und des Reimschemas (erledigt)
  • Schlagworte zur Generierung des Gedichts (nicht erledigt)
  • Überarbeiten der Wahrscheinlichkeitsspeicherung der n-Gramms zur Verschnellerung der Laufzeit (nicht erledigt)

Protokolle

28.05.15

  • Klären der Projektziele
  • Einigung auf englische Texte
  • 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:
# 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

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:
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"]

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:
#!/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"]

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:
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
  • 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

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

Eingabetexte: Bob Dylan; Reimschema: aabb

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

Eingabetexte: Bob Dylan; Reimschema: aabb

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

Eingabetexte: Bob Dylan; Reimschema: aabb

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

Eingabetexte: Bob Dylan; Reimschema: aabb

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

Ausgangstext-Reime: Bob Dylan; Ausgangstext-Zeile: Bibel; Reimschema: abab

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

Ausgangstext-Reime: Bob Dylan; Ausgangstext-Zeile: Bibel; Reimschema: abab

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

Ausgangstext-Reime: Eminem; Ausgangstext-Zeile: Bibel; Reimschema: aabb

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

Ausgangstext-Reime: Bibel; Ausgangstext-Zeile: Eminem; Reimschema: abab

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

Ausgangstext-Reime: Eminem; Ausgangstext-Zeile: Bibel; ; Reimschema: abab

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

Ausgangstext-Reime: Eminem; Ausgangstext-Zeile: Bibel; Reimschema: abab

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

Ausgangstext-Reime: Eminem; Ausgangstext-Zeile: Bibel; Reimschema: abab

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

Ausgangstext-Reime: Bob Dylan; Ausgangstext-Zeile: Bibel; Reimschema: abab

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

Ausgangstext-Reime: Bob Dylan; Ausgangstext-Zeile: Bibel; Reimschema: abab

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

Ausgangstext-Reime: Eminem; Ausgangstext-Zeile: Moby Dick; Reimschema: abba

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

Quellen

Teilnehmer

Hannah Hilliger, Niels Vogt

ss15/text_rein_-_gedicht_raus.1441454565.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)