分享
  1. 首页
  2. 文章

使用golang实现ac自动机(ahocorasick)的api接口

rfyiamcool · · 4681 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

我们针对抓取来的页面进行关键词匹配,但是随着爬虫的量级越来越大,关键词计算有些算不过来.... 数据队列已经到了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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import(
"fmt"
"github.com/gansidui/ahocorasick"
)
func main(){
ac:=ahocorasick.NewMatcher()
dictionary:=[]string{"hello","world","nima","google","golang","c++","xiaorui"}
ac.Build(dictionary)
ret:=ac.Match("hello golang google, i love golang!!! xiaorui xiaorui.cc")
for_,i:=rangeret{
fmt.Println(dictionary[i])
}
}

有疑问加站长微信联系(非本文作者)

本文来自:峰云就她了

感谢作者:rfyiamcool

查看原文:使用golang实现ac自动机(ahocorasick)的api接口

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4681 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