私は詩を持っていて、Pythonコードで、互いに韻を踏んでいる単語を出力するだけでいいのです。
これまでのところ、私は次のことができます。
wordpunct_tokenize()
を使用して詩文を分割しますcmudict.entries()
を使用して、要素を最後の単語とその発音として使用して、別のリストを生成します。私は次のステップで立ち往生しています。これらの発音をどのように一致させる必要がありますか?全体として、私の主な仕事は、与えられた2つの単語が韻を踏むかどうかを調べることです。韻を踏む場合はTrue
を返し、そうでない場合はFalse
を返します。
ここ 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)
ここで、inp
は単語であり、level
は韻がどのようにgoodあるべきかを意味します。
したがって、この関数を使用して、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)
Pronouncing
library はそのために素晴らしい仕事をします。ハッキングがなく、読み込みが速く、CMU Pronouncing Dictionaryに基づいているため、信頼性があります。
https://pypi.python.org/pypi/pronouncing
彼らから ドキュメント :
>>> import pronouncing
>>> pronouncing.rhymes("climbing")
['diming', 'liming', 'priming', 'rhyming', 'timing']
サウンデックスまたはダブルメタフォンを使用して、韻を踏んでいるかどうかを確認します。 NLTKはこれらを実装していないようですが、グーグルですばやく検索するといくつかの実装が見つかりました。