当前位置: 首页 > 后端技术 > Python

爬虫系列:处理标准格式文本

时间:2023-03-25 23:13:14 Python

处理标准格式文本上一篇介绍了图像识别和文本处理,也介绍了有哪些基本的OCR库。您将要处理的大部分文本都相对干净且格式正确。格式化的文字通常可以满足一些需求,但是什么是“糊涂”,什么才算“格式化”,真的是因人而异。使用标准字体(不包括手写、草书或非常“花哨”的字体),虽然经过抄写或拍照,但字体仍然非常清晰,没有多余的痕迹或排列整齐的污点,歪字不超过图片的范围,也没有不完整的,或者一些格式问题,文本紧紧地贴在图像的边缘,可以在图像预处理过程中解决。例如,可以将图像转换为灰度、调整亮度和对比度,并根据需要进行裁剪和旋转。然而,这些方法在更具可扩展性的训练方面存在一些局限性。下面是一个标准文本的理想演示:我们把上面的图片转换成tif文件格式,用Tesseract读取。我们使用如下命令将图片中的文字转化为文字内容:tesseract.exe"E:\MyDocuments\MyPictures\SavedPictures\test-text.max_344x194.tif""E:\MyDocuments\MyPictures\SavedPictures\textoutput.txt”最终运行结果如下:第一行输出Tesseract版本信息,我们看一下结果:这是一些图像识别的测试文本。我们可以看到识别的很准,但是网上的图片有的包含渐变,有的还包含背景,这样会导致文字越来越难识别。当我们遇到此类问题时,首先需要使用Python脚本来清理图片。例如,下图包含渐变和特殊符号。我们使用Tesseract来识别图片中的内容。使用Tesseract识别结果:使用Pillow库,我们可以创建一个阈值来过滤渐变的背景色,只留下文字,让图片更清晰,更容易被Tesseract阅读:importosfromPILimportImage,ImageFilterclassImageRecognitionWordProcessing(object):@staticmethoddefclean_file(file_path,new_file_path):image=Image.open(file_path)#对图像进行阈值处理并保存image=image.point(lambdax:0ifx<180else255)image.save(new_file_path)if__name__=='__main__':ImageRecognitionWordProcessing().clean_file(os.path.join(os.getcwd(),"files/test-text_has_symbol.max_340x194.jpg"),"text_2_clean.png")让我们处理后看图片效果:我们使用Tesseract读取图片内容,结果如下:从上图可以看出,结果比刚才的结果更准确,而且大部分符号都有被读出。!^被识别为1,^被识别为A,()被识别为0。通过上面错误的部分,我们可以看出符号与错误识别的内容非常相似,所以才会出现这些错误。Tesseract最大的缺点是渐变背景颜色的处理。在之前的版本中,Tesseract的算法会在阅读文本之前自动尝试调整图像的对比度,但如果你使用像Pillow库这样的工具对图像进行预处理,效果会更好。带有标题、大空白或其他问题的图像在提交给Tesseract进行处理之前应进行预处理。从网站图像中抓取文本使用Tesseract从硬盘上的图像中读取文本可能不是很令人兴奋,但是当与网络爬虫结合使用时,它会成为一个强大的工具。网站上的图片可能没有故意使用花哨的文字(比如餐厅菜单的JPG图片上的艺术字),但它们的文字对网络爬虫是隐藏的,我将在下一个示例中演示。虽然亚马逊的robots.txt文件允许抓取网站的产品页面,但网络机器人通常无法抓取图书预览页面。图书预览页面通过用户触发的Ajax脚本加载,预览图片隐藏在div节点下;事实上,普通访问者会认为它们看起来更像是Flash动画而不是图像文件。当然,即使我们有图片,要读成文字也没有那么简单。