寻找网页制作兼职人员

本人需要一名兼职网页制作人员,主要工作是设计简单的页面,需要会用Photoshop,熟悉HTML,需要有充裕的时间,比较适合时间宽裕,有一定经验的在校学生,具体项目和薪酬面议。
联系方式见这里.

[译文]Xapian 1.0索引/查询时的term处理方式

这是译文,原文地址:http://xapian.org/docs/termgenerator.html

翻译:一米六二(renlu.xu@gmail.com)

Xapian 1.0索引/查询时的term处理方式

在Xapian 1.0,默认的索引方式已发生了重大变化(这些都是来自旧的索引方式在真实世界 中的实际经验教训).本文档介绍了新计划,并跟过去的旧方式做对比.

词干处理

最明显的区别是抽取词干后term的处理。

在此之前,所有的词都是词干后再索引,但是没有前缀;所有大写词都并不做词干抽取处理(但是会变小写),并加一下”R”前缀.这样做的理由是,人们希望能够搜索准确的名字(比如像英语词干提取就合并了Tony和Toni 。但当然,这也使得句子开头的一个词,标题文字,另外德语所有名词都是大写,这些都是会这样编入索引。无论是正常的和带R的前缀都会带着位置信息被索引。

现在,我们索引所有词的小写形同时带上位置信息,以及词语未做词干抽取状态加上”Z”的前缀,但这时不带位置信息.默认情况下会使用一个Xapian::Stopper 以避免索引stopwords的词根(测试表明,这会省下数据库1%的大小)。

新的索引方式允许精确短语搜索(这是旧的方式所不支持的)。现在NEAR 操作符只能应用在词语的未取词干的形式上,不过这也够了.我们还可以禁用对查询中大写词语的词根抽取,以在对物定名词搜索时获得更好的效果。现在Omega的$topterms 总是能正确建议一个未抽取词根的形式!

为词根形式添加前缀的主要理由是,他们的量比较少!另外,一个附带好处是,它开创了一种多种语言的词根形式,如Z:en ,Z:fr: 或其他的随便什么语言.

QueryParser中对.结尾的特殊处理(这会因为人们粘贴过来的一段文字而错误地被触发)已经去掉了.此功能之所以出现,主要是为了支持欧米茄的topterms加入词根形式;但是现在Omega已经可以建议未取词干的形式,因此就不再需要这个功能了.

成词字符(能组成词的字符,比如英文中26个字符就是,而|符号和:号就不是)

默认情况下,Unicode字符的CONNECTOR_PUNCTUATION 分类下的字符(_和其他常见的一些字符)不用做其他形式的处理就是成词字符了,这样可以更好地索引一些标识符.以前像time_t这种就需要一个短语搜索了.

尾部的+和#仍然可以包含在Term中(尾部最多可以有3个这样的字符),但-默认不可以了。把他们包含有进来会有益的例子(nethack–,cl-),好处并不十分明显,相反,他们作为连字符更常见更有用.这些例子并不引人注目的好处是它( 的nethack -和 Cl -),它往往胶连字符到条款。

嵌入的单引号’((撇号)现在可以包含在Term中了.以前版本中这会使得短语搜索变慢,同时索引中会被带进来垃圾Term(didn’t 会变成ditn 和t)。各种Unicode使用的撇号都映射到了ASCII的形式。

其他很少量的字符(这些字符取一个词的Unicode的定义中)如果是包含在两个成词字符中的话也可以视为是Term的一部分;,。,,和少量其他字符在出现在两个十进制字符之间时会视为Term的一部分.

Xapian的查询分析器

英文地址:http://xapian.org/docs/queryparser.html

Xapian::QueryParser的语法

本文档介绍了Xapian::QueryParser类支持的查询语法.这套语法设计得跟其他基于Web的搜索引擎的语法类似,这样用户就会很熟悉,不用从头学习一个全新的语法。

操作符

AND

Expression AND expression 匹配两个条件都符合的文档.

OR

Expression AND expression 匹配符合两个条件中任何一个的文档.

NOT

expression NOT expression 匹配那些只匹配第一个条件的文档.这个也可以写成expression AND NOT expression.如果您设置了FLAG_PURE_NOT,那么

NOT expression 就匹配了所有不符合这个表达式的文档

XOR

expression XOR expression 匹配那些符合两个条件中的一个的文档;但是不能两个都符合.XOR可能有点不好理解。

带括号的表达式

你可以括号来调整布尔运算符的优先级.在one OR two AND three这个查询中,AND优先,这跟one OR (two AND three)是一样的.你可以用(one OR two) AND three来改变优先级 。

+和 –

一组带+和-符号的term,会匹配所有带+的term,但是不匹配带-的term。而不带有+或-的term则影响搜索结果中文档的排名.你也可以给短语和括号表达式加上+或-符号

NEAR

one NEAR two NEAR three匹配那些各个term间的距离在10以内的文档.你也可以通过NEAR/n这种方法把默认的10这个值设置为其他的值,如one NEAR/6 two.

ADJ

ADJ像NEAR ,但只匹配的文字以相同的顺序出现的文档。因此, one ADJ two ADJ three匹配那些包含了这几个term词并且term间的距离在10以内的文档.您也可以通过ADJ/n语法来修改这个默认的阈值,例如:one ADJ/6 two.

短语搜索

用一对由双引号包起来的短语来搜索时,结果是精确匹配 这个短语的文档.带连字符的语语也作为短语处理,像邮箱和文件名称等 (比如. /etc/passwd 或是 president@whitehouse.gov).

搜索相关的域

如果数据库索引时已经为一些域设置了前缀,你可以设置一个域-前缀的Map,这样用户可以搜定搜索某些特定字段。例如author:dickens title:shop就可以搜索作者是狄更斯,名字包含”shop”的书。您也可以为双引号括起来一个短语指定前缀,例如(author:”charles dickens” ),或是为括号内的表达式指定前缀:(例如title:(mice men) )。

搜索固有名词

如何你搜一个首字母大写的词,它搜索时将不做词干原.

区间搜索

The QueryParser can be configured to support range-searching using document values.

这种范围搜索的语法是start .. end -例如, 01/03/2007..04/04/2007 , $10..100 , 5..10kg 。

同义词

QueryParser可以配置来支持同义词,它可以明确指定(使用语法~ term )或隐式(为所有term使用同义司,或是某些特别指出的一组term)。

通配符

QueryParser支持在结尾使用一个’*’通配符的操作,wildc*将匹配wildcard, wildcarded, wildcards, wildcat, wildcats, etc等.此功能默认禁用. 在调用Xapian::QueryParser::parse_query( query_stringflags )函数时通过传递Xapian::QueryParser::FLAG_WILDCARD给flags参数就可以启用它.使用QueryParser::set_database( database )来告诉QueryParser用哪个数据库来扩展通配符.

query 片断的匹配

查询分析器(Query Parser)支持搜索只输入了片断的查询.计划实现的是这样一种”增量搜索”的系统,这种系统里,不等用户输完查询条件就可以显示一些查询结果.例如,在一个系统中,用户每输入一个字符,系统就输出新的搜索结果(也可能是另一种情况,如用户每停顿一小会就输出新的搜索结果,或其他情况).这种搜索有一个毛病就是,通过搜查询条件的一个片断,得到的结果跟实际想要的可能完全没有语义上的联系.比如,想搜dynamic cat,可能返回的是dynamic categorisation的结果.这种情况下每输入一个字符搜索结果 都会快速地变化.如果将输入部分的视为包含一个隐含的尾部通配符,它会匹配所有以已输入字符结开头的词,这样我们可以得到更平滑变动的搜索结果—-每当新字符键入时,搜索结果都会更接近我们想要的主题. 一个简单有效的办法就是开启通配符选荐,并在查询字符串的尾部加上”*”字符串. 不过这会跟那些以标点结束或其他一些字符结束的的搜索搅不清.此功能默认情况下是禁用.

Xapian::QueryParser::parse_query( query_stringflags )函数时通过传递Xapian::QueryParser::FLAG_PARTIAL给flags参数就可以启用它.使用QueryParser::set_database( database )来告诉QueryParser用哪个数据库来扩展通配符.

译文:Xapian搜索结果的排序

这是译文,原文地址:http://xapian.org/docs/sorting.html

搜索结果的排序

默认情况下,Xapian按相关性递减的原则来排序搜索结果.然而,它也可以让搜索结果按其他指标,或其他指标和相关性的混合排序。

如果两个搜索结果从排序标准来判断是相同的分值,那他们的返回顺序就取决于它们的文档ID了.默认情况下,他们会按文档ID的升序排序(这样,一个较小的文档ID就会排前面),但可以设置为降序排列enquire.set_docid_order(enquire.DESCENDING);。如果你无所谓,你可以告诉Xapian随便使用任何一种排序都有序enquire.set_docid_order(enquire.DONT_CARE);。

按相关性排序

默认情况下Xapian使用的是BM25加权公式,它有许多参数可以设置。其中的部分参数我们使用默认值,在应付一般的工作时,它们工作得很好。这些参数的最佳值取决于数据被索引的方式和要运行的查询的类型,所以你也许可以改善一下,通过调整这些值来使搜索系统更有效,但它是一个繁琐的过程,人们通常懒得这么干。

BM25文件了更多的细节。

其他权重方式包括TradWeight和BoolWeight.

TradWeight实现了原来的概率加权公式,基本上是BM25的一种特殊情况(它就是BM25在K2 = 0,K3= 0,b = 1和min_normlen = 0的加权,只不过用一个常量线性缩放鸟)。

BoolWeight给所有文档,因此排序完全取决于其他因素。

您也可以实现自己的权重系统,只要用一个数值的形式来量化匹配的条件的(减去不匹配的条件),再考虑一些跟查询term无关的统计资料(比如说,标准化文件长度),就大功靠成鸟。

例如,这里有一个“几何匹配法” – 每个匹配就给一分:

class CoordinateWeight : public Xapian::Weight {
public:
CoordinateWeight * clone() const { return new CoordinateWeight; }
CoordinateWeight() { }
~CoordinateWeight() { }

std::string name() const { return “Coord”; }
std::string serialise() const { return “”; }
CoordinateWeight * unserialise(const std::string &) const {
return new CoordinateWeight;
}

Xapian::weight get_sumpart(Xapian::termcount, Xapian::doclength) const {
return 1;
}
Xapian::weight get_maxpart() const { return 1; }

Xapian::weight get_sumextra(Xapian::doclength) const { return 0; }
Xapian::weight get_maxextra() const { return 0; }

bool get_sumpart_needs_doclength() const { return false; }
};

由其他属性来排序

如果你想提供一个按日期“排序”功能,并且让文档按日期顺序被索引,那么通过使用一个布尔搜索,你可以实现一个非常有效的日期“排序”功能。布尔搜索通过enquire.set_weighting_scheme(Xapian::BoolWeight())实现,同时还要使用 enquire.set_docid_order(Xapian::Enquire::DESCENDING);如果你想最老的文档在前面,你可以用: enquire.set_docid_order(Xapian::Enquire::ASCENDING).很难说清楚有什么内在原因使这种技术不能用于按其他东东排序,通常我们总是最后索引新文章罢了,而最后索引的文章拥有较大的文档ID.嗯,其实我们只是在按文档ID排序而已.

按Value排序

你可以让文档通过比较某一特定Value来决定排序先后.请注意,在比较中是按字节序列来比较的,所以1 <10 <2。如果你要编码value,(使它按数值方式比较),请在索引时用Xapian::sortable_serialise()来编码Value;这同时适用于整数和浮点值:

Xapian::Document doc;
doc.add_value(0, Xapian::sortable_serialise(price));

有3种方法用来用来决定Value如何进行排序,而这取决于在排序里你是否使用和想如何使用相关性:

  • Enquire::set_sort_by_value(),相关性完全并不影响排序。
  • Enquire::set_sort_by_value_then_relevance()相关性只是用来决定在Value相同时文档如何排序.
  • Enquire::set_sort_by_relevance_then_value()指定了文档先按相关度排序,相关度相同时再按文档的Value排序(相同相关度:要的是权重也相同,而不只是用百分比表示的分数相同)。这种方法对于默认的BM25权重方式基本没啥用,因为默认的BM25权重方式几乎不会给不同的文档指定相同的分数.

按生成值排序

为了做到更精细的排序,Xapian正在考虑允许您从Xapian::Sorter继承一个子类,这个子类的函数可以用来为每个匹配的文件生成一个值,这个值就用来决定排序。这个函数针对每个匹配的文档顶多调一次,然后生成一个排序值,这个排序值会被按字节序来比较,以决定排序。

系统内置了一个标准的子类Xapian::MultiValueSorter,,它允许指定由文档的多个Value来决定文档的排序(当文档的第一个value相同时,第二个Value决定排序,第二个Value相同时,第3个Value决定排序,以此类推)。

Xapian::Sort也可以衍生出子类,以提供按地理距离排序的功能。子类可以用一个坐标(比如[纬度,经度])来代表用户的位置,然后用存储在文档中的座标来计算出跟用户之间的距离,使跟用户位置最近的结果得到更高的分数。

中国雅虎招聘:PHP工程师,测试工程师,无线开发工程师

公司地址:北京市朝阳区东四环中路56号远洋国际中心A座30F
有意者发送简历到 yahoo-tech-job@list.alibaba-inc.com 邮箱,并在邮件主题
中注明“YAHOO-职位-姓名-现居住地点”

PHP工程师

职位描述:
1. 负责产品的研发维护工作;
2. 负责产品数据库设计;
3. 负责产品前后台功能模块开发。
职位要求:
1. 大专或以上学历;
2. 三年以上PHP实际项目编程经验,精通PHP与Mysql;
3. 有独立完成和推进项目能力,有责任心
4. 熟练掌握HTML、JavaScript等前端技术,具有用户行为分析能力;
5. 具备良好而规范的设计和技术文档编写能力;
6. 掌握Linux/FreeBSD操作系统web环境配置的各种优化方案,掌握网站访问速度的各种优化方案;
7. 有大型网站开发经验者优先。

———————————————————————————————

测试工程师
职位描述:
1. 负责产品的测试工作;
2. 负责产品需求的评审;
3. 负责产品测试用例的编写。

职位要求
1.两年以上互联网产品测试经验
2.熟悉Linux或Unix操作系统,能使用常用命令
3.熟悉压力测试工具
4.具有一定分析问题能力,能够控制测试工作的进度
5.有自动化测试经验者优先

————————————————————————————————

无线开发工程师
职位描述:
1. 负责无线产品的接入工作;
2. 负责高并发底层项目的开发工作;
职位要求:
1.有3年以上无线相关开发经验;
2.精通CMPP、SGIP协议
3.有linux下c开发经验,对算法设计、数据结构有深刻的理解;
4.具有高并发、多线程的处理经验;
5.有良好的代码阅读能力和理解能力;
6.有良好的英文读写能力;
7.有一定的web经验,有一定PHP,PERL等网络语言开发经验者优先;