判斷一段文本中是否包含一個字典中的某個詞
布隆算法
什么情況下需要布隆過濾器?--避免高內存
先來看幾個比較常見的例子
- 字處理軟件中,需要檢查一個英語單詞是否拼寫正確
- 在 FBI,一個嫌疑人的名字是否已經在嫌疑名單上
- 在網絡爬蟲里,一個網址是否被訪問過
- yahoo, gmail等郵箱垃圾郵件過濾功能
這幾個例子有一個共同的特點: 如何判斷一個元素是否存在一個集合中?
常規思路
- 數組
- 鏈表
- 樹、平衡二叉樹、Trie
- Map (紅黑樹)
- 哈希表
對於低內存的字典,方法如下:
1
import jieba 2 def check(s): 3 huangfan_path = 'path/to/dict.txt' 4 jieba.load_userdict(huangfan_path) 5 huangfan_words_dict = set() 6 with open(huangfan_path, 'rb') as fr: 7 for line in fr.readlines(): 8 huangfan_words_dict.add(line.strip().decode('utf-8')) 9 return set(jieba.lcut(s)) & self.huangfan_words_dict