File size: 2,081 Bytes
e0171fd 24d2316 e0171fd 24d2316 e0171fd c14d215 24d2316 c14d215 e0171fd c14d215 e0171fd 24d2316 c14d215 e0171fd 24d2316 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import pronouncing
import string
import copy
import gradio as gr
CONSONANTS = set(string.ascii_uppercase) - set('AEIOU')
def get_phones(word):
phones_for_word = pronouncing.phones_for_word(word)
if not phones_for_word:
return None
phones = phones_for_word[0].split()
return phones
def _get_rhyming_tail(phones, syllable_count=2):
vowels = [phone for phone in phones if phone[0] in 'AEIOU']
if len(vowels) < syllable_count:
return None # Not enough syllables for a multisyllabic rhyme
return phones[-syllable_count * 2:]
def get_multisyllabic_rhymes(phones, syllable_count=2):
rhyming_tail = _get_rhyming_tail(phones, syllable_count)
if not rhyming_tail:
return []
rhyming_tail_str = " ".join(rhyming_tail)
return pronouncing.search(rhyming_tail_str + "$")
def find_rhymes_for_words(words, syllable_count=2):
# Split words by spaces
words = words.split()
results = {}
for word in words:
phones = get_phones(word)
if phones is None:
results[word] = 'Not recognized'
continue
multisyllabic_rhymes = get_multisyllabic_rhymes(phones, syllable_count)
results[word] = multisyllabic_rhymes if multisyllabic_rhymes else "No multisyllabic rhymes found"
# Format results as a string
result_str = ""
for word, rhymes in results.items():
if isinstance(rhymes, list):
result_str += f"{word.capitalize()} ({syllable_count} syllables): " + ", ".join(rhymes) + "\n\n"
else:
result_str += f"{word.capitalize()}: {rhymes}\n\n"
return result_str
# Gradio interface
iface = gr.Interface(
fn=lambda words, syllables: find_rhymes_for_words(words, syllables),
inputs=[
gr.inputs.Textbox(label="Enter words (space-separated)"),
gr.inputs.Slider(1, 3, step=1, label="Number of Syllables")
],
outputs="text",
description="Enter multiple words separated by spaces to find multisyllabic rhymes."
)
if __name__ == "__main__":
iface.launch()
|