lab_autopoetry/poetry.py

69 lines
2.1 KiB
Python

from vocabulary import (
get_meter,
random_word,
rhyming_pair,
)
from grammar import (
make_indefinite,
noun_phrase,
past_tense_transitive,
pluralize,
verb_phrase,
verb_phrase_transitive,
)
from grammatical_types import (
Adjective,
Adverb,
Noun,
Meter,
Poem,
Pronoun,
TransitiveVerb,
)
def love_poem():
"() -> Poem"
poem = Poem()
poem.append("roses are red")
poem.append("violets are blue")
poem.append(pluralize(random_word(Noun)) + " are " + random_word(Adjective))
poem.append("and so are you.")
return poem
def couplet():
"() -> Poem"
poem = Poem()
first_noun, second_noun = rhyming_pair(Noun, Noun, meter=Meter("1"))
first_adjective = random_word(Adjective, meter=Meter("100"))
first_np = make_indefinite(noun_phrase(first_adjective, first_noun))
second_adjective = random_word(Adjective, meter=Meter("10"))
second_np = make_indefinite(noun_phrase(second_adjective, second_noun))
poem.append("I used to have " + first_np)
poem.append("Until I swapped it for " + second_np + ".")
return poem
def limerick(name, subjective_pronoun, possessive_pronoun):
"""str, str, str -> Poem
For example, `limerick("Chris", "he", "his")`.
"""
noun0, noun1 = random_word(Noun, count=2, rhymes_with=name)
adjective = random_word(Adjective, meter=Meter("100"))
adverb = random_word(Adverb, meter=Meter("10"))
verb0, verb1 = rhyming_pair(TransitiveVerb, TransitiveVerb, meter=Meter("10"))
object_pronoun = Pronoun("it")
np0 = make_indefinite(noun_phrase(adjective, noun0))
np1 = make_indefinite(noun1)
verb0 = past_tense_transitive(verb0)
verb1 = past_tense_transitive(verb1)
vp0 = verb_phrase(adverb, verb_phrase_transitive(verb0, object_pronoun))
vp1 = verb_phrase_transitive(verb1, object_pronoun)
poem = Poem()
poem.append("there once was a person named " + name)
poem.append("who owned " + np0 + ".")
poem.append(subjective_pronoun + " " + vp0 + ",")
poem.append("and then " + subjective_pronoun + " " + vp1 + ",")
poem.append("until it turned into " + np1 + ".")
return poem