Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2048560
  • 博文数量: 369
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 4271
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-21 00:59
文章分类

全部博文(369)

文章存档

2013年(1)

2011年(2)

2010年(10)

2009年(16)

2008年(33)

2007年(146)

2006年(160)

2005年(1)

分类:

2006-12-25 23:24:29

以前版本的xlyrics都是通过比较歌曲文件和歌词文件的文件名来进行匹配的,为什么采用文件名而不是采用歌曲文件的id3和歌词文件(LRC格式)中的ar(artist)和ti(title)等信息呢?一方面编辑id3和LRC格式的歌词比修改文件名更加复杂,更加不方便,再有就是深入到文件内容的搜索会让搜索速度大大减慢,还有就是直接处理文件名更加简单了。zhllg@linuxsir.org曾经给0.4.2版本的xlyrics提供过id3的补丁,可实际效果并不佳,并且引入了些“断错误”,不过还是要感谢他的帮助。

最早以前的歌词匹配是用strstr实现的,也就是说只要歌词的文件名部分包含歌曲的文件名,那么就匹配成功,这存在些问题,比如歌曲“爱”会错误匹配“简单爱”;一些用户反映了这个bug,所以之后的版本就改成了用strcmp进行严格匹配,这样虽然不会匹配错误,但是会漏掉一些歌曲,比如歌曲“流年”并不会匹配歌词“王菲 - 流年”。应该说以上两种情况走向了两个极端,都是不可取的。

新的歌词匹配算法是采用token匹配算法。具体如下:
  1. 把歌曲名用分割符(比如“-:&()”等)分割成一个个token,并且去处每个token的头部和尾部的空白(包括“ \t”)。
  2. 在歌词名中逐个搜索各个token,并判断每个token所在位置的前后是否为合法的分割符,如果是,匹配成功。我们要求歌词名所具有的token信息不能少于歌曲名的,或者说是歌曲名的每个token都能在歌词名的token中找到。
  3. 按照以上算法我们得到的歌词文件也许会多余一个,这时我们将优先选择歌曲名和歌词名完全匹配的那个。
新的算法已经实现并测试完毕,效果不错,应该能满足大多数情况了!



题外话,今天一天都是浓雾弥漫,能见度很低,听说过两天要大降温,请各位同仁注意保暖!早晨到公司的时候,发现了四月邮来的明信片,不偏不倚整好在圣诞节这天到来,满心欢喜!
阅读(2047) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~