社区全文检索引擎Hyper Estraier 学习笔记[3]
06月 22, 2008 on 12:26 pm | In 未分类 | 2 Comments经过摸索,我决定给HyperEstraier加上由Hightman写的scws支持,使之支持中文分词。
实地看了代码之后,发现Hyperestraier的结构划分并不好,这可能决定了他只能是某些Hacker的心血之作,而不适用多人协作开发,大规模推广应用。这是旁话。
既然找到分词默认是使用的estraier.c的est_break_text函数,那我的目标就是改造这个函数,现在这个函数被我改成了:
- scws_t seg;
- /* Break a sentence of text and extract words. */
- void est_break_text(const char *text, CBLIST *list, int norm, int tail){
- // hack by renlu.xu
- CBLIST *words;
- const unsigned char *word, *next;
- unsigned char *utext;
- char *tmp;
- int i, j, k, size, cc, wsiz, nsiz, tsiz;
- assert(text && list);
- if(seg==NULL)
- {
- seg=scws_new();
- scws_set_charset(seg,"UTF-8");
- scws_set_rule(seg,"/home/y/etc/rules.utf8.ini");
- int xmode=0;
- scws_set_dict(seg,"/home/y/etc/dict.xdb",(xmode & XMODE_DICT_MEM) ? SCWS_XDICT_MEM : SCWS_XDICT_XDB);
- if(seg->d == NULL && !(xmode & XMODE_NO_TIME))
- fprintf(stderr, "WARNING: input dict file load failed. /home/y/etc/dict.xdb\n");
- }
- int fsize;
- fsize=strlen(text);
- scws_send_text(seg,text,fsize);
- scws_res_t res,cur;
- while ((cur = res = scws_get_result(seg))!= NULL)
- {
- while (cur != NULL)
- {
- cblistpush(list,text+cur->off,cur->len);
- cur = cur->next;
- }
- scws_free_result(res);
- }
- int iter_i;
- int wsize=0;
- fprintf(stderr,"\nsegmented words:\n");
- for(iter_i=0;iter_i<cblistnum(list);iter_i++){
- word=CB_LISTVAL2(list,iter_i,wsize);
- fprintf(stderr,"%s\t",word);
- }
- return ;
- }
Ok,其中函数中最后一个for语句是为了调试,看看分词结果如何。
这里用到的scws_send_text等函数是hightman的scws中定义的,因此需要在estraier.c的文件头加上:
- #include "scws.h"
并修改Hyperestraier的Makefile:
- LIBS = -lqdbm -lz -lm -lc -lscws
然后make && make install
下面作个测试:
- #!/bin/sh
- #file:test.sh
- rm -rf test_db
- estcmd create test_db
- find ./ -name "1.txt" -type f |estcmd gather -cl -fm -cm test_db -
- estcmd search -vx -max 10 test_db '索引'
根据打印的结果,中文分词已经加入到索引过程中去了!
社区全文检索引擎Hyper Estraier 学习笔记[1]
社区全文检索引擎Hyper Estraier 学习笔记[2]
社区全文检索引擎Hyper Estraier 学习笔记[3]
社区全文检索引擎Hyper Estraier 学习笔记[2]
06月 22, 2008 on 10:35 am | In 未分类 | 1 Commenthyperestraier是在前文已经介绍过一的一个开源搜索引擎程序。
分词:采用N-gram,char_category等来分词,良好地支持中文等东亚文字。
分词程序在:estraier.c中
est_break_text
est_break_text_perfng
est_break_text_chrcat
等分法。
相关的函数有
276 static int est_char_category(int c);
277 static int est_char_category_perfng(int c);
278 static int est_char_category_chrcat(int c);
等
分词默认采用est_break_text
当创建数据库时采用 estcmd create dbname -apn 时,采用est_break_text_perfng来分词
当创建数据库时是用 estcmd create dbname -acc 时,用est_break_text_chrcat来分词
采用est_break_text来分词时,结果这样样的:
今天 天突 突然 然想 想起 起霍 霍炬 炬曾 曾告 告诉 诉过 过我 我的 的一 一个 个日 日本 本人 人开 开发 发的 的全 全文 文检 检索 索引 引擎 擎, , 于是 是找 找他 他问 问了 了,
是双字连着的分词法,这样会占用多至少一倍的检索空间,同时精确度差一点(但是精确度比按字分词好一点)。
系列文章:
社区全文检索引擎Hyper Estraier 学习笔记[1]
社区全文检索引擎Hyper Estraier 学习笔记[2]
社区全文检索引擎Hyper Estraier 学习笔记[3]
Spread 简介(试译)
06月 19, 2008 on 5:38 pm | In 未分类 | 1 Comment项目网站:http://www.spread.org/
Spread 是一个开源工具,它提供高性能的的消息服务,这种服务在局域网和广域网上能有效地避够失效。它在分布式程序中充当一个统一的消息总线的角色,并且提供高调谐的应用级的消息多路播送、组通讯、点到点支持。Spread的应用范围既包括高可靠的消息传送,也包括有序消息的传输(有保证).
Spread可用在许多需要高可靠性,高性能,以及各种子集和成员之间健壮的消息传播的分布式程序中。这个工具封装了异步网络的复杂性,便于创建可高靠和可扩展性的分布式程序.
Spread包含:一些需要被用户程序包含的库文件,一个守护进程(它需要运行在这个一组应用的每台机器上),以及一些工具和演示程序。
Spread提供的功能和便利有:
可靠的、可扩展地消息传播和组通讯。
可以简化分布式程序架构的简单而功能强大的API
易于使用,开发和维护
从本地局域网到复杂的广域网的可扩展性
支持有不同数目的成员的上千个组
提供在机器失效、应用崩溃和网络划分、重组时的可靠的消息传送的能力
为消息传送提供了可靠和排序、稳定保证。
重视健壮性和高性能
完全的分布式算法,不会有中央节点失效风险
为什么使用Spread
* 功能强大而简单的API.只需要六个基本的调用就可以使用Spread了!
* Spread做了优先,在本地局域网中可以支撑每秒8000个1Kbytes的消息
* 在网络划分或系统某部分失效时的可靠性和可用性,不管系统是由几台电脑构成的cluster,或是一些cluster,还是分布于广域网的几千台电脑组成的系统。
* 允许系统无缝地增长扩容而不需要改变架构.
* Spread允许单播,多播,多组多播,scatter-gather calls,或是多路查询。
* Spread能处理网络和机器的重新划分并且能够安全地重新组合,能通知应用当前的状态.
* 跨平台:Spread 支持跨平台的操作:Unix( BSD,Linux,Solaris,Irix,AIX,Mac OS X,etc)和Windows(2000/NT/98/95)
* Spread当前有C/C++,C#,Java,Perl,Python和Ruby的编程接口.
现实版第六日
06月 14, 2008 on 8:26 pm | In 未分类 | 7 Comments今天去湖北省驻京办去补办身份证,报和身份证号,就在凳子上等照相,但却告知我不是本人。
过去凑到电脑前一看,果然,名字、住址,都对,身份证号也对,但是出来的人的头像照片却不对,根本不是我的照片。
这一下我成真正的黑户了,不仅身份证丢了,连通过身份证号查出来的人也不是我了。
招聘广告,帮忙贴下拉
06月 11, 2008 on 9:46 am | In 未分类 | No Comments中国雅虎应用技术部现招聘PHP开发工程师。招聘的岗位职责是:与社区运营业务部门紧密配合,完成财经、奥运等主题社区的新产品系统设计、开发、优化工作。工作地点:北京
要求:
* 计算机相关专业大学本科以上学历,具有扎实的计算机基础理论知识;
* 一年以上业界工作经验,具有大型互联网应用开发经验;
* 精通PHP语言,精通CGI标准和HTTP等互联网协议;
* 熟练掌握HTML语言、JavaScript脚本语言;
* 熟悉Unix/Linux操作系统和开发环境,能够熟练配置Apache服务器;
* 具有一种以上关系型数据库应用开发经验,熟练MySQL开发者优先;
* 熟练掌握Perl、Python和Unix Shell等其中一种语言;
* 具有良好的中英文沟通能力,具有项目管理经验者优先;
欢迎技术精英加盟雅虎,有意者发送简历到ncp.recruit@yahoo.com.cn 邮箱!
[流水帐]将回武汉一趟
05月 30, 2008 on 11:18 pm | In 未分类 | 3 Comments拖了很久了,一直没有机会去武汉把户口的事给办了,终于有机会倒休几天了,刚巧是在端午节前,因此可以把这事给办了。
手里的项目从立项到上线,就不到两个月时间,五月一个月拼死了赶了一个月,这两天已经快崩溃了。这两天鼻炎终于发作了,呼吸不畅,今天还流鼻血了,难受。
今天发了工资我一时脑子短路就全存定期了,房租和租服务器的钱是预留下了,可是忘了回武汉的开销。惨。
继续扯蛋之:Mr Lee
05月 23, 2008 on 11:27 pm | In 未分类 | 6 Comments(根据老李子的经历稍改了改)
话说米国那边来了几个金发绿眼的鬼子同事,我们这边几个工程师一起开会。
其间担任翻译的同事本来要挨个介绍一下的,但是一想中国人的名字老外记不住,就只打算介绍一下怎么称呼。
不料,几个工程师全姓李,于是这位是这样介绍.
This is Mr Lee,and this is Mr Lee,This is ,Mr Lee…
鬼子同事大惊,然后疑惑地问:Lee one?Lee two?Lee three?
汶川地震:某些公司你不捐款就算了
05月 23, 2008 on 12:47 am | In 未分类 | No Comments据说在昵称前加一个啥啥啥标记你们就捐多少多少款…
操!
就惦记着你的营销、你的PR了吗?
爱捐不捐。
爱心是不需要讲要件的。
征合租服务器
05月 22, 2008 on 7:42 pm | In 未分类 | 9 Comments我用的机器是和覃健祥和另外一个朋友合租的,配置还行,现在托管在光华路,几个人都只放个把博客啥的,机器比较闲,有点儿浪费money。
因此我们决定:将机器搬迁到一个比较便宜的机房,同时再找几个人合租。
预计新机房将于5月25日左右搬迁,大约需要4500/年的托管费,机房在北京,几个人平摊这个费用,机器是覃健祥的。我们现在有三个人,希望整体合租用户控制在7个人以下。
对了,机器运行在一个Redhat家族的centos Linux上,Web服务由Lighttpd提供,数据库服务是mysql.比经典的LAMP组合更好,唯对代码技术稍稍有一点要求,当然我们都是有点经验的开发工程师,如果您不是喜欢整天倒腾的话,我们可以代您安装您需要的程序。
有愿意合租的朋友可以联系我:
Msn:helloasp@hotmail.com
雅虎通:xurenlu
邮箱:xurenlu@126.com
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^








