web-dev-qa-db-ja.com

Python)でNLTKを使用して韻を見つける

私は詩を持っていて、Pythonコードで、互いに韻を踏んでいる単語を出力するだけでいいのです。

これまでのところ、私は次のことができます。

  1. wordpunct_tokenize()を使用して詩文を分割します
  2. 句読点を削除して単語をきれいにします
  3. 詩の各文の最後の単語をリストに保存します
  4. cmudict.entries()を使用して、要素を最後の単語とその発音として使用して、別のリストを生成します。

私は次のステップで立ち往生しています。これらの発音をどのように一致させる必要がありますか?全体として、私の主な仕事は、与えられた2つの単語が韻を踏むかどうかを調べることです。韻を踏む場合はTrueを返し、そうでない場合はFalseを返します。

19
learner57

ここ 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)
9
kender

Pronouncing library はそのために素晴らしい仕事をします。ハッキングがなく、読み込みが速く、CMU Pronouncing Dictionaryに基づいているため、信頼性があります。

https://pypi.python.org/pypi/pronouncing

彼らから ドキュメント

>>> import pronouncing
>>> pronouncing.rhymes("climbing")
['diming', 'liming', 'priming', 'rhyming', 'timing']
12
JeffThompson

サウンデックスまたはダブルメタフォンを使用して、韻を踏んでいるかどうかを確認します。 NLTKはこれらを実装していないようですが、グーグルですばやく検索するといくつかの実装が見つかりました。

2
Christian Alis