首页 > 其他分享 >不背单词自定义词书制作与导入

不背单词自定义词书制作与导入

时间:2023-08-14 12:11:54浏览次数:43  
标签:自定义词 image page 导入 pytesseract output pdf tesseract 背单词

0 前言

最近不得不开始准备GRE了,从张巍公众号白嫖了好多单词书,但是我从高中开始就不习惯使用纸质材料背单词了,都是使用不背单词这个app了。没错,我的高中是允许带手机的哈哈哈

不背单词的自定义词书功能还不完善。所以我花了一上午研究怎么把PDF导入进去

思路:通过将pdf文件转成一个个图片,然后使用tesseract工具进行OCR识别,然后提取单词存进txt文件

下面是教程

1 准备

1.1 环境要求

  1. python3环境,我个人是用python3.10.1
  2. pip安装工具,保证是最新的
  3. Tesseract的下载 参考这篇文章中的 (Google Tesseract安装) 这一节内容

我的是Windows系统,我觉得大部分人都是。那么直接拉到最下面,安装最下面的程序就好了(这个是最新的)
2

  1. 相关包的下载
    • PIL
    • pytesseract
    • tqdm
    • fitz (来自PyMuPDF)
    • Pillow
// 可以通过下面命令进行下载
pip install PyMuPDF Pillow pytesseract tqdm

1.2 文件夹内设置

1

我的代码全放在D:\Codeprojects\word这个目录下,你需要创建两个python文件,一个空文件夹image_output用来存pdf转成的图片,还有一个你的词书pdf。

1.3 代码

将下面代码直接复制到对应的python文件中

1 pdf2pic.py

该程序实现将pdf文件转成图片,然后存进image_output

注意修改一下pdf_file ,改成你自己的词书名(建议用英文名,不要有中文字符),其他的不需要修改

import fitz  # PyMuPDF
from tqdm import tqdm     # 可视化进度条

pdf_file = "gre_words.pdf"    # 这个改成你自己的词书名
image_folder = "image_output/"

# 打开PDF文件
pdf_document = fitz.open(pdf_file)

# 配置图像分辨率
image_resolution = 300  # 设置为你想要的分辨率,以每英寸像素数为单位

# 使用 tqdm 创建进度条
progress_bar = tqdm(total=pdf_document.page_count, desc="Converting pages", unit="page")

# 遍历每一页并保存为图像
for page_num in range(pdf_document.page_count):
    page = pdf_document[page_num]
    zoom = image_resolution / 72.0  # 计算缩放比例,以使分辨率一致
    mat = fitz.Matrix(zoom, zoom)
    pixmap = page.get_pixmap(matrix=mat)
    image_path = f"{image_folder}page_{page_num + 1}.png"
    pixmap.save(image_path, "png")
    
    # 更新进度条
    progress_bar.update(1)

# 关闭PDF文件
pdf_document.close()

# 关闭进度条
progress_bar.close()

2 word.py

这个程序用来识别图像中的单词,存进txt文件中。

  1. pytesseract.pytesseract.tesseract_cmd = r'D:\Application\Tesseract-OCR\tesseract.exe'修改成你自己安装的tesseract.exe路径
  2. x1,y1,x2,y2的区域设置:见这篇文章使用crop时如何定位
import os
from PIL import Image
import pytesseract

image_folder = "image_output/"
output_txt = "extracted_words.txt"

# 下载好tesseract.exe,下面是你的安装路径
pytesseract.pytesseract.tesseract_cmd = r'D:\Application\Tesseract-OCR\tesseract.exe'

# Open the output text file for writing
with open(output_txt, 'w', encoding='utf-8') as output_file:
    for image_filename in os.listdir(image_folder):
        image_path = os.path.join(image_folder, image_filename)
        image = Image.open(image_path)
        
        # 修改成你想要裁剪的区域
        x1 = 100
        y1 = 310
        x2 = 410
        y2 = 3300
        crop_box = (x1, y1, x2, y2)
        cropped_image = image.crop(crop_box)

        # 下面注释是显示裁剪出来的图像,你可以看看你上面的标注对不对
        # cropped_image.show()

        extracted_text = pytesseract.image_to_string(cropped_image, lang='eng')  # 识别,lang = 'eng'表示识别为英文
        extracted_words = extracted_text.split()  # 文本分割

        # 写入txt文件,单词之间换行
        for word in extracted_words:
            output_file.write(word + '\n')

2 运行

  1. PDF转成图像:运行pdf2pic.py,等待进度条完成

3

  1. 打开image_output文件夹,检查是否导入成功,同时删去不需要的图片,比如封面

4

  1. 确保word.py中的x1,y1,x2,y2已经修改正确了,执行这个程序。

  2. word.py执行完成,所有的单词都提取到extract_words.txt中了

标签:自定义词,image,page,导入,pytesseract,output,pdf,tesseract,背单词
From: https://www.cnblogs.com/jye159X/p/17628278.html

相关文章

  • AN---导入不了音频
    很多时候,我们做好的MP3文件,无法导入进入:主要问题可能是:MP3采样率的问题解决方法:格式化工厂方案一:转mp3音频格式化工厂改采样率:44100然后:输出配置设置采样率:44100然后添加文件后,进行转即可。方案二:格式化工厂-WAV格式其次,如果是直接将mp3文件拖进AN,但是拖不进,需要......
  • 导入商品浏览功能代码_需求分析和设计
          ......
  • 【谷粒学院】Maven导入aliyun-java-vod-upload包依赖失败
    【谷粒学院】Maven导入aliyun-java-vod-upload包依赖失败<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-vod-upload</artifactId><version>${aliyun-java-vod-upload.version}</version></dependency&......
  • 微信登录_导入小程序代码
        ......
  • ruoyi-cloud excel导入数据
    ruoyi-cloudexcel导入数据说明本文以导入部门数据为例,说明excel如何导入实现部门页面修改在ruoyi-ui->src->views->system->dept->index.vue中更改添加导入按钮<el-col:span="1.5"><el-buttontype="success"plainicon="el-......
  • 浏览器中的接口请求如何一键导入Postman
    1、浏览器中操作浏览器中【检查】---【Fwtch/XHR】---【选中接口】---【Copy】---【CopyascURL(bash)】 2、Postman中操作  ......
  • jmeter--导入jar包
    1、问题:写jmeter脚本时,用到了beanshell断言这个元件,其中在元件的script中使用了org.json包中的方法,即将响应数据转换成json格式来提取数据的部分字段的值进行断言。但执行脚本时报错Typedvariabledeclaration:Class:JSONObjectnotfoundinnamespace. 2、原因:jmeter本身......
  • 使用kettle将excel中的数据导入数据库时,数字带小数点0的问题
    1.在excel中调整数据格式选择【数据】-【分列】-【分隔符】,点击下一步  2、选择Tab键 3、选择【文本】,点击完成 ......
  • vue excel导入 补充校验
    前台校验<template><div><el-dialog:title="'校验'":close-on-click-modal="false"append-to-body:before-close="handleClose"v-if="visible":visible.sync="visib......
  • vue import 调用方法 Import是javascript中的一种模块加载方式,在Vue中也可以使用impor
    vueimport调用方法Import是javascript中的一种模块加载方式,在Vue中也可以使用import来加载组件、库或其他模块。使用import语句,可以将需要的模块导入到当前模块的作用域中,以使其可用于当前模块内的执行。原文链接:https://www.yzktw.com.cn/post/1248672.htmlImport是javascri......