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()