Poetry generators

From XPUB & Lens-Based wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Prototyping exercise

For: May 17, 2011

Core

use: strings
split, for, len, strings and the [] syntax

Create a poetry generator that filters a text to show only the first letters of each words but for the rest preserving the layout (ie use spaces instead of the original characters).

A loop like the following may be helpful to start:

f = open("myfile.txt")
for line in f:
    for word in line.split():
        print word

Remember, if you are using non-ASCII characters to use codecs.open:

import codecs
f = codecs.open("myfile.txt", encoding="utf-8")

some other code to try:

print word,
print len(word)
print word[1]


Advanced

Create a poetry generator that implements a simple "markov chain" (ie a text can be read, and then new texts generated by making random choices of words known to follow a given word.)

use: strings, lists, dictionaries

(Hint: Remember that while a dictionary is (typically) indexed by words, the associated value can be any kind of Python object. Use a single dictionary to store the "next words" of a given word (ie a dictionary that maps a word to a list of next words, ie:

nextwords = {}
## CODE TO READ A TEXT INTO THE DICTIONARY
##
## Sample Text: "He saw the cat before he saw the potato."
> nextwords['the']
['cat', 'potato']
> nextwords['he']
['saw', 'saw']
> nextwords['before']
['he']