鱼C论坛

 找回密码
 立即注册
查看: 6025|回复: 26

[已解决]类似图片格式的PDF该如何转txt文件啊?

[复制链接]
发表于 2023-7-18 16:58:37 | 显示全部楼层    本楼为最佳答案   
你需要的是一个 Optical Character Recognition (OCR) 工具来解析PDF中的图像并转换为文本。Python 中有一些库可以帮助你做到这一点,例如 `PDF2` 和 `pytesseract`。

首先,你需要安装以下库(如果尚未安装):

  1. pip install pdf2image
  2. pip install pytesseract
  3. pip install PIL
复制代码


此外,你还需要在你的系统上安装 [Tesseract ↗](https://github.com/tesseract-ocr/tesseract/wiki)。

然后,你可以使用以下代码将 PDF 文件中的图片转换为文本:

  1. from pdf2image import convert_from_path
  2. import pytesseract
  3. from PIL import Image
  4. import io

  5. # 你的 PDF 文件路径
  6. pdf_path = 'path_to_your_pdf.pdf'

  7. # 将 PDF 文件转换为 PIL Image 对象列表
  8. images = convert_from_path(pdf_path)

  9. # 初始化一个空字符串用于存储文本
  10. result_text = ''

  11. # 遍历所有的图片
  12. for i, img in enumerate(images):
  13.    
  14.     # 将图片转化为文本
  15.     text = pytesseract.image_to_string(img, lang='chi_sim')  # 使用'chi_sim'参数进行中文识别
  16.    
  17.     # 将识别后的文本添加到结果中
  18.     result_text += text

  19. # 将结果存储到 txt 文件中
  20. with open('output.txt', 'w', encoding='utf-8') as file:
  21.     file.write(result_text)
复制代码

注意:这只是一个基本的例子,可能需要根据你的需求进行适当的修改。在具体的环境中,你可能需要指定 Tesseract 的路径(通过 `pytesseract.pytesseract.tesseract_cmd`),并且在处理大型 PDF 文件时,你可能需要考虑内存管理。

求最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 17:29:55 | 显示全部楼层
陶远航 发表于 2023-7-18 16:59
你这个月想要超我是不可能了

虽然我被取消资格了

是吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 17:33:28 | 显示全部楼层
陶远航 发表于 2023-7-18 17:30
那你想怎么超过我


随便
不过你是脚本,这公平吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 17:38:53 | 显示全部楼层
陶远航 发表于 2023-7-18 17:34
谁叫你没技术 写不出脚本

为什么要写脚本?你认为你写出脚本很厉害吗?对论坛很好吗?你不怕被封ip我怕

而且你的脚本也识别不出图片
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 17:46:44 | 显示全部楼层
陶远航 发表于 2023-7-18 17:40
事实证明,我用脚本最佳比你多,拿事实说话好不好

有本事你不用脚本最佳比我多,那才叫厉害

哦?是吗?好。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 17:49:34 | 显示全部楼层
陶远航 发表于 2023-7-18 17:48
劝你不要去举报那些未解决的远古求助帖以获取最佳答案数量

不需要。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 23:36:11 | 显示全部楼层
ssqchina 发表于 2023-7-18 21:40
from pdf2image import convert_from_path
import pytesseract
from PIL import Image

[b]这个错误信息是由于你的系统中没有安装 poppler ,或者 poppler 没有被添加到你的系统路径(PATH)中。

pdf2image 库需要 poppler 工具包来从 PDF 文件中提取图像。你需要确保你已经安装了 poppler 并且它已经被添加到了你的系统路径中。

对于 Windows 使用者,你可以按照以下步骤安装和配置 poppler :

1.下载 poppler for Windows 的二进制文件。

2.下载完成后,解压缩文件。

3.将解压缩的文件夹的路径添加到你的系统环境变量 PATH 中。步骤如下:

   ·在计算机的属性中选择“高级系统设置”。
   ·点击“环境变量”按钮。
   ·在“系统变量”区域,滚动找到并选择 Path ,然后点击“编辑”按钮。
   ·在编辑环境变量窗口中,点击“新建”,然后粘贴你的 poppler 文件夹的路径。
   ·保存更改并重启你的开发环境(如命令提示符、PowerShell或PyCharm等)。

现在,你应该能够成功运行你的代码了。如果还有问题,请再次检查你的 poppler 安装和配置。

求最佳答案
[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 16:38:04 | 显示全部楼层
ssqchina 发表于 2023-7-19 16:36
你的回复里有中文识别设置,给你最佳,但是我修改后的 只能识别小的PDF文件 大的文件出错,说超过容量

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 16:41:20 | 显示全部楼层
ssqchina 发表于 2023-7-19 16:36
你的回复里有中文识别设置,给你最佳,但是我修改后的 只能识别小的PDF文件 大的文件出错,说超过容量

这种错误通常是由于系统尝试处理的图像或PDF文件过大,超过了Tesseract OCR或Python库分配的内存限制所导致的。

有几种可能的解决方案:

1. **增加系统内存**:如果可能,增加你的系统内存可能是最直接的解决方案。

2. **分解大文件**:将大PDF文件分解为多个小文件,并单独进行处理。这样可以避免一次性加载过大的文件。例如,你可以修改`pdf_to_image`函数,让它每次只处理一部分页面,而不是整个PDF文件。

3. **调整图像质量**:减小从PDF中提取的图像的质量或分辨率。这将减少每个图像的大小,从而降低内存使用量。但是,请注意这可能会影响OCR的准确性。

4. **Tesseract配置**:你可能需要调整Tesseract的配置,以便于处理大文件。这可能需要修改Tesseract的源代码或配置文件。

5. **使用其他OCR工具**:如果以上方法都无法解决问题,你可能需要考虑使用其他OCR工具,如Amazon Textract,Google Cloud Vision OCR等,这些工具可能对大文件的处理能力更强。

例如,你可以尝试将PDF分页转换为图片的代码调整如下,每次只处理一部分页面:

  1. # 将PDF转换为图片
  2. def pdf_to_image(pdf_path, start_page=0, end_page=None):
  3.     images = convert_from_path(pdf_path, first_page=start_page, last_page=end_page, poppler_path=poppler_path)
  4.     return images
复制代码

然后在你的主函数中,分批处理每个页面:

  1. if __name__ == '__main__':
  2.     # 将'example.pdf'转换为图片
  3.     start_page = 1
  4.     end_page = start_page + 10  # 每次处理10页
  5.     while True:
  6.         images = pdf_to_image(r'f:\123.pdf', start_page, end_page)
  7.         if not images:  # 如果没有更多的页面,退出循环
  8.             break

  9.         # 对图片进行OCR识别
  10.         text_list = recognize_text(images)

  11.         # 将识别结果保存到'example.txt'中
  12.         save_text(text_list, r'f:\123.txt')

  13.         start_page += 10
  14.         end_page += 10
复制代码


这样,你的程序每次只处理10页,这应该能降低内存使用量。你可以根据你的系统资源和PDF文件的大小,调整每批处理的页面数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-23 02:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表