信誉好的龙岗网站制作,上海app设计公司,单位网站建设内容,互联网网站模块文章目录 解析pdf数据ocr识别分类方法正则匹配词频统计分类模型 分类完提示 解析pdf数据
试了几种方法 fitz-get_image后面方法不适用#xff0c;用pixmap分辨率低 用pypdf2版本低方法用不了 用pdf2image还要下依赖工具 用spire.pdf的SaveAsImage分辨率低#xff0c;Extract… 文章目录 解析pdf数据ocr识别分类方法正则匹配词频统计分类模型 分类完提示 解析pdf数据
试了几种方法 fitz-get_image后面方法不适用用pixmap分辨率低 用pypdf2版本低方法用不了 用pdf2image还要下依赖工具 用spire.pdf的SaveAsImage分辨率低ExtractImages可以但运行慢 先用spire.pdf的ExtractImages吧
from spire.pdf.common import ImageFormat
from spire.pdf import PdfDocument# 从PDF文档提取图片PDF文档的路径存放图片的文件夹路径
def extract_images_from_pdf(file_path, output_folder):# 创建PdfDocument类的实例doc PdfDocument()# 加载PDF文档doc.LoadFromFile(file_path)# 创建list来存储提取的图片images []# 遍历文档的页面for i in range(doc.Pages.Count):# 获取当前页page doc.Pages.get_Item(i)# 从页面提取图片并存储到listfor img in page.ExtractImages():# print(img)images.append(img)# 将图片保存到指定文件夹for i, image in enumerate(images):image.Save(f{output_folder}Image-{i1}.jpg, ImageFormat.get_Jpeg())doc.Close()# 调用函数实现从PDF提取图片
file_path 副本.pdf
output_folder tup/
extract_images_from_pdf(file_path, output_folder)
ocr识别
试验几种方法paddleocr umiocr cnocr 微信截图等 识别效果都差不多 最先进的也就这样了就用cnocr 运行效率高 其他更慢 调了调一些参数发现不调还好一些 cnocr也和opencv一样不支持中文路径直接用PIL读取传对象给cnocr就可以
from cnocr import CnOcr # 识别
from PIL import Image
def ocr_cn(path): # 输入图片pathimgImage.open(path)# print(img)r ocr.ocr(img)t [] # 文本for each in r:# print(each[text])t.append(each[text])# print(t)return t分类方法
分类方法有基于规则、基于词频统计、nlp算法-朴素贝叶斯 textcnn什么的 一般数据量小就规则一般数据量大也先用规则看看 一些能看到的共性可以直接提出来剩下的再用AI学习
正则匹配
.所有 \d数字 \D非数字 \s空格 \S非空格 \w字母数字汉字下划线 \W非\w
*匹配0-无限次匹配1-无限次?匹配0-1次{n}匹配n次{m,n}匹配m-n次
(19|20) [1-9]
[^\d] [^https://] 取非
^www.*com$ www开头com结尾
[a-zA-Z0-9_]{4,20}(163|126|qq|sina|yahoo)\.com 邮件
\d{3}-\d{8}|\d{4}-\d{7,8} 电话号
re.match([a-zA-Z](.*)/[a-zA-Z], htmlzzz/div).group(1) 提取html内容
re.sub(r[0-9], *, s) # 把数字替换为*
re.sub(r[0-9], *, s) # 多个数字替换为1个*
re.sub(r[^0-9], *, s)# 匹配非数字提取年月
a,b,c2023-1-12, 2024.2.23,24年1月
d(\d{2})[- /.]([1-9]|1[0-2])[- /.] # 日期中间4种分隔 - / . 空格
linere.search(d,b) # 匹配不到就是Nonematch是从第一个开始匹配
print(line) # re.Match object; span(2, 6), match24.2
print(line.span()) # (2, 6)
print(line.group()) # 24.2.
print(line.group(1)) # 24 小括号是分组
print(line.group(2)) # 2 小括号是分组
print(re.findall(d,a)) # [(23,1)] 返回所有匹配结果没匹配为空[]
print(re.split([-年.],line.group())) # [24, 2]词频统计
worddict {}
for i in words:print(i)if i in worddict:worddict[i] 1else:worddict[i] 1
print(worddict)
highest_key max(worddict, keyworddict.get) if worddict!{} else None
print(highest_key) # 输出: 分类
# 自定义分类
worddict {a:0,b:0,c:0}
if xxx in worddict or xcc in worddict:worddict[x] 1
highest_key max(worddict, keyworddict.get) if max(worddict.values())!0 else None
print(highest_key) # 输出: 分类分类模型 分类完提示
用Tkinter或pyqt做窗口提示和交互
## 分类完提示
import tkinter as tk
from tkinter import messagebox
root tk.Tk()
root.withdraw()
messagebox.showinfo(提示, 程序运行完成)
messagebox.showinfo(提示, 分类完成\n分类成功 条\n分类失败 条)