################################################################################### ################################################################################### #Rhymatron - A first stab at a generative script that finds rhyming words #concept and code by Noah King, 2/18/2010 #for Reading and Writing Electronic Text - Spring 2010 #Professor Adam Parrish ################################################################################### ################################################################################### import sys import random lines = list() punct = list() words = set() wordsTemp = list() wordsNull = set() rhymeWords = list() xchars = [".", ",", ";", ":", "!", "?", "'", '"', "(", ")", "[", "]", "*"] ################################################################################### ################################################################################### #Section 1 - Parse Frost Poem ################################################################################### ################################################################################### for line in open('frost.txt'): line = line.strip() lines.append(line.split(" ")) for l in range(0,16): if "." in lines[l][-1]: lines[l][-1] = lines[l][-1][0:-1] punct.append(".") elif "," in lines[l][-1]: lines[l][-1] = lines[l][-1][0:-1] punct.append(",") elif ";" in lines[l][-1]: lines[l][-1] = lines[l][-1][0:-1] punct.append(";") else: punct.append("") ################################################################################### ################################################################################### #Section 2 - Parse Source Text ################################################################################### ################################################################################### for line in sys.stdin: line = line.strip() line_words = line.split(" ") for word in line_words: words.add(word) for word in words: if "-" in word or "_" in word or ".." in word: wordsNull.add(word) for word in wordsNull: words.remove(word) for word in words: wordsTemp.append(word) total = len(wordsTemp) for i in range(0,total): for k in range(0,5): for j in range(0,13): if len(wordsTemp[i]) > 0: if xchars[j] in wordsTemp[i][-1]: wordsTemp[i] = wordsTemp[i][0:-1] for k in range(0,5): for j in range(0,13): if len(wordsTemp[i]) > 0: if xchars[j] in wordsTemp[i][0]: wordsTemp[i] = wordsTemp[i][1:] words.clear() for word in wordsTemp: words.add(word.lower()) ################################################################################### ################################################################################### #Section 3 - Find Rhyming Words ################################################################################### ################################################################################### rhyme1 = list() rhyme2 = list() rhyme3 = list() rhyme4 = list() rhymeWords = [rhyme1, rhyme2, rhyme3, rhyme4] for word in words: if "ow" in word[-2:] or "ough" in word[-4:]: rhymeWords[0].append(word) if "ear" in word[-3:] or "ere" in word[-3:]: rhymeWords[1].append(word) if "ake" in word[-3:]: rhymeWords[2].append(word) if "eep" in word[-3:]: rhymeWords[3].append(word) ################################################################################### ################################################################################### #Section 4 - Rewrite the original text with new rhyming words ################################################################################### ################################################################################### #for j in range(1, len(lines[0])-1): # lines[0][0] += " " + lines[0][j] #random.shuffle(rhymeWords[0]) #lines[0][0] += " " + rhymeWords[0][0] #lines[0][0] += punct[0] #print lines[0][0] rhymeList = [0,0,1,0,1,1,2,1,2,2,3,2,3,3,3] for i in range(0,15): k = rhymeList[i] for j in range(1, len(lines[i])-1): lines[i][0] += " " + lines[i][j] random.shuffle(rhymeWords[k]) lines[i][0] += " " + rhymeWords[k][0] rhymeWords[k].remove(rhymeWords[k][0]) lines[i][0] += punct[0] print lines[i][0] if i==14: print lines[i][0] ################################################################################### ################################################################################### # Last Section - Debug ################################################################################### ################################################################################### #print lines #print punct #print words #print wordsTemp #print wordsNull #print rhymeWords