不背单词自定义词书制作与导入
0 前言
最近不得不开始准备GRE了,从张巍公众号白嫖了好多单词书,但是我从高中开始就不习惯使用纸质材料背单词了,都是使用不背单词这个app了。没错,我的高中是允许带手机的哈哈哈
不背单词的自定义词书功能还不完善。所以我花了一上午研究怎么把PDF导入进去
思路:通过将pdf文件转成一个个图片,然后使用
tesseract
工具进行OCR识别,然后提取单词存进txt文件
下面是教程
1 准备
1.1 环境要求
- python3环境,我个人是用python3.10.1
- pip安装工具,保证是最新的
- Tesseract的下载 参考这篇文章中的 (Google Tesseract安装) 这一节内容
我的是Windows系统,我觉得大部分人都是。那么直接拉到最下面,安装最下面的程序就好了(这个是最新的)
- 相关包的下载
- PIL
- pytesseract
- tqdm
- fitz (来自PyMuPDF)
- Pillow
// 可以通过下面命令进行下载 pip install PyMuPDF Pillow pytesseract tqdm
1.2 文件夹内设置
我的代码全放在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文件中。
pytesseract.pytesseract.tesseract_cmd = r'D:\Application\Tesseract-OCR\tesseract.exe'
修改成你自己安装的tesseract.exe
路径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 运行
- PDF转成图像:运行
pdf2pic.py
,等待进度条完成
- 打开
image_output
文件夹,检查是否导入成功,同时删去不需要的图片,比如封面
-
确保
word.py
中的x1,y1,x2,y2
已经修改正确了,执行这个程序。 -
等
word.py
执行完成,所有的单词都提取到extract_words.txt
中了 -
建议将
txt
中所有单词复制到word中,打开拼写检查再检查一遍
3 词书导入
- 进入下面这个网站 不背单词
- 登录自己的账号,导入词书
- 看看是否要继续处理txt文件,我是懒得搞了,因为比如
adhoc
这个词,实在太偏僻了,不背单词也没有,我就直接记了
分类:
工具使用技巧啥的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步