判断文本中字符串是否在字典中 判断一个元素是否存在一个集合中

判断一段文本中是否包含一个字典中的某个词

布隆算法算法

什么状况下须要布隆过滤器?--避免高内存

先来看几个比较常见的例子数组

  • 字处理软件中,须要检查一个英语单词是否拼写正确
  • 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上
  • 在网络爬虫里,一个网址是否被访问过
  • yahoo, gmail等邮箱垃圾邮件过滤功能

这几个例子有一个共同的特色: 如何判断一个元素是否存在一个集合中?网络

常规思路

  • 数组
  • 链表
  • 树、平衡二叉树、Trie
  • Map (红黑树)
  • 哈希表

对于低内存的字典,方法以下:spa

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