Найти рифму с помощью NLTK в Python
У меня есть стихотворение, и я хочу, чтобы код Python просто печатал те слова, которые рифмуются друг с другом.
До сих пор я могу:
- Разделите предложения стихотворения с помощью
wordpunct_tokenize()
- Очистите слова, удалив знаки препинания
- Сохраните последнее слово каждого предложения стихотворения в списке
- Сгенерируйте другой список, используя
cmudict.entries()
с элементами, такими как последние слова и их произношение.
Я застрял со следующим шагом. Как я могу попытаться сопоставить эти произношения? В общем, моя главная задача - выяснить, рифмуются ли два заданных слова или нет. Если рифма, верните True
, else False
.
Ответы
Ответ 1
Здесь Я нашел способ найти рифмы для данного слова, используя 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)
где imp
- это слово, а level
означает хороший рифма.
Итак, вы можете использовать эту функцию и проверить, есть ли 2 слова рифмы, вы можете просто проверить, есть ли в другом наборе разрешенных рифм:
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 )
Ответ 2
Pronouncing
library отлично справляется с этим. Не взламывать, быстро загружать и на основе словаря высказываний CMU, чтобы он был надежным.
https://pypi.python.org/pypi/pronouncing
Из документации:
>>> import pronouncing
>>> pronouncing.rhymes("climbing")
['diming', 'liming', 'priming', 'rhyming', 'timing']
Ответ 3
Используйте soundex или двойной метафон, чтобы узнать, риферируют ли они. NLTK, похоже, не реализует их, но быстрый поиск Google показал некоторые реализации.