Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss15:protokolle

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
ss15/protokolle.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)