题目链接: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. HDU-6514 Monitor(二维前缀和+差分)

    http://acm.hdu.edu.cn/showproblem.php?pid=6514 Problem Description Xiaoteng has a large area of land ...

  2. MySQL数据库高可用集群搭建-PXC集群部署

    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. PXC原理描述: 分布式 ...

  3. [LC] 285. Inorder Successor in BST

    Given a binary search tree and a node in it, find the in-order successor of that node in the BST. Th ...

  4. ODT(区间覆盖问题)

    解释:先留坑 题目:https://www.cometoj.com/contest/73/problem/D?problem_id=4120 #include<bits/stdc++.h> ...

  5. Vscode 下 PlantUML 插件的安装(windows and ubuntu)

    目录 Windows 下安装 JAVA 安装环境配置: 测试 Ubuntu 16.04 下安装 Windows 下安装 Vscode graphviz PlantUML JAVA(推荐长期稳定版本,官 ...

  6. maven中 pom 文件各个标签的作用

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. Ubuntu 12.04 搭建TFTP服务器

    吐槽先:在Ubuntu上搭建TFTP服务器,网上搜到一堆资料,可惜基本都是部分能用,至于哪些部分能用还要自己摸索着试出来,郁闷之情仅次于找不到任何资料…… ---------------------- ...

  8. FPGA时序分析

    更新于20180823 时序检查中对异步复位电路的时序分析叫做()和()? 这个题做的让人有点懵,我知道异步复位电路一般需要做异步复位.同步释放处理,但不知道这里问的啥意思.这里指的是恢复时间检查和移 ...

  9. 61)PHP,立即跳转

    一般使用   header(‘Location:’)来进行跳转. ******************************************************************* ...

  10. 5)添加分发参数c,选择控制器

    目录关系:  代码展示: newnewnew.controller.class.php <?php /** * Created by PhpStorm. * User: Interact * D ...