题目链接:https://github.com/Show-Me-the-Code/show-me-the-code
代码github链接:https://github.com/wjsaya/python_spider_learn/tree/master/python_daily
个人博客地址:https://wjsaya.github.io
第 0012 题: 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 替换,例如当用户输入「北京是个好城市」,则变成「*是个好城市」。

1
2
3
4
北京
程序员
公务员
...

思路:

  1. 从文件解析敏感词、从终端获取用户输入。
  2. 根据敏感词对用户输入进行过滤。这里过滤需要考虑到输入内容不止一个需要过滤的词,所以稍微麻烦点:
    1. 读取所有的屏蔽词,放进一个列表
    2. 获取用户输入
    3. 遍历屏蔽词列表,用屏蔽词检索用户输入
      • 如果有屏蔽词,将其替换为*
      • 如果没有,不进行操作
      • 返回处理后的用户输入
      • 用下一个屏蔽词对处理后的用户输入进行上述操作
    4. 所有屏蔽词遍历完毕,输出过滤后字符串

敏感词列表(filtered_words.txt)

1
2
3
4
5
6
7
8
9
10
11
北京
程序员
公务员
领导
牛比
牛逼
你娘
你妈
love
sex
jiangge

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# -*- coding: utf-8 -*-
# @Author: wjsaya(http://www.wjsaya.top)
# @Date: 2018-08-10 12:33:32
# @Last Modified by: wjsaya(http://www.wjsaya.top)
# @Last Modified time: 2018-08-13 23:02:29
class ():
'''fliter类 n
传入敏感词文件 n
获取用户输入,根据敏感词文件对输入进行过滤
'''
def __init__(self, fileName):
dirty_dict = self.get_dirty(file)
self.fliteredString = self.fliterMaster(dirty_dict)
def get_dirty(self, fileName=''):
'''解析文件获取敏感词,返回一个敏感词列表
'''
with open (fileName, 'r', encoding='utf-8') as f:
re = f.readlines()
for i in range(len(re)):
大专栏  [python每日一练]--0012:敏感词过滤 type2class="line"> re[i] = re[i].strip('n')
return(re)
def fliterMaster(self, dirty_dict):
'''过滤主函数 n
获取用户输入,获取待屏蔽词典 n
遍历屏蔽词 ,进行过滤n
返回屏蔽后字符串
'''
instr = input("不要输入敏感词哦:")
self.originString = instr
# instr = ("程序员很牛比,但是运维更牛逼")
for i in dirty_dict:
inArray = self.str2array(instr)
inDirtArray = self.str2array(i)
pos_list = self.get_pos(inArray, inDirtArray[0])
if pos_list is None: # 未找到可能存在的屏蔽词,跳过过滤部分
continue
else: # 可能有屏蔽词,交给fliterWorker进一步处理
for tag in pos_list:
inArray = self.fliterWorker(tag, inArray, inDirtArray)
instr = ''.join(inArray)
return instr
def str2array(self, instr):
'''字符串单个拆分为数组
'''
redict = []
for i in instr:
redict.append(i)
return redict
def get_pos(self, instr, word):
'''传入句子,传入词 n
找出此词在居中的所有位置
'''
try:
re = instr.index(word)
resp = []
resp.append(re)
while(1):
try:
re = instr.index(word, re+1, len(instr))
resp.append(re)
except Exception as e:
break
return resp
except Exception as e:
return None
def fliterWorker(self, tag, inArray, inDirtArray):
'''IN:字符数组;屏蔽词数组;可能存在屏蔽词的位置 n
OUT:替换完毕之后的字符数组
'''
resp = ""
resp_temp = ""
for i in range(tag): # 0-pos不变,从pos开始向后匹配
resp += inArray[i]
for i in range(len(inDirtArray)):
if inArray[tag+i] == inDirtArray[i]:
# 字符数组和屏蔽词数组从左向右匹配,如果匹配到一个,resp_temp追加一个*
# 任一过滤词没匹配到,resp_temp直接置为空
resp_temp += "*"
else:
resp_temp = ''
break
if resp_temp == '': # resp_temp为空,直接返回原字符数组
return inArray
else: # resp_temp非空,则有匹配,把resp_temp加到原字符数组
resp += resp_temp
for i in range(tag+len(inDirtArray), len(inArray)):
# resp_temp加完之后,把原句剩下的内容追加
resp += inArray[i]
return resp
if __name__ == '__main__':
file = 'filtered_words.txt'
fliter1 = fliter(file)
print("未过滤字符串为:" + fliter1.originString)
print("过滤后字符串为:" + fliter1.fliteredString)

效果图:

