日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python使用esmre代替ahocorasick实现ac自动机[多模匹配]

發(fā)布時間:2025/7/25 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python使用esmre代替ahocorasick实现ac自动机[多模匹配] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Toggle navigation

python使用esmre代替ahocorasick實現(xiàn)ac自動機[多模匹配]

6-13 python rfyiamcool 368 views

python使用esmre代替ahocorasick實現(xiàn)ac自動機[多模匹配]

6-13 368 views

為什么會用AC自動機? 如果你想知道一篇文章有沒有你要過濾的敏感詞,怎么辦? 不可能用正則一個個的匹配吧? ?敏感詞超過300個之后,用Trie來構建模式樹 (字典樹)的速度優(yōu)勢相當?shù)拿黠@… …

Hello Boys , 文章的原文轉自?http://xiaorui.cc? ?http://xiaorui.cc/?p=1649


特別說下,trie圖也是一種DFA,可以由trie樹為基礎構造出來,對于插入的每個模式串,其插入過程中使用的最后一個節(jié)點都作為DFA的一個終止節(jié)點。

如果要求一個母串包含哪些模式串,以用母串作為DFA的輸入,在DFA 上行走,走到終止節(jié)點,就意味著匹配了相應的模式串。

ps: AC自動機是Trie的一種實現(xiàn),也就是說AC自動機是構造Trie圖的DFA的一種方法。還有別的構造DFA的方法…?

不扯淡了,我們后端都是python寫的,python的ahocorasick模塊跟我們的業(yè)務不太匹配,問題是這樣的 ! ? ?如果你的服務是用來做敏感詞匹配,也就是說所有文章里面只要含有一個關鍵詞,那就說明匹配了。 ?但是我們的業(yè)務是文章中的所有能匹配到的關鍵詞都一一的抽取出來。 ? 我想有些朋友可能還不太明白,那么我舉個例子, 如果我的關鍵詞里面有寶馬和馬,那么用python的ahocorasick庫只會得到寶馬,而不會得到馬。 ?問題是處在馬這個字節(jié)是在寶馬的鏈條里面的。 ?如何避開這個問題,我們也懶得自己重寫了,已經(jīng)有人給出了解決的模塊。 ?已經(jīng)測試完成,并上線使用了。?

安裝簡單,直接pip install esmre

Python import esm index = esm.Index() index.enter("寶馬") index.enter("馬") index.enter("奔馳") index.enter("保時捷") index.fix() index.query("哎呀,今天在樓下看到了寶馬,我老家倒是有養(yǎng)馬的,以前的鄰居有個奔馳,不對是保時捷,大爺?shù)?#xff0c;都是馬")
1 2 3 4 5 6 7 8 9 10 import esm index = esm.Index() index.enter("寶馬") index.enter("馬") index.enter("奔馳") index.enter("保時捷") index.fix() index.query("哎呀,今天在樓下看到了寶馬,我老家倒是有養(yǎng)馬的,以前的鄰居有個奔馳,不對是保時捷,大爺?shù)?#xff0c;都是馬")

再來一個完整的例子. ?后續(xù)有時間我會把ac自動機的服務集成到rpc服務里面,然后用docker打包。

Python #coding:utf-8 import esm index = esm.Index() with open('keyword.config','r') as f:for i in f.readlines():index.enter(i.strip())index.fix()str = """ head&shoulders海飛絲Hershey‘s Loreal歐萊雅LUX2 力士 L’OREALMagic2 美即 MysteryCity 謎城 NO.1BABY2 RESIN SANXIAO SHISEIDO FINE TOILETRY2 SKII美之匙 Tao yu tang2 淘雨堂 whoo倍加潔 卡爾林奈 嬌韻詩 德國幫寶適 Perfect puff2 See Young2 落健 高夫 """ data = index.query(str) print data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #coding:utf-8 import esm index = esm.Index() with open('keyword.config','r') as f: ????for i in f.readlines(): ????????index.enter(i.strip()) ????index.fix() str = """ head&shoulders海飛絲Hershey‘s Loreal歐萊雅LUX2 力士 L’OREALMagic2 美即 MysteryCity 謎城 NO.1BABY2 RESIN SANXIAO SHISEIDO FINE TOILETRY2 SKII美之匙 Tao yu tang2 淘雨堂 whoo倍加潔 卡爾林奈 嬌韻詩 德國幫寶適 Perfect puff2 See Young2 落健 高夫 """ data = index.query(str) print data


