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

推荐订阅源

F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
The Hacker News
The Hacker News
L
LINUX DO - 热门话题
T
Tenable Blog
Hugging Face - Blog
Hugging Face - Blog
Google Online Security Blog
Google Online Security Blog
博客园 - Franky
P
Proofpoint News Feed
H
Hacker News: Front Page
P
Privacy & Cybersecurity Law Blog
月光博客
月光博客
P
Proofpoint News Feed
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
博客园_首页
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
Forbes - Security
Forbes - Security
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Hacker News - Newest:
Hacker News - Newest: "LLM"
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
O
OpenAI News
G
Google Developers Blog
Martin Fowler
Martin Fowler
罗磊的独立博客
S
SegmentFault 最新的问题
T
Tor Project blog
量子位

博客园 - andy.wu

聊聊除了生产率之外的东西,比如赚钱效率 一些需要解决的问题(Win32) svn howto: svn合并时报错:retrieval of mergeinfo unsupported by 。 Windows Mobile应用开发(1):使用Win32 SDK 开发屏幕手电程序 vs(2005 and 2008)中使用vc++创建智能设备项目失败的正确解决方案 思考:google的opensocial的实现原理 思考:日期类型的数据应该用什么样的具体形式存储到数据库? google got crazy!!! EnableViewState详细分析 - andy.wu - 博客园 NHibernate Tips: 要注意模型与数据库在Null方面的匹配 AjaxPro基础知识 and FAQ 在iis 6中使用共享目录作为虚拟目录 初学wpf感想 Sql Server 2005全文检索中碰到的问题和分析 asp.net faq: 在html文件中,用js获取session? 给博客园首页管理的建议 china-pub,当当,卓越购书经验谈 使用Emacs代替Windows下的Command shell 经验:使用.net 2.0中的TransactionScope碰到的问题
一次思维锻炼,使用拼音模糊匹配中文 - andy.wu - 博客园
andy.wu · 2009-05-31 · via 博客园 - andy.wu

Outlook的联系人查找,不支持用拼音的模糊查找,于是自己想实现一个。需求如下:

要求

允许模糊音,比如(zh,z),(ing, in)

允许每个字的模糊匹配,字之间不能用空格

比如:

字符串"Nokia客户服务中心",先拆开成拼音为:Nokia Ke Hu Fu Wu Zhong Xing ,拼音的总长为22

每个字再拆开后,表示为下表(第一行是标题),注意空也算一个字的组合之一

标题

Nokia

1

n

k

h

f

w

z

x

2

no

ke

hu

fu

wu

zo

xi

3

nok

    

zon

xin

4

noki

    

zong

xing

5

nokia

    

zh

 

6

     

zho

 

7

     

zhon

 

8

     

zhong

 

合计

6

3

3

3

3

9

5

目标:使用所有字的任意组合,都能匹配到字符串Nokia客户服务中心。也就是说有 6 * 3 * 3 * 3 * 3 * 9 * 5 = 21870种组合可以匹配,每一种组合会有相应的权重,计算公式为:

权重(组合串) = 组合串的长度 / 拼音的总长度

可能表达的不是很清楚,以下随意举例可能的匹配(以*间隔是为了说明,实际输入时不应该有*)

组合串

组合串的长度

组合串的权重

n*ke*h*f*wu*zho*xi

12

12 / 22

nok*k*hu*f*w*z*x

10

10 / 22

n*k*h*f*w*z*x

7

7 / 22

本以为不难,但真的做起来发现算法的效率是个大问题,一开始没有仔细想,就是简单的把所有组合作了散列,一运行发现在散列时相当慢,仔细一看才发现有些联系人的组合数量是相当惊人,比如举的例子,达到了21870种。

说来惭愧,对数据结构和算法实在是不济,一时间就想不出复杂度在O(1)或O(log n)的算法。在此抛砖引玉,希望和大家讨论。

========这是无敌的分割线=============

以下是做这个事情过程中的一些工具代码,很简单,与大家分享

  1. 汉字转拼音

程序很简单,就是使用码表,因为只是作为工具,我没有做任何优化。

下载ChineseSpell.cs