敏感詞過濾
生活在**的**,必須要有保持和諧的工具。根據**的規模不同選擇不同的技術方案:
1.前期上乙個敏感詞過濾系統,發的文章只要命中敏感詞就不讓發。
2.後期可以通過機器學習來自動識別一篇簡歷是否是正常簡歷,一篇正常簡歷的特徵還是很明顯的,通過訓練機器識別正常簡歷的語料,能讓機器自動判斷是否是違規資訊。
敏感詞過濾系統
比如檢測使用者輸入的一篇文章中是否含有網安給的違禁詞列表。現在正常的做法都是通過trie 樹來實現。trie 樹的基本原理基於這樣乙個事實:假設我從文字中查詢的單詞是abcd,那麼在他前面的單詞中,以b,c,d,f之類開頭的我顯然不必考慮。
以「中華人民」為例顯示在trie樹中字典的儲存結構:
上圖中每乙個節點都表示乙個trienode,每個trienode有乙個dict和val,root是乙個打平的dict,包含違禁詞中所有開頭的第乙個字。
比如詞典在文字中儲存格式是:
中華
中華書局
中華書庫
中華人民
國家國家專利
國家專利局
那麼root這個節點中dict的key包含['中','國']。
python的實現:
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import codecs
import time
class trienode:
def __init__ (self):
self.val = 0
self.trans = {}
class trie (object):
def __init__ (self):
self.root = trienode()
def __walk (self, trienode, ch):
if ch in trienode.trans:
trienode = trienode.trans[ch]
return trienode, trienode.val
else:
return none, 0
def add (self, word, value=1):
curr_node = self.root
for ch in word:
try:
curr_node = curr_node.trans[ch]
except:
curr_node.trans[ch] = trienode()
curr_node = curr_node.trans[ch]
curr_node.val = value
def _find_ch(self,curr_node,ch,word,start,limit):
curr_node, val = self.__walk (curr_node, ch)
if val:
return val
while curr_node is not none and start
start= start+1
ch = word[start]
curr_node, val = self.__walk (curr_node, ch)
if val:
return val
def match_all (self, word):
ret =
curr_node = self.root
index = 0
size = len(word)
while index
val = self._find_ch(curr_node,word[index], word, index, size)
if val:
index=index+1
return ret
class dict (trie):
def __init__(self, fname):
super (dict, self).__init__()
self.load(fname)
def load(self, fname):
file = codecs.open(fname, 'r', 'utf-8')
for line in file:
word = line.strip()
self.add(word, word)
file.close()
if __name__ == "__main__":
dic = dict("/home/yunpeng/test3/data/words-forbidden-1_.dic")
for x in range(100):
starttime = time.time()
test_str = u"大慶讓胡路喇嘛甸**有找小***186-5555-2557娜娜【qq1968454688空間選小姐】**有小***186-5555-2557【qq1968454688空間選小姐】**有小***186-5555-2557娜娜【qq1968454688空間看**】無論朋友你常住本市。。 **找小***娜娜【186-5555-2557娜娜】還是閣下才來我市。這些都不重要。。**找小***186-5555-2557娜娜因為找我們在寂寞的深夜你不在感到孤單和寂寞。。"
ret = dic.match_all(test_str)
endtime = time.time()
exe_time = (endtime - starttime)*1000
print "find forbidden %s cost:%s" %(" ".join(ret),exe_time)
聊天系統違禁詞過濾
網路遊戲作為一種多人互動遊戲,方便玩家在遊戲中交流是很重要的。為了防止玩家在遊戲中說違禁的東西,所有的聊天系統都需要對聊天資訊進行過濾。本文描述了一種簡單的基於dfa的演算法用於過濾聊天內容中的違禁詞,演算法的執行複雜度,遍歷 輸入字串n,最多對每個字元執行一次二分查詢lgn,所以最壞情況下也是o ...
Trie樹 髒詞過濾應用
當前的 還只是進行簡單的替換,並沒有做一些字元的處理,比如 昨天見到你媽,逼我要買房 這本身不是髒詞,因為有逗號,所以程式裡要增加字元的範圍判斷。程式中的skip就是用來過濾髒詞的簡單變體,比如 找 小 姐 預設是最多跳過3個字元,這個可以隨便調整了。總之是乙個trie的鍛鍊吧。public cla...
C 實現敏感詞過濾 2 Trie類的實現
三 trie類的定義 trie.h include include include trienode.h class trie else else it second return result std string trie getkeywords std string result for tr...