我想自己编写Metaphone 3算法代码。有描述吗?我知道源代码可以出售,但这不是我想要的。
答案 0 :(得分:12)
由于作者(劳伦斯飞利浦)决定将算法本身商业化,因此您很可能找不到描述。要问的好地方是邮件列表:https://lists.sourceforge.net/lists/listinfo/aspell-metaphone
但您也可以查看源代码(即代码注释)以了解算法的工作原理: http://code.google.com/p/google-refine/source/browse/trunk/main/src/com/google/refine/clustering/binning/Metaphone3.java?r=2029
答案 1 :(得分:10)
来自维基百科,Metaphone algorithm是
Metaphone是一种语音算法,是一种发布于1990年的算法,用于通过英语发音索引单词。它通过使用有关英语拼写和发音中的变化和不一致的信息从根本上改进Soundex算法,以产生更准确的编码,这可以更好地匹配听起来相似的单词和名称[...]
Metaphone 3具体
[...]对于英语单词,美国人熟悉的非英语单词,以及在美国常见的名字和姓氏,根据现代工程标准针对准备好正确编码的测试工具。
算法的overview是:
Metaphone算法首先从正在处理的单词中删除非英文字母和字符。接下来,除非单词以初始元音开头,否则所有元音也被丢弃,在这种情况下,除了初始元音之外的所有元音都被丢弃。最后,所有组成部分和组成部分都映射到他们的Metaphone代码。将辅音及其组合分组然后映射到变音码的规则相当复杂;有关这些转换的完整列表,请查看源代码部分中的注释。
现在,转到真正的问题:
如果您对Metaphone 3算法的细节感兴趣,我认为您运气不好(没有购买源代码,了解它并自行重新创建):的全部内容不制作算法(你可以购买的源是一个实例)public是你无法在不付费给开发工作的情况下重新创建它(提供你正在寻找的“精确算法”等同于提供实际的代码本身)。考虑上面的引用:算法的开发涉及“编码的测试工具”。除非您碰巧拥有此类测试工具或能够创建一个,否则您将无法复制该算法。
另一方面,前两个迭代(Metaphone和Double Metaphone)的实现是免费提供的(上面的Wikipedia链接包含一系列指向各种语言的实现的链接),意味着你有一个很好的起点来理解算法的确切含义,然后根据你的需要改进它(例如通过创建和使用适当的测试工具)。
答案 2 :(得分:3)
@Bo链接现在指的是(现在是defucnt)项目的完整源代码。
因此,这是带有Metaphone 3源代码直接链接的新链接 https://searchcode.com/codesearch/view/2366000/
劳伦斯飞利浦
*
* Metaphone 3旨在返回近似语音键(和备用语音键)
*适当的近似语音密钥)对于英语应该是相同的
*在美国熟悉的单词和大多数名字,发音类似。
*键值不旨在成为完全语音,甚至是音素,
*该词的表示。这是因为有一定程度的“模糊性”
*被证明有助于补偿发音的变化,以及
*听错发音。例如,虽然美国人通常不知道它,
*字母's'通常在诸如“声音”之类的单词结尾处发音为'z'。
*
*编码的“近似”方面根据以下规则实施:
*
*(1)所有元音都编码为相同的值 - 'A'。如果参数encodeVowels
*设置为false,只有初始元音将被编码。如果设置了encodeVowels
*为true,'A'将在单词中所有正常元音的位置进行编码
*发音。 'W'和'Y'被视为元音。虽然存在差异
*'W'和'Y'在不同情况下的发音导致他们的存在
*出于此目的,在某些情况下被分类为元音,在其他情况下被分类为辅音
*他们将使用Soundex和Metaphone系列算法的“模糊”组件
*在这里总是被视为元音。
*
*(2)有声和无声辅音对被映射到相同的编码值。这个
*表示:
*'D'和'T' - > 'T'
*'B'和'P' - > 'P'
*'G'和'K' - > 'K'
*'Z'和'S' - > 'S'
*'V'和'F' - > 'F'
*
* - 除上述有声/无声规则外,'CH'和'SH' - > 'X','X'
*表示Metaphone 3编码中的“-SH-”和“-CH-”声音。
答案 3 :(得分:1)
实际上,Metaphone3是一种算法,其中包含许多非常特定的规则,这是一些测试用例分析的结果。因此,它不仅是一种纯算法,而且还具有额外的领域知识。为了获得这些知识和特定的规则,作者需要付出很大的努力。这就是为什么该算法不是开源的。
反正还有一个开源的选择:Double Metaphone。 看到这里:https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/language/DoubleMetaphone.html
答案 4 :(得分:0)
这不是商业帖子,我与所有者没有关系,但值得一提的是,Metaphone3 的实现可作为其创建者 amporphics.com 的商业软件提供。看起来像是他的私人商店。这是一个 Java 应用程序,但我购买了 Python 版本并且运行良好。
Why Metaphone3? 页面说:
<块引用>拼写变化的一种常见解决方案是数据库方法。 已经完成了一些非常令人印象深刻的工作,积累了个人姓名 来自世界各地的变化。 (当然,我们总是很 当零售这些数据库的公司做广告时很高兴 他们还使用某些版本的 Metaphone 来提高他们的灵活性 :-) )
但是 - 这种方法存在一些问题:
然后它们根本不起作用。
Metaphone 3 是一种算法方法,可提供语音 您输入的任何内容的查找键。
Metaphone 3 旨在解决所有拼写变化 常见于英语单词中,名字和姓氏出现在 美国和欧洲,以及母语为非英语的词 发音对美国人来说很熟悉。它不在乎是什么样的 您尝试匹配的单词。
就其价值而言,我们许可了该代码,因为它价格合理且易于使用。我还不能谈论性能。 PyPi 上有很好的替代品,但我目前找不到。