我们针对抓取来的页面进行关键词匹配,但是随着爬虫的量级越来越大,关键词计算有些算不过来….  数据队列已经到了100w左右….  又在多个节点上,发布了docker化的关键词匹配服务。  关键词匹配服务的服务器数量已经到了10台,里面的代码逻辑已经做到最优,相关的算法也是用的ac自动机(ahocorasick),我们也看了下python的ahocorasick实现代码,可以说这老外写得不错,代码质量很高,算法实现也很清晰。 在python ahocorasick模块也没几个可以选。   同事小军也在折腾关于他那边业务的ac自动机逻辑,会出现一个问题。 举个例子,我的关键字是 iphone  ,我匹配的内容是 “iphone iphone5 iphone6″ ,但是用python下的ahocorasick匹配的结果是iphone,没有匹配到iphone5和6。 根据ac自动机原理,他是可以匹配到iphone5的,java版本是可以全部匹配的。    个人觉得,python ahocorasick 是做了相关的匹配精度,所有才没有把iphone5匹配到。  

http://xiaorui.cc/?p=1535


正体,python的gil限制了他计算的性能,这种多匹配模式也不太适合用multiprocessing多进程。 今天正好同事分享了golang,那,重新拾起我曾经抛弃的golang,来解决性能问题。  后期会做成http api服务,供业务层接入。 

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
go get github.com/gansidui/ahocorasick
go build ac.go



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

python下的ahocorasick实现快速的关键字匹配

这两天在折腾下数据的分析及导出,爬虫抓取页面的时候,我们会坐做关键字的匹配,在数据库中标记这个url是否有我们需要的关键字。 这个时候你不能再用find(...

阅读全文

发表评论