基于xapian的相关度搜索项目初步完成


  最近两个月研究了相关度搜索引擎的一些知识,对XapianOmega(一个基于Xapian的应用)的代码进行了一定量的修改,开发出了一款轻量级的基于中文字典词库的相关度搜索引擎。
  这个搜索引擎的功能是:从数据库的一个表中取出内容字段的数据,利用基于中文字典词库的分词算法,建立这些数据的索引。根据索引,我们可以检索到与某条记录相关的其它记录,以及扩展分词列表。
  扩展分词列表的概念是负责eYou邮件网关算法的同事介绍的,她认为仅凭一个分词找到相关记录的算法过于刻板,应该是先找到与这个分词语义最相关的一组分词,然后针对这组分词进行更精确的搜索。
  上图是我将占座网随笔数据导入后的查询结果,这是一个demo页面的截图,第一篇ID为105121的文章的相关文章从第二行开始列出,看起来效果还算可以。

建议对银行系统排号服务作如下改动

  每次到王府井的中国银行营业厅时,前面总有三五十人在排队。为了避免耽误工作,往往是吃饭前去领个号,吃完饭再去办理业务。一方面是很多人在无聊的等待,另一方面是很多人无法忍受过长的等候而离开,从而导致大量废号的产生。
  我建议操作流程改为这样:

  1. 按下触摸屏上的“对公业务”、“个人储蓄”等功能。
  2. 屏幕出现提示信息:“您前面还有××位客户正在排队,预计您还需等待××分钟。我们为您提供了手机提醒服务,请选择:”
    需要客户设置的信息如下:
    1. 当您前面排队的客户数少于 [ 5 ] 位时,向您发出提醒。
    2. 请输入您的手机号码: [ 13xxxxxxxxx ] 。
    3. 请输入提醒方式:[ ] IVR语音通知(每条收费1元);[ ] 短信消息通知。
  3. 在用户设置完成后,打出排号单。

如何测出头的体积?

  被经常性骂作猪头的同志们注意了,其实头的体积是可以被较为精确的量度的,了解自己是为了更好的打击敌人。
  准备工作:找一个比头稍大的有刻度的容器,并将其灌满水(如果水不纯,请事先测出密度d);一个体重秤。
  首先把头洗净,尽量去除可溶水的物质,站到秤上记录下示数G0,然后把头放到容器中,稍后取出,立即站到秤上记录下示数G1。这时去读容器中被头排出的水的体积V’。
  得到上述三个读数后,你的头的体积
  V=V’ – (G1-G0)/d 。

一个迟到罚款数额的计算公式

  上班迟到要扣钱,一个简单的分段函数是无法达到很强的约束力的。于是我设计了一个略微复杂的函数,供地球上的HR参考。
  S = S0 + dTA1+ρn/N
  各参数代表的意义如下:
  S0:金额基数,即最低罚款额。
  d:比例系数。
  n:在该人到达公司前,当天公司已经迟到的总人数(人)。
  N:当天公司共需签到的总人数(人)。
  A:金额基数(元),可以为一个与T相关的函数。
  T:该人当天迟到的时间(分钟)。
  ρ:比例系数,用于调整N对S的影响。
  简述:某个人迟到需缴纳的罚款,跟当天迟到的分钟数线性相关。随着迟到人数占公司总人数的比例不断增加,罚款数额也会增加。
  这个函数将会起到如下作用:T对S的约束会促使员工无论迟到了多久,都要尽快到达公司,否则罚款是随时间不断上涨的。n对S的约束会促使员工尽量早到公司,否则总会比前一位同事多交罚款,并且客观上会降低迟到员工的总数。

给本站加上了字数统计功能

  我在每篇blog的尾部,加上了对该篇文章的字数统计功能,其中包括总的汉字字数,以及出现的不同的汉字的个数,对外揭示了对汉字量以及字频的统计信息,这个功能的实现非常简单,就是一段javascript代码,如何使用,就看大家的才艺了:

function CountChineseCharacters(Words) {
var W = new Object();
var Result = new Array();
var iNumwords = 0;
var iTotal = 0;

for (i=0; i<Words.length; i++) {
var c = Words.charAt(i);
if (c.match(/[u4e00-u9fa5]/)) {
if (isNaN(W[c])) {
iNumwords++;
W[c] = 1;
}
iTotal++;
}
}
Result[“numwords”] = iNumwords;
Result[“total”] = iTotal;
Result[“avg”] = parseInt(iTotal/iNumwords*1000)/1000;
return Result;
}
var res = CountChineseCharacters(document.getElementById(“id_entrytext”).innerHTML);
document.getElementById(“numwords”).innerHTML=res[“numwords”];
document.getElementById(“avg”).innerHTML=res[“avg”];

  例如,可以这样用:

var res = CountChineseCharacters(document.getElementById(“id_entrytext”).innerHTML);
document.getElementById(“numwords”).innerHTML=res[“numwords”];
document.getElementById(“avg”).innerHTML=res[“avg”];

link2rss 0.1版代码下载

  link2rss的功能是将一篇网页中的链接转换为rss文件,用户使用客户端订阅这个rss文件,就可以获取这篇网页链接内容的更新,对于新闻资讯类网站尤为适用。
  最近几天钻研了perl,写了一个简陋的程序完成了这个功能。
  这是一个perl程序,点击这里下载。使用方法:

perl link2rss.pl <url> > <filename>
url: 一个网页,以http://开头,此外网页中至少还要有一个斜杠,如http://news.sina.com.cn应写为http://news.sina.com.cn/ 。
filename: 要导出的目标xml文件,如果需要使用客户端订阅,那么这个文件需要放在http服务的目录下。
一个典型的例子:perl link2rss.pl http://news.sina.com.cn/ > /usr/local/apache/htdocs/news.sina.xml

  这个程序需要LWP::SimpleHTML::Parser支持,请下载并安装相关的模块。
  不管考试成绩是多少分,link2rss就算是毕业了,希望这个程序可以减轻朋友们在访问门户网站时寻找链接的痛苦。如果你有一台托管服务器,可以把这个程序放在服务器上定时运行,如果没有,也可以放在本地执行。本站也会稍后提供这样的服务,提供若干条xml供大家订阅。