learner57 learner57 - 1 month ago 9x
Python Question

Find rhyme using NLTK in Python

I have a poem and I want the Python code to just print those words which are rhyming with each other.

So far I am able to:

  1. Break the poem sentences using

  2. Clean the words by removing the punctuation marks

  3. Store the last word of each sentence of the poem in a list

  4. Generate another list using
    with elements as those last words and their pronunciation.

I am stuck with the next step. How should I try to match those pronunciations? In all, my major task is to find out if two given words rhyme or not. If rhyme, then return
, else


Here I found a way to find rhymes to a given word using NLTK:

def rhyme(inp, level):
     entries = nltk.corpus.cmudict.entries()
     syllables = [(word, syl) for word, syl in entries if word == inp]
     rhymes = []
     for (word, syllable) in syllables:
             rhymes += [word for word, pron in entries if pron[-level:] == syllable[-level:]]
     return set(rhymes)

where imp is a word and level means how good the rhyme should be.

So you could use this function and to check if 2 words rhyme you could just check if one is in other's set of allowed rhymes:

def doTheyRhyme ( word1, word2 ):
  # first, we don't want to report 'glue' and 'unglue' as rhyming words
  # those kind of rhymes are LAME
  if word1.find ( word2 ) == len(word1) - len ( word2 ):
      return False
  if word2.find ( word1 ) == len ( word2 ) - len ( word1 ): 
      return False

  return word1 in rhyme ( word2, 1 )