[python每日一练]--0012:敏感词过滤 type2的更多相关文章

  1. DFA和trie特里实现敏感词过滤(python和c语言)

    今天的项目是与完成python开展,需要使用做关键词检查,筛选分类,使用前c语言做这种事情.有了线索,非常高效,内存小了,检查快. 到达python在,第一个想法是pip基于外观的c语言python特 ...

  2. 8.2 前端检索的敏感词过滤的Python实现(针对元搜索)

    对于前端的搜索内容进行控制,比如敏感词过滤,同样使用socket,这里使用Python语言做一个demo.这里不得不感叹一句,socket真是太神奇了,可以跨语言把功能封装,为前端提供服务. 下面就是 ...

  3. Python 每日一练(4)

    引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...

  4. 超强敏感词过滤算法第二版 可以忽略大小写、全半角、简繁体、特殊符号、HTML标签干扰

    上一篇 发一个高性能的敏感词过滤算法 可以忽略大小写.全半角.简繁体.特殊符号干扰 改进主要有几点: 用BitArray取代Dictionary用空间换时间 性能进一步提升 大概会增加词库的  6k* ...

  5. 5分钟构建无服务器敏感词过滤后端系统(基于FunctionGraph)

    摘要:开发者通过函数工作流,无需配置和管理服务器,以无服务器的方式构建应用,便能开发出一个弹性高可用的后端系统.托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行,极大地提高了开发和运维效率,减小 ...

  6. 基于DFA算法、RegExp对象和vee-validate实现前端敏感词过滤

    面临敏感词过滤的问题,最简单的方案就是对要检测的文本,遍历所有敏感词,逐个检测输入的文本是否包含指定的敏感词. 很明显上面这种实现方法的检测时间会随着敏感词库数量的增加而线性增加.系统会因此面临性能和 ...

  7. java实现敏感词过滤(DFA算法)

    小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...

  8. 用php实现一个敏感词过滤功能

    周末空余时间撸了一个敏感词过滤功能,下边记录下实现过程. 敏感词,一方面是你懂的,另一方面是我们自己可能也要过滤一些人身攻击或者广告信息等,具体词库可以google下,有很多. 过滤敏感词,使用简单的 ...

  9. 浅析敏感词过滤算法(C++)

    为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode. STL::map是按照operator<比较判断元素是否相同,以及 ...

随机推荐

  1. 致 Python 初学者们!

    ​ 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长.在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫.我非常理解你们所面临的处 ...

  2. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:输入文件队列

    import tensorflow as tf # 1. 生成文件存储样例数据. def _int64_feature(value): return tf.train.Feature(int64_li ...

  3. 树莓派切换到root用户

    1:如何修改pi账号密码 passwd pi 2:开启root账户 树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的 debian里root账户默认没有密码,但账 ...

  4. MFC的combox禁止键盘输入

    项目中有个combox的下拉窗控件,鼠标双击总能存在焦点,并且会修改combox显示的文字,网上查了好多资料,都说修改style,可是我的vs2015里没发现有style的属性,后面修改 modal ...

  5. [GX/GZOI2019]旧词(树上差分+树剖+线段树)

    考虑k=1的做法:这是一道原题,我还写过题解,其实挺水的,但当时我菜还是看题解的:https://www.cnblogs.com/hfctf0210/p/10187947.html.其实就是树上差分后 ...

  6. sd卡分区步骤

    1.将sd卡通过优盘插在电脑上 2.fdisk  /dev/sdb 3.   m   //帮助 d    //删除分区 4.  n   //添加新的分区. p  //默认主分区 回车 +400M   ...

  7. 三十五、lamp经典组合搭建

    一.安装mysql数据库 1.1  创建组和用户: 1)groupadd mysql 2)useradd mysql   -g mysql -M  -s  /sbin/nologin 3)config ...

  8. 吴裕雄--天生自然python学习笔记:python 用pygame模块制作一个音效播放器

    用 Sound 对象制作一个音效播放器. 应用程序总览 程序在执行后默认会把 WAV 音频文件加载到清单中,单击“播放”按钮可开始 播放,同时显示 “正在播放 xxx 音效”的信息 . 播放过程中,可 ...

  9. SEERC 2018 Inversion

    题意: 如果p数组中 下标i<j且pi>pj 那么点i j之间存在一条边 现在已经知道边,然后求p数组 在一张图中,求有多少个点集,使得这个点集里面的任意两点没有边 不在点集里面的点至少有 ...

  10. java.lang.NoSuchMethodError: org.springframework.util.Assert.notNull(Ljava/lang/Object;Ljava/util/function/Supplier;)V

    分析,jar包冲突,然后看pom.xml文件 原因在于jar包冲突,版本不兼容, 错误的代码:  可以看到有很多不同版本的重复的spring-test依赖 <dependency> < ...