xpath提取HTML

之前用python写HTML页面的提取一般是用BeautifulSoup,一直都觉得其速度慢,而且提取结果容易受页面变化的影响。这两天写提取的时候,看到了xpath这个工具。单纯从提取速度来看,xpath与正则表达式是相近的,几乎有BeautifulSoup十倍以上的速度。XPath与BeautifulSoup的对比可以参考这篇文章《Python网页解析:BeautifulSoup vs lxml.html》

Read more »

vim下的python调试环境

大家一直都把vim当成编辑器,可是我已经改观了,vim太强大了。今天在找vim下的python断点调试的方法,果然不是问题。通用DBGPavim插件就能实现断点调试。下面是它用来调试php的原理图,python也是一样的。

原理也不难理解,DBGPavim在vim上开启了一个服务端,通用网络接收程序的运行状态并通过vim展示出来。这里php是通过Xdebug做为调试器与DBGPavim通信的。Python则是用ActiveState提供的Komodo Python Remote Debugging Client的调试器运行的。

Read more »

相关推荐与个性化推荐

做市场类的产品,往往会有一些推荐功能,淘宝、亚马逊猜用户喜欢的产品,豆瓣猜用户喜欢的节目等。各种应用市场都会有给用户推荐应用的功能,比较常见的有下载完软件推荐相关的软件和根据用户记录个性化推荐应用。前一种比较好实现,个性化推荐则麻烦一些,需要较大的数据做支撑。这几天实现了相关推荐和实现了一个简单版本的个性化推荐,简要记录下来。

有几篇关于推荐的文章,推荐一下:
探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤
探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类

Read more »

搜索提示词简记

搜索提示词是指用户在搜索框上输入出,弹出的扩展词,是对用户目标搜索词的猜测。在动手实现之前,在网上找了一些相关的资料,大多是一些理论算法的实现,比如搜索智能提示suggestion

在实际工作中,这些算法只是基础,要现实能满足各种变化的需求,还需要做很多工作。现在有些开源搜索引擎也有提供提示词的功能。而我这里记录是通过额外搭建一个搜索实现的,通过搭建搜索,可以更灵活地应对需求。

我做的是安卓的应用搜索提示词,下面是最终的效果图:

Read more »

vim配置语言简记

一直在用vim,以前找了一些简单的资料配置了一下,并没有仔细去了解这它设置的内容。这次特地花了一些时间学习。仔细学习,才更觉得vim的强大,光是说明文档,应该就够整一本厚厚的说明书了。vim配置相关的文件主要有vimrc和.vim目录下的扩展文件,vimrc的配置就是一门比较完的脚本语言。

vimrc的配置是一种脚本语言,可以导入其他配置、定义变量、执行程序、编写函数,vim的插件就是用这个脚本语言编写的。脚本的语法可以从http://vimcdoc.sourceforge.net/doc/usr_41.html学习,中文版的。简要提一下一些要点。vim语法比较奇怪的注释用"开头。

Read more »

关于单元测试

这段时间,部门的工作基本上都进入了正轨,现在需要从头开发的工作已经很少了,大多是在已有的基础上做修改。跟我直接相关的项目有三四个,经常一天要在多个项目间切换,要很快地在项目间切换状态,挺不容易的。

经常遇到的问题是,改完旧的代码后,不知道怎么测试,功能点都忘得差不多了。然后就是开始翻文档,看需求,再找到测试的url或者写测试的程序。当初写代码的时候,都是以完成需求为目标,程序小的时候,也没什么问题,后面程序大了,就有了些压力。现在做维护和修改就更没底了,很多时候,要来来回回很多次,才能通过。

近来整理了一些以前写的代码,把一些通用的东西提取成库。写开发库跟业务开发不样,代码要严谨得多,我开始看编码规范、参考别人写的库,也就是这样,我才再次注意到了单元测试。

Read more »

coreseek 性能测试(sphinx)

对coreseek进行性能测试,看看单机各个索引量的搜索性能。从结果上看,数据到了五千万就要很长的生成时间了,而且容易出错,需要做一些设置。到了千万级别时,只索引数据,最好不要存属性字段。

Read more »

编写HTTP接口测试

整理了一段时间的搜索接口,新接口终于上线了。现在搜索的php接口分为线上和测试两个部分,有改动先在测试接口上进行修改,确定没有问题再复制到线上去。
现在遇到一个问题是,公司没有测试人员给我们测试搜索接口,只能自己测试。要自己测试接口可是个麻烦事,程序员总是很难发现自己程序中的bug。所以我们考虑编写程序对接口进行测试。
我们将测试内容分成两种,一种是可预见结果的测试,比如效果评估、非法变动等,另一种则为不可预见的结果的测试。

Read more »