最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 實(shí)現(xiàn)敏感詞過(guò)濾的方法

 更新時(shí)間:2019年01月21日 10:08:57   作者:isoleo  
今天小編就為大家分享一篇python 實(shí)現(xiàn)敏感詞過(guò)濾的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

如下所示:

#!/usr/bin/python2.6  
# -*- coding: utf-8 -*- 
import time 
class Node(object): 
  def __init__(self): 
    self.children = None 
 
# The encode of word is UTF-8 
def add_word(root,word): 
  node = root 
  for i in range(len(word)): 
    if node.children == None: 
      node.children = {} 
      node.children[word[i]] = Node() 
 
    elif word[i] not in node.children: 
      node.children[word[i]] = Node() 
 
    node = node.children[word[i]] 
 
def init(path): 
  root = Node() 
  fp = open(path,'r') 
  for line in fp: 
    line = line[0:-1] 
    #print len(line) 
    #print line 
    #print type(line) 
    add_word(root,line) 
  fp.close() 
  return root 
 
# The encode of word is UTF-8 
# The encode of message is UTF-8 
def is_contain(message, root): 
  for i in range(len(message)): 
    p = root 
    j = i 
    while (j<len(message) and p.children!=None and message[j] in p.children): 
      p = p.children[message[j]] 
      j = j + 1 
 
    if p.children==None: 
      #print '---word---',message[i:j] 
      return True 
   
  return False 
 
 
 
def dfa(): 
  print '----------------dfa-----------' 
  root = init('/tmp/word.txt') 
 
  #message = '不顧' 
  print '***message***',len(message) 
  start_time = time.time() 
  for i in range(1000): 
    res = is_contain(message,root) 
    #print res 
  end_time = time.time() 
  print (end_time - start_time)  
 
def is_contain2(message,word_list): 
  for item in word_list: 
    if message.find(item)!=-1: 
      return True 
  return False 
 
def normal(): 
  print '------------normal--------------' 
  path = '/tmp/word.txt' 
  fp = open(path,'r') 
  word_list = [] 
  print '***message***',len(message) 
  for line in fp: 
    line = line[0:-1] 
    word_list.append(line) 
  fp.close() 
  print 'The count of word:',len(word_list) 
  start_time = time.time() 
  for i in range(1000): 
    res = is_contain2(message,word_list) 
    #print res 
  end_time = time.time() 
  print (end_time - start_time)  
 
 
if __name__ == '__main__': 
  dfa() 
  normal() 

測(cè)試結(jié)果:

1) 敏感詞 100個(gè)

----------------dfa-----------
***message*** 224
0.325479984283
------------normal--------------
***message*** 224
The count of word: 100
0.107350111008

2) 敏感詞 1000 個(gè)

----------------dfa-----------
***message*** 224
0.324251890182
------------normal--------------
***message*** 224
The count of word: 1000
1.05939006805

從上面的實(shí)驗(yàn)我們可以看出,在DFA 算法只有在敏感詞較多的情況下,才有意義。在百來(lái)個(gè)敏感詞的情況下,甚至不如普通算法

下面從理論上推導(dǎo)時(shí)間復(fù)雜度,為了方便分析,首先假定消息文本是等長(zhǎng)的,長(zhǎng)度為lenA;每個(gè)敏感詞的長(zhǎng)度相同,長(zhǎng)度為lenB,敏感詞的個(gè)數(shù)是m。

1) DFA算法的核心是構(gòu)建一棵多叉樹,由于我們已經(jīng)假設(shè),敏感詞的長(zhǎng)度相同,所以樹的最大深度為lenB,那么我們可以說(shuō)從消息文本的某個(gè)位置(字節(jié))開始的某個(gè)子串是否在敏感詞樹中,最多只用經(jīng)過(guò)lenB次匹配.也就是說(shuō)判斷一個(gè)消息文本中是否有敏感詞的時(shí)間復(fù)雜度是lenA * lenB

2) 再來(lái)看看普通做法,是使用for循環(huán),對(duì)每一個(gè)敏感詞,依次在消息文本中進(jìn)行查找,假定字符串是使用KMP算法,KMP算法的時(shí)間復(fù)雜度是O(lenA + lenB)

那么對(duì)m個(gè)敏感詞查找的時(shí)間復(fù)雜度是 (lenA + lenB ) * m

