[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

意识到“也许”的对话版本吗? 以编程方式检测错误

你好。
我是Mandai,负责Wild 开发团队。

谈话中,说错话和误解是很常见的事情。
这取决于气氛和情况,但我不认为这是一件坏事,因为通常有一些元素可以让情况变得更轻松(尽管我可能清楚地记得错误)。

这次,我将介绍一些谷歌搜索中出现的算法,这些算法可能(或可能)可以实现“也许”。

 

目录

  1. 编辑距离
  2. 声学
  3. 变音位
  4. 其他相关文章

 

编辑距离

首先,编辑距离,量化字符之间的距离。

编辑距离 -根据

它是一种距离,显示两个字符串的差异程度。也称为编辑距离。

我们来看看小猫坐的距离,维基百科上也有介绍。

  1. 小猫
  2. 坐# k → s 替换
  3. 坐# e → i 替换
  4. 坐着#添加g

通过这三个步骤就可以从小猫转变为坐着,此时的编辑距离为3。
该操作次数被定义为字符之间的距离,并测量近似程度。

添加、删除、替换可以认为是对字符的操作,但由于替换可以认为是同时添加和插入的操作,所以也有观点认为替换的成本本来是2。
本例中的编辑距离为 5。

关于它有什么用处还存在一些疑问,但当我进一步阅读时,它似乎正在被应用于 DNA 研究。
确实,DNA是由四个字母AGCT的组合来表示的,所以粗略地说,Levenshtein距离可以用遗传紧密度来代替。

这个 Levenshtein 距离可以使用 PHP 轻松计算,并且有一个专用的标准函数。

echo levenshtein('kitten', 'sitting'); // 结果为 3 echo levenshtein('kitten', 'sitting', 1, 2, 1); // 如果替换成本为 2 // 结果为 5 echo levenshtein ('山田', '山口'); // 结果是 3


 嘎。好像不支持多字节字符。
由于我是在UTF8环境下执行的,所以汉字字符算作3个字节。因此,如果省略第二个参数及后续参数,则替换也算成本1,因此认为改变了3个字节。
让我们尝试插入另一个字符串,看看里面发生了什么。

echo bin2hex('mountain'); // e5b1b1 echo bin2hex('mouth'); // e58fa3 echo bin2hex('field'); // e794b0 echo bin2hex('bureau'); // e79480 'mouth' 和 lower 2只是数字不同 echo levenshtein('Yamada', 'Yamaguchi'); // 结果是 3 echo levenshtein('Yamada', 'Yamatsuke'); // 结果是 3

 
看起来多字节字符被识别为多字节字符,而不是按字节来查看,但是似乎最终转换的字符数是围绕strlen粗略检查的。

看起来实现起来还是比较容易的,而且我找到了一个有Python和Perl实现的页面,所以我就贴个链接吧。

编辑距离(Levenshtein 距离) - naoya 的 Hatena 日记

 

声学

Soundex 是一种与 Levenshtein 距离不同的算法,更容易检测到错误。
它似乎是专门为处理个人姓名而设计的。

维基百科没有任何日语文章,但有一个英文页面。 → Soundex - 维基百科

Soundex 分析您输入到称为 4 字符 soundex 键的字符串中的字符的发音。
我觉得无论字符串有多长都使用4个字符有点不合理......

PHP 也有一个标准函数,所以我想轻松执行它。
我准备了一些用片假名书写时相同的英语单词。

echo soundex('rock'); // 结果是 R200 echo soundex('lock'); // 结果是 L200 echo soundex('free'); // 结果是 F600 echo soundex('flea'); is F400 echo soundex('flee'); // 结果是 F400 echo soundex('aerosmith'); // 结果是 A625


 我根本不明白返回值,但我确实明白rock和lock之间的区别。
free和flea唯一的区别是第二个字母,flea和flee完全一样。

转换的详细规则惊人的多,所以衡量字符串的相似度(2)注重发音 |如果你参考Colorless Green Ideas中写的,如果结合soundex和Levenshtein distance,从发音的角度来看,似乎可以实现“也许”的功能。

Soundex也受到MySQL的支持,并提供了soundex函数。

MySQL :: MySQL 5.6 参考手册 :: 12.5 字符串函数 SOUNDEX(str)

MySQL 的 soundex 与 PHP 的输出略有不同,必须注意它不是固定为 4 个字符。

mysql> SELECT SOUNDEX('二次'); -> 'Q36324'


 soundex 函数不支持日语。
由于语言规范的原因,无法用同一个尺度来衡量,所以可能是自然的。

 

变音位

Metaphone 是由 Lawrence Philips 设计的一种算法,与 soundex 一样,它是一种根据发音输出称为 Metaphone 键的字符串的算法。
Soundex 通过按顺序查看字母来识别发音,但 Metaphone 已经定义了字母和发音的组合,并且似乎能够获得比 soundex 键更准确的数据。

变音位键仅由字母组成,不含元音。
变音位键由 16 个字符组成:“0BFHJKLMNPRSTWXY”。
0似乎代表th的音,似乎与单个的T和H区别开来。
作为例外,有一个规则,即仅当单词以元音开头时才添加元音,例如authentication。
另外,转换规则的组合比Soundex多很多,这就是为什么你可以获得比Soundex更准确的数据。

PHP 还有一个称为 Metaphone 的标准函数,所以让我们看一个示例。

echo metaphone('authentication'); // 结果是 A0NTKXN echo metaphone('supercalifragilisticexpialidocious'); // 著名的《欢乐满人间》 // 结果是 SPRKLFRJLSTSKSPLTSS

 
它们本质上与音标相似,它们将发音转换为字母,但音标用于正确发音,而变音位和 soundex 是发音中包含的声音的提取,因此您可以使用变音位键。光看单词就不知道如何发音。

通过获取多个单词的变音位键并测量 Levenshtein 距离,似乎可以获得比 soundex 更准确的近似程度。

与变音位相关的信息可以在这里找到: Lawrence Philips 的变音位算法(信息可能已过时,因为它有许多损坏的链接并且不再维护)。

还有一种称为双变音位算法的改进版本,它输出两种类型的键:主键和辅助键。
虽然处理字符串等基本规则似乎没有改变,但内部实现发生了很大变化,因此似乎无法比较变音位和双变音位之间的结果。

与双变音位相关的信息收集在PHP DoubleMetaPhone

由于 double metaphone 不是标准 PHP 函数,因此您需要从PECL::Package::doublemetaphone

 

联系

这是一个名为 Jazzy 的执行拼写检查的 Java API 的说明页面,开头有关于 soundex、metaphone 和 Levenshtein distance 的说明。
我很惊讶 soundex 拥有专利。

没有什么能比得上爵士乐

有些人使用这项技术研究了有趣的事情,所以我将发布他们的链接。
虽然是一篇研究论文,但内容比较坦白,易读。

西方音乐歌词自动生成空句的研究

 
就是这样。

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
975
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。