应用场景:
有时我们从网上采集了大量的关键词,因为是采集的,难免其中含有一些敏感关键词,如果是做中文站的话,最好将这些关键词去掉。在网上找到了一个Python脚本,不过是python 2.x的,我修改了一下,改成了python 3.X的,在改的过程中遭遇如下错误:
python TypeError: a bytes-like object is required, not 'str'
TypeError: 'in
' requires string as left operand, not bytes
其实主要是因为python2和python3的编码问题,只要将原代码中的“encode('utf-8')”这些去掉就可以了。
最终运行结果如下(过滤了原来文件中的“funny”、“guy”这两个单词):

代码如下:
import sys
op_txt = open('done.txt', 'a')
class NaiveFilter():
'''Filter Messages from keywords
very simple filter implementation
>>> f = NaiveFilter()
>>> f.add("sexy")
>>> f.filter("hello sexy baby")
hello **** baby
'''
def __init__(self):
self.keywords = set([])
def parse(self, path):
for keyword in open(path):
self.keywords.add(keyword.strip().lower())
# print self.keywords
def filter(self, message, replss="*"):
# print(message)
message = message.lower()
# print(message)
for k in self.keywords:
if k in message:
message = message.replace(k, replss)
else:
pass
op_txt.write('%s\n' % message)
print(message)
# return message
if __name__ == '__main__':
f = NaiveFilter()
f.parse("illegal.txt") # 这里面放要敏感词或不想要的词等
a = [i.strip() for i in open('keywords.txt').readlines()] # keywords.txt是将要过滤的词库
c = len(a)
for i in range(c):
f.filter(a[i])
原文在这里:http://bigwayseo.com