您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用python如何過濾敏感詞,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Python主要應用于:1、Web開發;2、數據科學研究;3、網絡爬蟲;4、嵌入式應用開發;5、游戲開發;6、桌面應用開發。
如下所示:
#!/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 = '四處亂咬亂吠,嚇得家中11歲的女兒躲在屋里不敢出來,直到轄區派出所民警趕到后,才將孩子從屋中救出。最后在征得主人同意后,民警和村民合力將這只發瘋的狗打死' #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 = [] message = '四處亂咬亂吠,嚇得家中11歲的女兒躲在屋里不敢出來,直到轄區派出所民警趕到后,才將孩子從屋中救出。最后在征得主人同意后,民警和村民合力將這只發瘋的狗打死' 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()
測試結果:
1) 敏感詞 100個
----------------dfa----------- ***message*** 224 0.325479984283 ------------normal-------------- ***message*** 224 The count of word: 100 0.107350111008
2) 敏感詞 1000 個
----------------dfa----------- ***message*** 224 0.324251890182 ------------normal-------------- ***message*** 224 The count of word: 1000 1.05939006805
從上面的實驗我們可以看出,在DFA 算法只有在敏感詞較多的情況下,才有意義。在百來個敏感詞的情況下,甚至不如普通算法
下面從理論上推導時間復雜度,為了方便分析,首先假定消息文本是等長的,長度為lenA;每個敏感詞的長度相同,長度為lenB,敏感詞的個數是m。
1) DFA算法的核心是構建一棵多叉樹,由于我們已經假設,敏感詞的長度相同,所以樹的最大深度為lenB,那么我們可以說從消息文本的某個位置(字節)開始的某個子串是否在敏感詞樹中,最多只用經過lenB次匹配.也就是說判斷一個消息文本中是否有敏感詞的時間復雜度是lenA * lenB
2) 再來看看普通做法,是使用for循環,對每一個敏感詞,依次在消息文本中進行查找,假定字符串是使用KMP算法,KMP算法的時間復雜度是O(lenA + lenB)
上述就是小編為大家分享的使用python如何過濾敏感詞了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。