问题标签 [metaphone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5024 浏览

mysql - 为什么这个 MySQL 双变音功能不能正常工作?

我只是在学习 Metaphone 和 Double Metaphone 搜索算法,我有几个问题。根据 Metaphone Wiki 页面,我找到了几个实现的来源,特别是 MySQL 实现。我想用我的测试数据库对其进行测试,所以我首先导入了在这里找到的 metaphone.sql 文件(包含双 metaphone 函数)

现在,我有一个国家表,在“名称”列中有所有国家/地区的列表,例如“阿富汗”、“阿尔巴尼亚”、“阿尔及利亚”等。所以,首先,我想实际创建一个新的表中的列来存储每个国家的双变音字串。我运行了以下代码:

一切正常。阿富汗的变音位字符串是 'AFKNSTN',阿尔巴尼亚的是 'ALPN',阿尔及利亚的是 'ALKR;ALJR' 等等。“真棒,”我想。

但是,当我尝试查询该表时,我没有得到任何结果。根据 metaphone.sql 的作者,我遵循以下 SQL 语句的语法:

因此,我将此代码更改为以下内容:

当然,我将“@search”更改为我正在寻找的任何搜索词,但在每个 SQL 查询之后我得到 0 个结果。

谁能解释这个问题?我错过了一些重要的东西,还是我只是误解了 Metaphone 算法?

谢谢!

0 投票
6 回答
16336 浏览

spell-checking - Metaphone 3 算法是什么?

我想自己编写 Metaphone 3 算法。有说明吗?我知道源代码可以出售,但这不是我想要的。

0 投票
1 回答
479 浏览

php - 葡萄牙语的本地化(双)变音位 (pt_PT)

我想看看两个非英语字符串在语音上有多相似,AFAIK soundexmetaphone实现仅适用于基于英语的字符串,例如coraçãocorassão在葡萄牙语中听起来完全一样,但metaphone()返回KRandKRS。其他音素也会发生同样的事情,chitaxita返回XTandST,但它们听起来是一样的。

我也尝试过这个Double Metaphone 实现演示),但结果完全相同。

那么,是否有任何替代算法适用于葡萄牙语单词?我在另一个问题中读过关于 Lucene 的内容,但我以前从未使用过它,我不确定它是如何工作的或如何使用它。

如果没有,有谁知道我需要收集什么样的数据来开发类似变音位的算法?

0 投票
3 回答
3665 浏览

java - 使用 java 的 metaphone 3 实现

有谁知道在哪里可以找到与 Java 匹配的 Metaphone 3 的代码(不是商业内容)?尽管 apache 已经实现了 Metaphone 1.2(请参阅这个站点:Apache Metaphone 1.2 Implementation)。但它没有实现 Metaphone 3。任何帮助对我来说都是巨大的,谢谢。

0 投票
1 回答
8503 浏览

machine-learning - metaphone 与 soundex 与 NYSIIS

我正在尝试提出一个隐式拼写检查器,它将使用输入单词到某种更通用的语音表示的映射来解释可能发生的拼写错误,基本上是一个搜索栏,它会自动在一定程度上更正你的拼写. 我一直在研究的两件事是 metaphone、nysiis 和 soundex,但我真的不知道哪个更适合这个应用程序。

我希望有更多的匹配而不是更少的匹配,并且我希望匹配更加通用,因此我正在考虑使用 soundex,这似乎是比原始变音位更近似的映射,但我真的不知道模糊性的差异有多大。我知道 nysiis 与 soundex 非常相似,但我不知道它们有多相似,或者 nysiis 与 metaphone 相比如何。

我也在寻找最快执行的解决方案。我知道这些语音映射器通常很快,但我不确定哪个会最快,考虑到我希望能够在不增加搜索时间的情况下检查拼写,速度是一个考虑因素。想法?

0 投票
2 回答
3131 浏览

sql - 用于查询 MSSQL 的 SQL 与名/姓组合的双变位符

我正在使用 Double-Metaphone 在我的数据库中进行模糊搜索。我有一个姓名表,名字和姓氏都已经创建了双变位词条目(并通过触发器更新)。在我的应用程序中,我允许用户按姓氏和/或名字进行搜索。

在处理姓氏和名字时,查询数据库以从双变位索引中获得最佳结果的最佳方法是什么?仅基于姓氏进行查询很容易 - 生成 DM 标签并查询数据库。在第一个和最后一个查询时,我想进行一些微调。

数据库布局类似于以下内容:

