【问题标题】:How can I generate a list of words that phonetically sound alike given one input word?如何在给定一个输入单词的情况下生成发音相似的单词列表?
【发布时间】:2012-02-01 21:04:06
【问题描述】:

当您在 Google 中拼错一个单词(例如“appples”)时,它会为您提供现在熟悉的“您的意思是:apples”建议。

排除 Google 根据搜索结果的相关性猜测您的意图的能力,我怎样才能开发出听起来相同的单词列表?

单词不必是英语,也不必存在。因此,例如,如果我输入“hole”,我会返回一个列表,其中包含以下单词:“whole”“hola”“whore”“role”“molar”等......

我猜网上可能有一些东西可以开发这个列表,但我找不到任何东西。如果没有站点并且可以使用 Perl 完成,是否有 CPAN 模块可以帮助我做到这一点?

【问题讨论】:

  • 如果你可以将单词分解成音素,那么它就会成为最常见的子串问题。不过,将单词分解成音素是一个非常困难的问题。

标签: perl words auto-generate phonetics


【解决方案1】:

如果您真的在寻找发音相同的单词,而不仅仅是搜索建议 - 您可以查看语音算法。 Soundex 和 Metaphone/Double Metaphone 是两个非常常见的,并且每个都有任何流行语言的实现。

这些算法将单词简化为表示其发音的“键”。如果你从一个词库开始并构建一个数据结构,将这些键映射到对它们求值的词——你可以取一个任意字符串,将其求值到它的“键”,然后查找其他求值相同的词键入您的数据结构(可能是列表或类似的哈希表)。

这并不完美,因为您需要找到大量的词库来为您的数据集播种,但它会起作用。

另一方面,如果您只是想要搜索建议/替代拼写,则可以使用更简单的方法。

希望对您有所帮助。

【讨论】:

  • 感谢 Soundex 的领导...我实际上发现它是 Oracle 和 PHP 以及可能许多其他语言的功能。我不明白它返回的数据。请参阅此处的示例techonthenet.com/oracle/functions/soundex.php“apples”返回“A142”,“appplus”也返回“A142”。 “A142”是什么意思?
  • @CheeseConQueso 返回的字母和数字的组合不一定对自己有意义 - 算法所做的是将单词缩减为这些键,因此计算为相同键的两个单词具有类似的读音。这就是为什么为了使用语音算法执行您建议的操作,您必须构建一个可搜索的 key -> 数据存储(评估为该键的单词列表),因此当您获得“apples”时运行它通过您的算法 - 获取“A142”,然后在您的数据存储中搜索也评估为“A142”的单词。有帮助吗?
  • 哦...知道在哪里可以找到可以导入数据库表的 soundex 表吗?如果没有,我应该向谷歌提供什么样的关键字来查找更多信息?感谢您的帮助
  • 我不能 100% 确定这一点。当我们在工作中使用它时,我们找到了几个英语单词列表和词典,并构建了我们自己的映射
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-03-04
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多