惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
H
Heimdal Security Blog
W
WeLiveSecurity
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
The Last Watchdog
The Last Watchdog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
D
DataBreaches.Net
I
Intezer
Webroot Blog
Webroot Blog
C
Cisco Blogs
AWS News Blog
AWS News Blog
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
罗磊的独立博客
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
宝玉的分享
宝玉的分享
博客园 - 叶小钗
PCI Perspectives
PCI Perspectives
D
Docker
Scott Helme
Scott Helme
NISL@THU
NISL@THU
J
Java Code Geeks
B
Blog RSS Feed
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
AI
AI
美团技术团队
Cloudbric
Cloudbric
月光博客
月光博客
P
Proofpoint News Feed
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - DotCat

幽默的David Solomon MSDN上ReportViewer的两个代码下载地址 .NET threading in C# Training Highlights sharing Converting RDL and RDLC Files VS打SP1后reportviewer用custom assembly的变化 Meet 牛人 @ April: Jeffrey Richter & David Solomon 当你聊天你会想起谁--Vista Sidebar Gadget DIY 哈,IE7!--dudu的CNBlogs DotText 1.0 Beta 2中FreeTextBox对IE7的不兼容性 CCS bug之8: 有关设置精华帖的操作在帖子的操作历史里浏览出错 CCS bug之7: 设置精华帖后在精华区不能看到 [CodeProject每日一荐]实现Double Metaphone语音匹配算法[三,四] VBScript调用COM;存储过程实现及高级话题 MSN和Windows Live Messenger机器人大赛 [CodeProject每日一荐]实现Double Metaphone语音匹配算法[二]:Visual Basic的COM实现和关系数据库解决方案 [CodeProject每日一荐] 基于xml的在线选择题小测试(调查问卷) 解决问题: .Net异常 Method not found: Void System.Web.UI.WebControls.BaseDataList.set_Caption(System.String). 解决问题: sql server 2000 企业管理器打不开了 推荐解除文件锁定软件: unlocker CuteChat3.0 (for CommunityServer2.0) 发布了 CommunityServer 2.1 的消息
[CodeProject每日一荐]实现Double Metaphone语音匹配算法[一]:介绍与C++实现
DotCat · 2006-06-02 · via 博客园 - DotCat

Implement Phonetic ("Sounds-like") Name Searches with Double Metaphone Part I: Introduction & C++ Implementation By Adam Nelson 
最大的特色是作者用C++, COM (Visual Basic等), 脚本 (VBScript, JScript, ASP), SQL, and .NET (C#, VB.NET 和其他.NET 语言)分别实现了经典Double Metaphone算法.还提供了Lawrence Phillips原有的实现源码(译者:文中最上面的链接已失效,可在此找到ftp://ftp.cuj.com/pub/2000/cujjun2000.zip).

[摘要]
用语音搜索信息时,有时候不总是能精确匹配,这时需要匹配发音近似的词.本系列讨论Lawrence Phillips的Double Metaphone语音匹配算法,来实现这一点,可在其他很多解决方案中应用

[介绍]
做语音匹配算法的很多,最古老,也许同时是最有名的是20世纪早期的专利: 用于打孔机的Soundex 算法, Soundex根据简单的计算产生一个key,用来表达原始单词(至少是单词的第一部分).Soundex简单而快速,但效果也比较差.1990年Lawrence Phillips在Computer Language 杂志发表了Metaphone算法,将一些英语拼写规则纳入考虑,产生了更可信的key.作为Soundex 的改进,Metaphone算法仍不能处理一些明显同音的词,如"Bryan" 和 "Brian".最后,2000年,Lawrence Phillips在C/C++ User’s Journal上发表了Double Metaphone算法,引入了其他推断来改进Metaphone的弱点,产生了第二个(替代的)key,用来表示单词的原始发音(较之美语的外来语发音).有了这些改进,Double Metaphone算法已满足大多数语音匹配实用需求.

第一部分介绍了 Double Metaphone和 C++ 实现. 第二部分用Visual Basic写COM实现.第三部分用ASP和 VBScript写COM实现,第四部分用Sql Server中扩展存储过程实现. 第五部分用.NET实现. 第六部分介绍了语音匹配的替代方案和其他资源.

[背景]
Phillips的原有 Double Metaphone 实现,使用了MFC string的一个子类MString.对一个单词调用DoubleMetaphone 方法后,会产生两个key,主key表示美语中的发音,次key表示外来语或姓名等的原始发音(可能为空).Metaphone key有4个字母(对短单词只有3个字母),主要描述单词前面的部分的发音,这个"神奇的长度"是个匹配的错误率和相关性之间的很好折衷.比较两个单词时,主key相等则为强匹配,主key与次key相等则为一般匹配,只有次key相等则为弱匹配.

[改进实现]
作者的C++实现用C++的模板实现,带一个长度参数,允许程序员控制产生key的长度,实践证明,4是个最好的长度.改进包括
(1)不基于MFC.不依赖于windows的任何元素,可用于支持模板的编译器
(2)不继承于string,而采用了Metaphone key类
(3)实现了Metaphone key类== 和 != 操作符
(4)比原来的实现快了约2倍

略...

[Unsigned Short改进]
Phillips提出了可用Unsigned Short代替string来保存ke以提高效率,但未实现,作者进行了实现.