用向量判断文本相似
在枫之羽的推荐下看了这本《Lucene In Action》,感觉很不错。首先是翻译得比较好(从这个角度看,原版一定很好看);另一方面,虽然原版作者是老外,书中还是讲到了不少中文切词方面的东西。再者,还写到了Lucene在其他语言平台上的移植,比如CLucene,dotLucene,PLucene,Lupy等等。其中一些知识已经陈旧了——在一个迅速发展的领域,写到书上的知识往往在出版时已经变得陈旧了。针对这个问题,一些作者也在书里给出一个互联网上可访问的地址,分享最新的资源——比如我一直在看的《电子商务》。
其实我已经看了很多Lucene方面的东西,对于Lucene的通常使用也有了概念,只是没有时间来实践。所以看这本书只花了两节课,看完印象最深的是其中一个判断内容相似的算法。其实就是Google黑板报说的那个“余弦定理”——文本包含的各个词及其出现的频率可以构成一个表示该段文本的特征向量,而通过余弦定理可以计算任何两个向量的夹角,夹角越小就说明二者越接近。
貌似没有比这个更好更体现数学之美的算法了,可是,判断两断内容的相似程度是简单的,如果是20万段内容,判断其两两之间的相似程度,又该怎么做呢?进行简单的两两选择,一共会有将近400万条数据,而可以确定的是,其中大部分都是没用的。
很想知道Google当年还有“补充材料”时是怎么判两个网页有重复的,人家服务器里搁的网页可不是十万计的。隐隐觉得这个时候该结合贝叶斯算法——当然肯定不止这些。数学还是不够好,不能马上想到一个可行的解法。
记得今年在北京,某人说,豆瓣里那些相关图书都是用select从数据库里拿出来的 。可爱的回忆。

