前两天导师给了我一个任务,让我把一个pdf里面的中文页和英文页分开来,pdf有300+页,先是英文页,然后是对英文翻译的中文页,该怎么弄呢?
1、pdf分割
这个可以用软件,也可以用代码,wps就有pdf分割的功能
如何用代码呢,这里用python的pypdf2,先用pip进行安装
pip install pypdf2
分割pdf的具体代码实现:
from PyPDF2 import PdfFileReader, PdfFileWriter
import os
filepath = "你的pdf文件路径.pdf"
splited_path = "分割后的保存路径"
file_reader = PdfFileReader(filepath)
for page in range(file_reader.getNumPages()):
# 实例化对象
file_writer = PdfFileWriter()
# 将遍历的每一页添加到实例化对象中
file_writer.addPage(file_reader.getPage(page))
with open(os.path.join(splited_path, f"{page}.pdf"),'wb') as out:
file_writer.write(out)
代码运行后会在splited_path路径里保存你pdf文件里的每一页
2、判断当前pdf的语言类型
这里使用的百度的paddlehub,paddlehub里有个baidu_language_recongnition模型,可以用来识别一段话的语言类型,先用pip安装paddlehub
pip install paddlehub
识别语言类型的具体代码实现
import paddlehub as hub
language_recognition_model = hub.Module(name='baidu_language_recognition')
text = ... # 通过pdfplumber提取pdf一页的内容
language_code = language_recognition_model.recognize(text[0:100])
if language_code == 'en':
# 复制文件到英文分类目录
elif language_code == 'zh':
# 复制文件到中文分类目录
else:
print("unsupport language code")
上面代码还未实现如何提取pdf的内容
3、提取pdf文件的内容
这里我们使用pdfplumber提取pdf文件的内容,同理,使用pip进行安装
pip install pdfplumber
话不多说,结合2所说,代码实现:
import pdfplumber
import os
import paddlehub as hub
language_recognition_model = hub.Module(name='baidu_language_recognition')
src_dir = "保存已分割pdf文件的目录"
en_dir = "保存英文分类的目录"
zh_dir = "保存中文分类的目录"
for filename in os.listdir(src_dir):
print(filename)
with pdfplumber.open(os.path.join(src_dir,filename)) as pdf:
page01 = pdf.pages[0] #指定页码
text = page01.extract_text()#提取文本
language_code = language_recognition_model.recognize(text[0:100])
if language_code == 'en':
os.popen(f'copy {os.path.join(src_dir,filename)} {en_dir}')# 复制文件到英文分类目录
elif language_code == 'zh':
os.popen(f'copy {os.path.join(src_dir,filename)} {zh_dir}')# 复制文件到中文分类目录
else:
print("unsupport language code" + filename)
上面这段代码运行过后,你的英文页pdf和中文页pdf就分类储存到对应语言目录下了
4、合并pdf
from PyPDF2 import PdfFileReader, PdfFileWriter
file_writer = PdfFileWriter()
filelist = os.listdir(en_dir) # 合并中文的时候把这里及一下的en_dir改成zh_dir即可
save_file = "合并后的文件保存路径"
# 分割后的文件都是以"数字.pdf"的形式保存的,这里使用文件名的数字进行排序
def keyFunc(e):
return int(e.split('.')[0])
filelist.sort(key=keyFunc) # 获取排序后的文件列表
for filename in filelist:
# 循环读取需要合并pdf文件
file_reader = PdfFileReader(os.path.join(en_dir,filename))
# 遍历每个pdf的每一页, 当然,这里分割后的pdf只有一页
for page in range(file_reader.getNumPages()):
# 写入实例化对象中
file_writer.addPage(file_reader.getPage(page))
with open(save_file,'wb') as out:
file_writer.write(out)
|