綜上所述,DFA 算法的時(shí)間復(fù)雜度基本上是與敏感詞的個(gè)數(shù)無(wú)關(guān)的。

以上這篇python 實(shí)現(xiàn)敏感詞過(guò)濾的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python超詳細(xì)講解內(nèi)存管理機(jī)制

    Python超詳細(xì)講解內(nèi)存管理機(jī)制

    本章主要介紹Pyhon的內(nèi)存管理,以Pyhon的計(jì)數(shù)機(jī)制作為引入,介紹Pyhon的內(nèi)存管理方式,感興趣的朋友來(lái)看看吧
    2022-06-06
  • Python面向?qū)ο蟮膬?nèi)置方法梳理講解

    Python面向?qū)ο蟮膬?nèi)置方法梳理講解

    面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對(duì)象”來(lái)實(shí)現(xiàn),所以,面向?qū)ο缶幊唐鋵?shí)就是對(duì) “類”和“對(duì)象” 的使用,今天給大家介紹下python 面向?qū)ο箝_發(fā)及基本特征,感興趣的朋友一起看看吧
    2022-10-10
  • Python pip通過(guò)requirements.txt 文件安裝依賴

    Python pip通過(guò)requirements.txt 文件安裝依賴

    requirements.txt是定義項(xiàng)目依賴的python包,可通過(guò)工具生成,本文主要介紹了Python pip通過(guò)requirements.txt文件安裝依賴,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • python中列表的常見操作梳理總結(jié)(二)

    python中列表的常見操作梳理總結(jié)(二)

    這篇文章主要介紹了python中列表的常見操作總結(jié),文章圍通過(guò)列表的索引與切片的相關(guān)資料展開全文詳細(xì)的內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • 詳解Python 函數(shù)如何重載?

    詳解Python 函數(shù)如何重載?

    這篇文章主要介紹了Python函數(shù)重載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 低版本中Python除法運(yùn)算小技巧

    低版本中Python除法運(yùn)算小技巧

    這篇文章主要介紹了低版本中Python除法運(yùn)算小技巧,python 2.5版本中存在兩種除法運(yùn)算,即所謂的true除法和floor除法,本文講解了兩種方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • 終端命令查看TensorFlow版本號(hào)及路徑的方法

    終端命令查看TensorFlow版本號(hào)及路徑的方法

    今天小編就為大家分享一篇終端命令查看TensorFlow版本號(hào)及路徑的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Google colab中從kaggle中接入數(shù)據(jù)的操作方法

    Google colab中從kaggle中接入數(shù)據(jù)的操作方法

    這篇文章主要介紹了Google colab中如何從kaggle中接入數(shù)據(jù),本文涉及到兩大平臺(tái)內(nèi)容,所以我默認(rèn)你已經(jīng)擁有了,并且使用過(guò)了一段時(shí)間的google賬號(hào)和kaggle賬號(hào),需要的朋友可以參考下
    2024-03-03
  • Python實(shí)現(xiàn)將MongoDB中的數(shù)據(jù)導(dǎo)入到MySQL

    Python實(shí)現(xiàn)將MongoDB中的數(shù)據(jù)導(dǎo)入到MySQL

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python封裝一個(gè)將?MongoDB?中的數(shù)據(jù)導(dǎo)入到?MySQL?中的?Python?工具類?MongoToMysql,感興趣的可以了解一下
    2023-05-05
  • python實(shí)現(xiàn)xlwt xlrd 指定條件給excel行添加顏色

    python實(shí)現(xiàn)xlwt xlrd 指定條件給excel行添加顏色

    這篇文章主要介紹了python實(shí)現(xiàn)xlwt xlrd 指定條件給excel行添加顏色,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07

最新評(píng)論

柏乡县| 高要市| 两当县| 平利县| 靖远县| 凤翔县| 双桥区| 类乌齐县| 台湾省| 共和县| 喀什市| 界首市| 北流市| 余庆县| 曲沃县| 江门市| 柳河县| 团风县| 东阳市| 无棣县| 临沂市| 东辽县| 武川县| 赣榆县| 都匀市| 新丰县| 湘潭县| 芒康县| 巴东县| 清水河县| 乌拉特后旗| 和林格尔县| 西城区| 开江县| 宝兴县| 龙江县| 井冈山市| 呼玛县| 长寿区| 东乡| 池州市|