申请:[姓] [名]

用户只输入姓氏,或姓氏+ [名字首字母,名字,名字的一部分]的组合。

如果我传入“J”作为名字 - 我想要所有匹配“J%”的名称条目。

如果我将“JO”作为名字传递 - 我想要所有匹配“JO%”的名称条目。

如果我传入“JOHN”或“JOHNATHAN”作为名字 - 我想使用 DM

或者也可能是“JOHN%”?

对于名字,我真的很愿意接受这里的建议。我希望结果尽可能好,并返回用户想要的。

查询数据库中姓氏+任何名字组合的最佳方法是什么?这是我到目前为止所获得的样本......我对结果并不完全兴奋:

我试图做的是考虑名字的不同变化。然而,我的结果并不是我想要的。

我已经能够在 SQL/C# 等中找到很多 Double Metaphone 的实现,用于 /generating/ Double-Metaphone 值,但是一旦有了这些值,就没有关于如何有效地实际查询数据库的信息。

概括:

当我同时按姓氏和名字搜索时——我想在数据库中查询双变位词匹配只在姓氏上,但是当名字也被传入时,我希望有很大的灵活性..第一个首字母?听上去像 ?等等。我愿意接受建议和 SQL 示例!

更新 1: 当我说我对结果不满意时.. 我的意思是我不确定如何制定查询的 Firstname 部分,以最大化结果。如果我搜索“WILL” - 应该返回什么结果?WILLIAM, WILL, WILBERT .. 但不是 WALKER - 虽然我在这里有什么,WALKER 会被退回,因为 WILL -> FL 和 WALKER 是 [FLKR] 但 WILLIAM 是 [FLM]。如果我只做 DM = DM,那么我什至不会返回 WILLIAM,这就是为什么我首先要做一个 LIKE,如果 DM 长度小于 4。

基本上,我想知道是否有其他人遇到过这个问题,看看其他人提出了什么解决方案。

仅第一个首字母 - 应显示以该首字母开头的所有名字 - 这是我不确定的地方:部分名称 - 所有名字都应该以部分开头吗?[你怎么知道它是否只是一个部分名称?!] 全名 - 应该使用 DM 吗?

0 投票
1 回答
2465 浏览

java - 具有自定义异常单词匹配的 Android 上的 Speech to Text

我希望能够使用 Android 的 Speech-To-Text 引擎来识别句子中各种不寻常的单词。

举个例子,“脑电图”这个词来自 STT 作为“电子供应图”。当我使用 Soundex 或 Metaphone 将所说的内容与硬编码值进行比较时,该值似乎永远不会匹配或随机匹配。如果我使用阈值(例如,Math.abs(str1.compareTo(str2)) <= 1),那么匹配会变得非常松散,几乎任何东西都会匹配。

本质上,我想做的类似于通过背诵报价从报价数据库中查找报价。问题似乎更多地在于 Google 的 Speech-To-Text 引擎使用的有限词集。

有任何想法吗?

0 投票
1 回答
436 浏览

php - php中字典数据库中单词搜索的metaphone的准确性

我要实现你的意思是我的应用程序在 php.ini 中的功能。数据库中的单词被当作字典。我认为使用变音位可以比 levenshtein、similer_text、soundex 等更准确地找到类似的词。任何人都可以建议变音位的准确性。

提前致谢。

0 投票
1 回答
628 浏览

java - 如何将 Metaphone 集成到 java-lucene 中的拼写检查程序?

在浏览时,我想出了一个在 lucene 中的拼写检查程序。我有兴趣从 tangentum 添加 phonetix 附加组件(特别是 metaphone)。有没有办法可以将变音器集成到我的程序中?如何整合它?

0 投票
1 回答
4197 浏览

mysql - Mysql 等价于 php metaphone 和 soundex

我正在开发一个应用程序,在该应用程序中获取用户当前正在播放的歌曲标题,我们在 mysql 数据库中查看还有谁在播放类似的歌曲。因为同一首歌曲可能在每个人的手机上都有许多不同的标题,我们需要一种方法来有效地找到尽可能接近的结果。

我们现在使用的过程从表中获取所有歌曲,然后执行一次 foreach 并将结果集中的每个条目与用户的歌曲进行比较。这是我们使用的函数的一部分:

========================================

这里有 2 个自定义函数:

但我知道这是一种非常糟糕的做法。如果数据库中有大量条目,可能需要永远一一比较它们。

谁能告诉我这里应该遵循的正确方法。

谢谢卡拉姆