日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

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

python使用esmre代替ahocorasick實(shí)現(xiàn)ac自動(dòng)機(jī)[多模匹配]

6-13 python rfyiamcool 368 views

python使用esmre代替ahocorasick實(shí)現(xiàn)ac自動(dòng)機(jī)[多模匹配]

6-13 368 views

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

Hello Boys , 文章的原文轉(zhuǎn)自?http://xiaorui.cc? ?http://xiaorui.cc/?p=1649


特別說(shuō)下,trie圖也是一種DFA,可以由trie樹(shù)為基礎(chǔ)構(gòu)造出來(lái),對(duì)于插入的每個(gè)模式串,其插入過(guò)程中使用的最后一個(gè)節(jié)點(diǎn)都作為DFA的一個(gè)終止節(jié)點(diǎn)。

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

ps: AC自動(dòng)機(jī)是Trie的一種實(shí)現(xiàn),也就是說(shuō)AC自動(dòng)機(jī)是構(gòu)造Trie圖的DFA的一種方法。還有別的構(gòu)造DFA的方法…?

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

安裝簡(jiǎn)單,直接pip install esmre

Python import esm index = esm.Index() index.enter("寶馬") index.enter("馬") index.enter("奔馳") index.enter("保時(shí)捷") index.fix() index.query("哎呀,今天在樓下看到了寶馬,我老家倒是有養(yǎng)馬的,以前的鄰居有個(gè)奔馳,不對(duì)是保時(shí)捷,大爺?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("保時(shí)捷") index.fix() index.query("哎呀,今天在樓下看到了寶馬,我老家倒是有養(yǎng)馬的,以前的鄰居有個(gè)奔馳,不對(duì)是保時(shí)捷,大爺?shù)?#xff0c;都是馬")

再來(lái)一個(gè)完整的例子. ?后續(xù)有時(shí)間我會(huì)把a(bǔ)c自動(dòng)機(jī)的服務(wù)集成到rpc服務(wù)里面,然后用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倍加潔 卡爾林奈 嬌韻詩(shī) 德國(guó)幫寶適 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倍加潔 卡爾林奈 嬌韻詩(shī) 德國(guó)幫寶適 Perfect puff2 See Young2 落健 高夫 """ data = index.query(str) print data


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

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"

相關(guān)的文章

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

轉(zhuǎn)載時(shí)必須以鏈接形式注明原始出處及本聲明。

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

公告

我的另一個(gè)博客,偏向運(yùn)維方面的 ~ ops.xiaorui.cc

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

我個(gè)人的github地址是,github.com/rfyiamcool

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



最近訪客

    標(biāo)簽

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

    總結(jié)

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

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