測了幾天,性能還是可以的,500KB的文章,6000多個關鍵詞,消耗的時間在0.002左右,相比ahocorasick一點都不差的。 ?觀察了下,esmre是沒有發(fā)現(xiàn)內(nèi)存異常泄露等問題。

Python [2015-06-12 23:34:01,043] INFO extractor "Get keywords takes 0.0003 seconds" [2015-06-12 23:34:01,069] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:01,178] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:02,372] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:02,386] INFO extractor "Get keywords takes 0.0012 seconds" [2015-06-12 23:34:02,631] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:03,656] INFO extractor "Get keywords takes 0.0021 seconds" [2015-06-12 23:34:03,744] INFO extractor "Get keywords takes 0.0001 seconds" [2015-06-12 23:34:03,785] INFO extractor "Get keywords takes 0.0001 seconds" [2015-06-12 23:34:03,910] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:04,031] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:05,004] INFO extractor "Get keywords takes 0.0035 seconds" [2015-06-12 23:34:05,579] INFO extractor "Get keywords takes 0.0055 seconds" [2015-06-12 23:34:05,602] INFO extractor "Get keywords takes 0.0005 seconds" [2015-06-12 23:34:05,662] INFO extractor "Get keywords takes 0.0010 seconds" [2015-06-12 23:34:06,125] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:06,299] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:06,404] INFO extractor "Get keywords takes 0.0003 seconds" [2015-06-12 23:34:07,396] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:07,595] INFO extractor "Get keywords takes 0.0004 seconds" [2015-06-12 23:34:08,725] INFO extractor "Get keywords takes 0.0015 seconds" [2015-06-12 23:34:09,504] INFO extractor "Get keywords takes 0.0004 seconds" [2015-06-12 23:34:09,515] INFO extractor "Get keywords takes 0.0005 seconds" [2015-06-12 23:34:10,650] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:11,206] INFO extractor "Get keywords takes 0.0003 seconds" [2015-06-12 23:34:12,298] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:12,319] INFO extractor "Get keywords takes 0.0001 seconds" [2015-06-12 23:34:13,547] INFO extractor "Get keywords takes 0.0006 seconds" [2015-06-12 23:34:13,853] INFO extractor "Get keywords takes 0.0005 seconds"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [2015-06-12 23:34:01,043] INFO extractor "Get keywords takes 0.0003 seconds" [2015-06-12 23:34:01,069] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:01,178] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:02,372] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:02,386] INFO extractor "Get keywords takes 0.0012 seconds" [2015-06-12 23:34:02,631] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:03,656] INFO extractor "Get keywords takes 0.0021 seconds" [2015-06-12 23:34:03,744] INFO extractor "Get keywords takes 0.0001 seconds" [2015-06-12 23:34:03,785] INFO extractor "Get keywords takes 0.0001 seconds" [2015-06-12 23:34:03,910] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:04,031] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:05,004] INFO extractor "Get keywords takes 0.0035 seconds" [2015-06-12 23:34:05,579] INFO extractor "Get keywords takes 0.0055 seconds" [2015-06-12 23:34:05,602] INFO extractor "Get keywords takes 0.0005 seconds" [2015-06-12 23:34:05,662] INFO extractor "Get keywords takes 0.0010 seconds" [2015-06-12 23:34:06,125] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:06,299] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:06,404] INFO extractor "Get keywords takes 0.0003 seconds" [2015-06-12 23:34:07,396] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:07,595] INFO extractor "Get keywords takes 0.0004 seconds" [2015-06-12 23:34:08,725] INFO extractor "Get keywords takes 0.0015 seconds" [2015-06-12 23:34:09,504] INFO extractor "Get keywords takes 0.0004 seconds" [2015-06-12 23:34:09,515] INFO extractor "Get keywords takes 0.0005 seconds" [2015-06-12 23:34:10,650] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:11,206] INFO extractor "Get keywords takes 0.0003 seconds" [2015-06-12 23:34:12,298] INFO extractor "Get keywords takes 0.0002 seconds" [2015-06-12 23:34:12,319] INFO extractor "Get keywords takes 0.0001 seconds" [2015-06-12 23:34:13,547] INFO extractor "Get keywords takes 0.0006 seconds" [2015-06-12 23:34:13,853] INFO extractor "Get keywords takes 0.0005 seconds"

