如何根据一个输入词生成发音相似的单词列表?

3
当您在Google中拼错单词(例如“appples”),它会提供现在熟悉的“Did you mean: apples”建议来帮助您。

除了Google根据搜索结果的相关性猜测您的意图的能力外,我该如何制作一个听起来相同的单词列表?

这些单词不必是英语,也不必存在。 因此,例如,如果我输入“hole”,我将得到包括诸如“whole”、“hola”、“whore”、“role”、“molar”等单词的列表...

我猜可能有一些在线工具可以生成这个列表,但我找不到任何信息。 如果没有网站,如果可以使用Perl完成,请问是否有CPAN模块可以帮助我完成这项工作?


1
如果你能将单词分解成音素,那么它就变成了一个最常见子串的问题。然而,将单词分解成音素是一个非常困难的问题。 - Flexo
2个回答

5
如果您真正寻找听起来相同的单词,而不仅仅是搜索建议 - 您可以查看音标算法。Soundex和Metaphone / Double Metaphone是两个非常常见的算法,在任何流行语言中都有实现。
这些算法将单词缩减为表示其发音的“键”。如果您使用一个单词库开始并构建一个数据结构,将这些键映射到评估为它们的单词 - 您可以将任意字符串评估为其“键”,然后在您的数据结构中查找评估为相同键的其他单词(可能是列表的哈希表或类似物)。
这并不完美,因为您需要找到一个大型单词库来种子您的数据集,但它会起作用。
另一方面,如果您只想要搜索建议/备选拼写,那么有更简单的方法。
希望这有所帮助。

谢谢你提供Soundex的线索...我发现它是Oracle和PHP以及许多其他编程语言的函数。但我不理解它返回的数据。在这里可以看到一些例子:http://www.techonthenet.com/oracle/functions/soundex.php "apples" 返回 "A142",而 "applus" 也返回 "A142"。那么"A142"代表什么意思呢? - CheeseConQueso
1
@CheeseConQueso 返回的字母和数字组合本身并没有意义 - 算法的作用是将单词缩减为这些键,因此两个评估为相同键的单词具有类似的发音。这就是为什么要使用语音算法来实现你所建议的功能,必须构建一个可搜索的键值数据存储 -> (列表中的单词求其键的列表),这样当你得到 "苹果" 时,你会通过算法获得 "A142",然后在数据存储中搜索也评估为“ A142”的单词。这有帮助吗? - acoffman
哦...你有没有想过在哪里找到一个可以导入到我的数据库表中的soundex表?如果没有,我应该输入什么样的关键词来寻找更多信息呢?谢谢你的帮助。 - CheeseConQueso
这是我不太确定的事情。在工作中使用时,我们找到了几个英语单词列表和字典,并建立了自己的映射。 - acoffman

2

您可以从了解模块Text::Soundex开始。这是一种简单的算法,将单词映射到4字节代码。我很久以前从Sedgewick(即Knuth)那里得到了Soundex,用它生成更长的键(未截断),并建议进行0和1个字母替换的修正列表。我将其应用于人口普查和邮政数据的大型数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接