根据词库检测文本是否包含特定词语
【根据词库检测文本是否包含特定词语】有一个中文文本库,里面是一些违规词,检测图片中是否包含违规词,先对图片进行文字检测,把检测出的文字保存在一个txt中。
import sys
import io
import os
reload(sys)
sys.setdefaultencoding('utf8')
#python2版本需要用io.open,后面才可以使用encoding参数,python3版本不需要加iopath = r'D:\img_program\ciku_test'
# 这个txt里面是包含多个需要检测的词语,成为词库
f2=io.open(os.path.join(path,'cuxiao_words_test.txt'),'r', encoding='gbk')
#readline只读取第一行内容,readlines读取多行内容
#例如('lines_a', [u'6.16\u5230\u624b\u4ef7\n', u'\u4f18\u60e0\n'])
lines_b=f2.readlines()
#这个是使用OCR检测出的图像中包含的词语
detect_path = r'D:\img_program\ciku_test\detect'
#这个是匹配结果的保存路径
path_result = r'D:\img_program\cuxiaoci_txt_result'
texts = os.listdir(detect_path)
i = 0for text in texts:
print(text)
shotname, extension = os.path.splitext(text)
fc = io.open(os.path.join(path_result,shotname+'_result.txt'), 'w', encoding='utf-8')
f1 = io.open(os.path.join(detect_path,text),'r', encoding='utf-8')
#read是读取文本中所有内容,例如
#('lines_a', u'6.16\u5230\u624b\u4ef78\n\u4f18\u60e0\n')
lines_a=f1.read()
#遍历词库中每行的词
for line_b in lines_b:
#去掉换行符,例如敏感是【促销】,当检测词是【促销价】是就无法匹配,因为#【促销】后面其实有个换行符/n的,去掉后就可以匹配【促销价】之类的了
line_b = line_b.strip()
if line_b in lines_a:
print(line_b)
fc = io.open(os.path.join(path_result,shotname+'_result.txt'), 'a', encoding='utf-8')
fc.writelines(line_b+'\n')
除了用if ... in ...这种写法,也可以使用re的findall,不同的是,当检测语句中有多个相同的词时,if ... in ...只会召回一个词语,findall会全部召回。
import re
pattern = re.compile(line_b)
find = pattern.findall(lines_a)
fc = io.open(os.path.join(path_result,shotname+'_result.txt'), 'a', encoding='utf-8')
fc.writelines(find)
检测文本如果行数很多,建议用readlines替换read,例如
f2=io.open('cuxiao_words.txt','r', encoding='gbk')
lines_b=f2.readlines()detect_path = r'D:\img_program\cuxiaoci_txt'
path_result = r'D:\img_program\cuxiaoci_txt_result'
texts = os.listdir(detect_path)
i = 0for text in texts:
print(text)
shotname, extension = os.path.splitext(text)
fc = io.open(os.path.join(path_result,shotname+'_result.txt'), 'w', encoding='utf-8')
f1 = io.open(os.path.join(detect_path,text),'r', encoding='utf-8')
lines_a=f1.readlines()for line_a in lines_a:
line_a = line_a.strip()
for line_b in lines_b:
line_b = line_b.strip()if line_b in lines_a:
fc = io.open(os.path.join(path_result,shotname+'_result.txt'), 'a', encoding='utf-8')
fc.writelines(line_b+'\n')
推荐阅读
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- JS常见数组操作补充
- 运营是什么()
- ATAN2根据xy坐标计算角度
- 霍夫变换与直线检测
- hough变换检测的matlab程序
- Android智能手表MMI测试检测系统
- 通过人工大脑刺激来检测神经网络中的后门
- 周检视5/14-5/21(第三周)