相關的文章

  • python下的ahocorasick實現(xiàn)快速的關鍵字匹配
  • 分享python實現(xiàn)的lfu緩存模塊-pylfu
  • 淺談twisted應用中異步回調(diào)的方式及線程的應用
  • python調(diào)用zookeeper管理thrift集群可用性隊列
  • 利用google authenticator構建平臺的otp動態(tài)口令
  • 解決hbase跑mapreduce時遇到內(nèi)存及超時問題
  • 線上測試docker在cpu密集運算的場景下性能的表現(xiàn)
  • python實現(xiàn)最少使用算法lru包括dict和list隊列
  • nginx1.9新模塊ngx_stream_core_module實現(xiàn)stream tcp負載均衡
  • 針對redis的HyperLogLog做基數(shù)統(tǒng)計性能測試
  • 用gevent開發(fā)非阻塞的etcd python客戶端模塊
  • 聊聊python的輕量級orm peewee及對比SQLAlchemy

別倒貼,要不整死你

原文地址:http://xiaorui.cc/2015/06/13/python%e4%bd%bf%e7%94%a8esmre%e4%bb%a3%e6%9b%bfahocorasick%e5%ae%9e%e7%8e%b0ac%e8%87%aa%e5%8a%a8%e6%9c%ba%e5%a4%9a%e6%a8%a1%e5%8c%b9%e9%85%8d/

轉載時必須以鏈接形式注明原始出處及本聲明。

您可能也喜歡: 暫無相關產(chǎn)品

公告

我的另一個博客,偏向運維方面的 ~ ops.xiaorui.cc

有事可以發(fā)郵件,rfyiamcool@163.com

我個人的github地址是,github.com/rfyiamcool

我給pypi提交過的項目,[話說曾經(jīng)被刪過一些] ?pypi地址



