答案1
我认为这相当复杂。它是自然语言编程的一个分支(而不是另一个 NLP,神经语言学)。您需要能够匹配“here”和“hear”——因此您需要分解元素,并将它们映射到语音等价物(h-“ere”和 h-“ere”)。有些拼写有变体语音(cough、plough、through)或更糟糕的同音异义词(the there、they're、their group),这些可能因地区而异(例如,在英国,garage、graph 和 glass 中的长或短“a”)。当您进行语音等价时,它们并不总是单数。
一旦你有了语音等价,你就可以使用各种启发式方法来最小化它们之间的差异。对于诗歌,你可能需要过度强调结尾的权重——押韵主要取决于词尾。你可能也希望诗歌采用头韵——悦耳的头韵可能需要不同的权重。
我会参加一门免费的在线大学 NLP 课程 - 目前有好几门。这些课程能更好地为解析语言的现代技术打下基础。:)
答案2
您可以在相同长度的字符串之间使用字符串比较,并允许一个(或两个)不匹配的字符。
不过,通过查看您的网站,我建议根据单词的语音表示来映射单词,然后对其进行搜索,将字符串视为字符数组,然后从后面开始进行比较。
在您的示例基础上构建:near -> \'nir\ pear -> \'per\ dear -> \'dir\ rear -> \'rir\ 或 \'rer\ here -> \'hir\
(此处我从 Merriam-Webster 在线词典中摘录了语音符号)
恐怕映射应该作为查找表来完成,并且无法编译,因为英语没有很强的发音规则......
无论如何,一旦你映射了你的单词,你就可以比较它们的最后一个音素:在这种情况下,你可能想要寻找以“ir \”结尾的单词(在这种情况下,这将排除“pear”)。
这种方法看起来效率不高:如果我可以使用一些磁盘空间,我会保存搜索以供将来参考:因此当第二次使用查找所有与“near”押韵的单词时,应用程序只会加载已保存的搜索 - 因为字典通常不会发展得太快。