使用golang實現ac自動機(ahocorasick)的api介面

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

我們針對抓取來的頁面進行關鍵詞匹配,但是隨著爬蟲的量級越來越大,關鍵詞計算有些算不過來….  資料隊列已經到了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

Pythonpackage mainimport ( "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 := range ret { fmt.Println(dictionary[i]) }}
123456789101112131415161718192021  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 := range ret {        fmt.Println(dictionary[i])    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.