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

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

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

如下所示:

#!/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() 

測試結(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 算法只有在敏感詞較多的情況下,才有意義。在百來個(gè)敏感詞的情況下,甚至不如普通算法

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

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

2) 再來看看普通做法,是使用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ù)無關(guān)的。

以上這篇python 實(shí)現(xiàn)敏感詞過濾的方法就是小編分享給大家的全部內(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)存管理方式,感興趣的朋友來看看吧
    2022-06-06
  • Python面向?qū)ο蟮膬?nèi)置方法梳理講解

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

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

    Python pip通過requirements.txt 文件安裝依賴

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

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

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

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

    這篇文章主要介紹了Python函數(shù)重載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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ì)大家有所幫助。一起跟隨小編過來看看吧
    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)擁有了,并且使用過了一段時(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ì)介紹了如何通過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ì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評(píng)論

阜康市| 尉氏县| 镶黄旗| 乾安县| 突泉县| 新绛县| 资阳市| 新沂市| 贵定县| 勃利县| 蓬溪县| 尉犁县| 乌审旗| 德惠市| 五台县| 阿克陶县| 无棣县| 会泽县| 沧源| 原平市| 吉木乃县| 满洲里市| 五家渠市| 乌兰浩特市| 常山县| 莫力| 新营市| 青海省| 同仁县| 恩平市| 溆浦县| 什邡市| 厦门市| 盖州市| 西吉县| 衢州市| 布拖县| 尉氏县| 名山县| 桦川县| 陆丰市|