百度国学搜索探密
Posted 张俊林博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度国学搜索探密相关的知识,希望对你有一定的参考价值。
/*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/
百度国学搜索探密
中科院软件所 张俊林(http://blog.csdn.net/malefactor)
2006年1月11日
年底写论文作实验搞得头昏脑胀,中午放松一下上网看看新闻,原来百度推出了国学搜索,平常也比较喜欢看诗词歌赋方面的东西,就上百度试了试,结果搜索结果让我感觉哪里好像不对劲,所以就稍微花点时间看看百度在后面作了些什么.
我说的不对劲到不是搜索结果本身,而是搜索结果的存放方式,你会发现百度所有搜索结果都放在http://guoxue.baidu.com/page/这个目录下面.比如搜索”诗经”,所有返回结果页面都是guoxue.baidu.com/page/caabbead/XXX.html
这说明什么?说明百度所有的国学书籍都是存储在guoxue.baidu.com/page/这个目录下面,每个书籍一个目录,每个目录下面若干页面,每个页面是这个书籍的一部分.然后我感觉很好奇的是,目录名是按照什么原则命名的呢?比如”诗经”为什么是caabbead呢?看着这个字符串非常有亲切感,好像认识又叫不上名字,是谁呢?对了,很像是中文字符的字符编码,那到底是不是呢?做个实验,把”诗经”放到UltraEdit里面选择HEX EDIT看看编码发现还真实这么回事情,在实验几个,比如”红楼梦”,HEX EDIT编码: baecc2a5c3ce,那么我们试试百度存放在哪里,理论上应该存放在guoxue.baidu.com/page/baecc2a5c3ce这个目录下,那么构建URL: guoxue.baidu.com/page/baecc2a5c3ce/1.html看看,你看到了什么?跟我们的预期一样,是红楼梦,不过不是第一章,是第二章,这个出乎我的意料,看来百度程序员有职业习惯从0开始计算啊,试试, guoxue.baidu.com/page/baecc2a5c3ce/0.html,嗯,是第一章了.
看来百度是这么做的:每个书籍一个目录,目录名就是书名的字符编码,每个章节或者段落是一个静态页面,目录页面是http://guoxue.baidu.com/page/xxxx/index.html,每个书籍都是若干静态页面组成的,所有数据放在http://guoxue.baidu.com/page/目录下而且不允许用户直接访问这个目录,想要大批量收藏古籍的先生太太老爷小姐门可以考虑写个小程序自动从百度抓取啊,百度真是个好人,呵呵.
那么后台怎么处理呢?这个看来很简单,后台应该有三个数据库,一个是人名倒排索引,记载了作者和作品信息,这个是为了支持按照作者查找的;一个是书名倒排索引,记载出现过数目的页面,这个是为了支持按照书名查找的,另外一个是全文倒排索引,这个是为了按照内容查找的,那么内容索引是怎样的呢?建立了N-GRAM索引还是分词后按照词汇索引的呢?所谓N-GRAM索引,就是说不考虑分词,而按照下面方法建立索引:
比如”百度搜索”,2-gram索引记载下面信息:”百度 度搜 搜索”,3-gram就是”百度搜 度搜索”,依次类推.用户输入”度搜”作为查询,那么数据库里面记载了信息,就把”百度搜索”提取出来了.
结论是百度分词后进行索引的没有采用N-GRAM,比如用”土群”你是搜不到东西的,而用” 郴土”是可以搜索到”郴土群山高”,说明没有用N-GRAM否则用”土群”也可以搜索出这句话的.
在我看来,国学搜索这种东西实际的有需求的用户有多少很难说,只是具有象征意义,百度推出这么个搜索无非是想强调自己是做中文的而已,但是从上面分析你可以看出来,这种搜索技术上实现起来跟中文又有多少关系呢?要想真正把国学搜索做好要花的功夫远非现在百度所采取的技术实现能够达到的.
补充(1月12日):
排序是搜索引擎的核心,经过我分析,百度国学的排序原则是最传统的TF.IDF方法,排序公式如下:
Rank(w)=TF(w)*IDF(w)/Doclen
TF(w):w出现在文章中的次数,如果出现在文章的书名,那么权重加大.
IDF(w):w的所有数据库文件中多少个文件出现(DF(w)),然后求倒数1/DF(w)
Doclen:文章长度.
另外,采用了CACHE机制.
如果所有文章数据采取XML 格式整理好的话,对于做搜索的公司来说,构造这么一个检索系统还是比较花费时间的,我估计得用30分钟到1天的时间才能完成整个系统-:)
以上是关于百度国学搜索探密的主要内容,如果未能解决你的问题,请参考以下文章
如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学