-
PyQt5的敏感词检测工具制作,运营者的福音
设计思路:根据敏感词库文件筛选,查看输入的文本中是否包含敏感词汇。从而过滤出相关的敏感词。
导入应用相关的模块。
import os
import logging
import sys
导入UI界面相关的模块。
from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QTextEdit,QGridLayout,QLineEdit,QPushButton,QFileDialog
from PyQt5.QtGui import QIcon
import resource
这个里面的resource模块,是使用python生成的.py形式的资源文件。直接将这个文件导入模块使用可以防止打包时资源文件不能打包的问题。展示一下部分的resource.py文件的代码块。
from PyQt5 import QtCore
qt_resource_data = b"\
\x00\x00\x2b\x03\
\x00\
\x01\x6a\xb6\x78\x9c\xed\x5d\x0b\x40\x54\xc5\xfa\x1f\x5c\x95\xf5\
\x11\x58\xdd\xb2\x52\xc1\x7c\x84\xa9\xa9\xa5\x29\xec\x6a\x58\x9a\
\xf6\xbc\x69\xb7\x6b\x5d\x2b\xb1\xb2\xb4\x7c\x01\x65\xa1\xc0\xee\
\xaa\x25\x18\xa4\x66\x6a\xf6\x34\x7a\x78\xcd\x5b\xa6\x66\xb9\x66\
\x25\xff\x44\x01\x33\x5f\xf8\xcc\x47\xf8\x7e\xc1\xee\x22\xa0\x28\
\xb0\xf3\xff\xcd\x39\x67\xe1\xec\x39\x67\x97\x05\x76\x17\xb0\xf3\
\xd3\x8f\xd9\x39\x67\xce\xcc\x37\xdf\x37\xdf\xbc\xce\x9c\x19\x42\
\x02\x48\x73\xd2\xab\x57\x2b\xb8\x8d\xc9\xb8\xa6\x84\x2c\x25\x84\
\xb4\x6f\xcf\xfb\xcf\x34\x22\x24\x28\x90\x90\x56\xad\x78\x7f\x97\
接下来是UI界面的部分,这次直接是使用UI界面的主线程的槽函数来完成业务逻辑的,并没有使用单独的QThread的子线程来实现。
def init_ui(self):
'''初始化日志管理器'''
self.logger = logging.getLogger("敏感词检测工具")
self.logger.setLevel(logging.DEBUG)
self.setFixedWidth(600)
self.setWindowIcon(QIcon(':sens.ico'))
self.setWindowTitle('敏感词检测小工具 公众号:[Python 集中营]')
vbox = QVBoxLayout()
self.text_ = QTextEdit()
self.text_.setPlaceholderText('请输入要检测的文本信息...')
self.text_.setMaximumHeight(120)
self.text_lis = QTextEdit()
self.text_lis.setPlaceholderText('文中存在的敏感词信息...')
self.text_lis.setReadOnly(True)
self.text_lis.setMaximumHeight(60)
grid = QGridLayout()
self.dir_sens = QLineEdit()
self.dir_sens.setPlaceholderText('敏感词库路径')
self.dir_sens.setReadOnly(True)
self.dir_btn = QPushButton()
self.dir_btn.setText('获取敏感词库')
self.dir_btn.clicked.connect(self.dir_btn_click)
grid.addWidget(self.dir_sens, 0, 0, 1, 2)
grid.addWidget(self.dir_btn, 0, 2, 1, 1)
self.lis_btn = QPushButton()
self.lis_btn.setText('开始检测')
self.lis_btn.clicked.connect(self.search_sens)
vbox.addWidget(self.text_)
vbox.addWidget(self.text_lis)
vbox.addLayout(grid)
vbox.addWidget(self.lis_btn)
self.setLayout(vbox)
其余的是四个槽函数部分,主要实现将敏感词文件的所有敏感词加载出来。最后将敏感词与输入的文件进行比对。
def dir_btn_click(self):
'''
选择文件夹
:return:
'''
directory = QFileDialog.getExistingDirectory(self, "选取文件夹", self.cwd)
self.dir_sens.setText(directory + '/')
def get_sens_files(self):
'''
获取敏感词文件
:return:
'''
file_paths = []
self.logger.info("开始批文件路径处理")
list = os.listdir(self.dir_sens.text())
for i in range(0, len(list)):
path = os.path.join(self.dir_sens.text(), list[i])
if os.path.isfile(path):
file_paths.append(path)
self.logger.info("完成批文件路径处理")
return file_paths
def load_sens(self):
'''
加载敏感词
:return:
'''
paths = self.get_sens_files()
sens = []
self.logger.info("开始加载敏感词")
for path in paths:
self.logger.info("当前加载的文件路径是:" + path)
with open(path, "rb") as file:
data = file.readlines()
datac = []
for string in data:
try:
datac.append(string.decode('utf8').replace('\n', '').replace('\r', ''))
except:
self.logger.error("文件:[" + path + "]解码出现异常")
sens = sens + datac
sens = sens + datac
self.logger.info("完成加载敏感词")
return sens
def search_sens(self):
'''
搜索敏感词
:return:
'''
text_lis = ""
sens = self.load_sens()
text = self.text_.toPlainText()
for se in sens:
if se in text and se not in text_lis:
text_lis = text_lis + se
self.logger.info("包含敏感词:" + text_lis)
self.text_lis.setText(text_lis)
最后,直接使用main()函数启动整个应用。
if __name__ == '__main__':
app = QApplication(sys.argv)
main = SensListen()
main.show()
sys.exit(app.exec_())
以上就是完整的实现过程,有需要的小伙伴直接将所有代码复制到自己的开发工具中启动main()函数就可以啦!
输入敏感词直接在界面上进行检测,检测到的敏感词会显示在下面的文本框中。
出处:https://mp.weixin.qq.com/s?__biz=MzA3ODk1Mzg0Mg==&mid=2649851701&idx=1&sn=14754b55b34cd2ee74e7c1dfbb834a6b&chksm=87bfcb28b0c8423ed277fe492a646cb0b155fc604ea6340fefbd2f09ad753f71e78fe970f6e0&token=1891960020&lang=zh_CN#rd
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式