From f4101c76e7e185011fc889c85e0e8a72ecdcff87 Mon Sep 17 00:00:00 2001 From: Leonora Tindall Date: Thu, 6 Mar 2025 17:01:57 -0600 Subject: [PATCH] Comments --- gen_rhymes.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gen_rhymes.py b/gen_rhymes.py index f3b5aef..ce9890d 100644 --- a/gen_rhymes.py +++ b/gen_rhymes.py @@ -4,7 +4,7 @@ import sys as trans from pprint import pp # We're taking advantage of the fact that toki pona pronounciation is very -# orderly. We can determine rhymes entirely lexicographically. +# orderly. We can determine rhymes entirely lexically. VOWELS = ["a", "e", "i", "o", "u"] words = [] @@ -12,6 +12,8 @@ rhyme_classes = {} rhymes = {} def matching_substring_r(str1, str2): + """Return the longest matching substring of two strings which touches the + end of both.""" shortest_len = min(len(str1), len(str2)) if shortest_len == 0: return "" @@ -26,9 +28,12 @@ def matching_substring_r(str1, str2): current_index -= 1 return current_match +# Need a dict file to work from if not len(trans.argv) == 2: print("Please provide a single dictionary file to work from.") + trans.exit(1) +# Read words, one per line with open(trans.argv[1]) as dictionary: for line in dictionary.readlines(): word = line.rstrip("\n") @@ -40,21 +45,29 @@ for word in words: rhymes[word] = [] for possible_rhyme in words: + # lili doesn't rhyme with lili if word == possible_rhyme: continue + + # find the rhyme class represented by this relationship, + # which is a nonempty substring touching the end of the words + # which starts with a vowel rhyme_class = matching_substring_r(word, possible_rhyme) while len(rhyme_class) > 1 and\ rhyme_class[0] not in VOWELS: rhyme_class = rhyme_class[1:] + # i don't care that lili rhymes with monsi, that's too much if not len(rhyme_class) > 1: continue + # we know that these two rhyme rhymes[word].append(possible_rhyme) if rhyme_class not in rhyme_classes: rhyme_classes[rhyme_class] = [] + # we add only this word; the other will be added in its own outer loop if word not in rhyme_classes[rhyme_class]: rhyme_classes[rhyme_class].append(word)