最近訪客

    標簽

    ansibleansible apidjango tornadodockerdocker apielasticsearchelketcdgeventgolanggunicornhappybaseInfluxdbInfluxDB 性能kibanakibana4logstashpythonpython celerypython dockerpython elasticsearchpython etcdpython geventpython gunicornpython happybasepython hbasepython influxdbpython mongodbpython multiprocessingpython redispython rqpython socketpython threadpoolpython thriftpython zabbixpython 任務隊列python 校驗數(shù)據(jù)python 緩存redisredis clustersaltstacksaltstack apizabbixzabbix二次開發(fā)zabbix開發(fā) 最熱文章
    • 大數(shù)據(jù)公司招聘高級python程序員10
    • 使用python實現(xiàn)高性能代理服務器 [tornado proxy]9
    • TB級mysql數(shù)據(jù)之xtrabackup壓縮備份遷移方案9
    • 對于nginx線程池thread pool提高性能的疑惑6
    • 高薪招聘Devops web 運維開發(fā)工程師6
    • python版shadowsocks流量及用戶管理開發(fā)5
    • docker無法用exec進入容器的問題[cannot allocate4
    • 使用python的mysqldb做like模糊查詢時遇到的問題4
    • 大數(shù)據(jù)公司招聘高級python程序員10
    • 使用python實現(xiàn)高性能代理服務器 [tornado 9
    • TB級mysql數(shù)據(jù)之xtrabackup壓縮備份遷移方9
    • 對于nginx線程池thread pool提高性能的疑惑6
    • 高薪招聘Devops web 運維開發(fā)工程師6
    • python版shadowsocks流量及用戶管理開發(fā)5
    • docker無法用exec進入容器的問題[cannot al4
    • 使用python的mysqldb做like模糊查詢時遇到4
    • 大數(shù)據(jù)公司招聘高級python程序員10
    • 使用python實現(xiàn)高性能代理服務器 [tornado proxy]9
    • TB級mysql數(shù)據(jù)之xtrabackup壓縮備份遷移方案9
    • 對于nginx線程池thread pool提高性能的疑惑6
    • 高薪招聘Devops web 運維開發(fā)工程師6
    • python版shadowsocks流量及用戶管理開發(fā)5
    • docker無法用exec進入容器的問題[cannot allocate memory]4
    • 使用python的mysqldb做like模糊查詢時遇到的問題4
    最新評論
    • 支持 難得的好文?
    • 哥,請教下 俺配置的elk環(huán)境 kiba...?
    • 還行吧?
    • 沒看明白?
    • 要求高呀?
    • 屌大. 我搜索點資料又到你這里了 . 喝...?
    • 支持 難得的好文?
    • 哥,請教下 俺配置的elk環(huán)境...?
    • 還行吧?
    • 沒看明白?
    • 要求高呀?
    • 屌大. 我搜索點資料又到你這里...?
    隨機文章
    • 使用iptables管理docker容器... 使用iptables管理doc... 0
    • 關于數(shù)據(jù)寫入的etcd http api... 關于數(shù)據(jù)寫入的etcd htt... 1
    • docker中使用logrotate對l... docker中使用logrot... 0
    • Flask使用token來防御csrf跨... Flask使用token來防御... 2
    • 使用python PIL庫實現(xiàn)復雜的圖片... 使用python PIL庫實現(xiàn)... 1
    • nginx tcp實現(xiàn)hbase thr... nginx tcp實現(xiàn)hbas... 2
    • 實時監(jiān)控之a(chǎn)jax動態(tài)填充highcha... 實時監(jiān)控之a(chǎn)jax動態(tài)填充hi... 0
    • 通過運維工具ansible api來做平... 通過運維工具ansible a... 0
    • ansible
    • backbone
    • DB
    • docker
    • easyui
    • git
    • Golang
    • mongodb
    • postgresql
    • python
    • saltstack
    • tornado
    • web
    • zabbix
    • 文藝
    • 未分類
    • 運維
    • 運維基礎
    • 運維開發(fā)
    ansibleansible apidjango tornadodockerdocker apielasticsearchelketcdgeventgolanggolang httpgolang nosqlgolang 并發(fā)grafanagunicornhappybaseInfluxdbInfluxdb grafanaInfluxDB 性能kibanakibana4logstashpythonpython celerypython dockerpython elasticsearchpython etcdpython geventpython gunicornpython happybasepython hbasepython influxdbpython mongodbpython multiprocessingpython redispython rqpython socketpython threadpoolpython thriftpython zabbixpython 任務隊列python 校驗數(shù)據(jù)python 緩存redisredis clustersaltstacksaltstack apizabbixzabbix二次開發(fā)zabbix開發(fā) 文章存檔 Copyright ? 2013. 峰云就她了,專注與運維自動化平臺.

    總結

    以上是生活随笔為你收集整理的python使用esmre代替ahocorasick实现ac自动机[多模匹配]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。