擅长:python、mysql、java
<p>你得从头开始比较。有一些特殊的算法和数据结构可以帮助处理像您这样的情况—您可以检查<a href="https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm" rel="nofollow noreferrer">Aho-Corasick algorithm</a>。在</p>
<p>但在简单的情况下,你需要将这些单词按相反的顺序进行比较,并找到高于某个阈值的常见子串,将这些单词称为押韵,例如:</p>
<pre><code>def if_rhymes(word1, word2):
r1 = reverse(rhymes[word2])
r2 = reverse(rhymes[word1])
the_same = 0
for sound1, sound2 in zip(r1, r2):
if sound1 == sound2:
the_same += 1
else:
break
if the_same < threshold:
return 'no rhyme' # or False if you want
else:
return 'rhymes' # or True
</code></pre>
<p><strong>算法的作用</strong></p>
<ol>
<li>它从您从文件中填充的<code>rhymes</code>字典中获取声音列表(为了清晰起见,我建议在押韵测试函数之外进行)。在</li>
<li>然后它反转两个单词的发音列表中元素的顺序,并使用<code>zip</code>创建一个成对(或元组)列表。在</li>
<li>对每个元组(单词的发音顺序相反)进行比较。我们数一数相同的声音,不再从后面比较第一对不同的声音。在</li>
<li>根据阈值(您可能希望用变量替换实际值),您可以将给定的一对单词视为押韵。在</li>
</ol>