吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2275|回复: 16
收起左侧

[Python 原创] 如何提取pdf里的中文页和英文页

[复制链接]
denislov 发表于 2022-11-19 19:26

前两天导师给了我一个任务,让我把一个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)

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| denislov 发表于 2022-11-25 11:50
greatzdl 发表于 2022-11-24 00:18
可以识别里面的图片嘛?

图片无法判断语言,你可以中间加一成ocr
头像被屏蔽
86618513 发表于 2022-11-20 08:30
zhukoov 发表于 2022-11-20 14:29
Alive47 发表于 2022-11-20 14:59
猴赛雷,羡慕
Z191299 发表于 2022-11-21 08:45
感觉实用性有点?
tanchao 发表于 2022-11-21 12:03
这个试试,支持分享
penguin2022 发表于 2022-11-21 17:31
涨知识了
deniol 发表于 2022-11-21 18:23
没看懂,太专业了
Gaobosky30 发表于 2022-11-22 08:49
之前用过这个做PDF切割页面,多个pdf整合,挺好用的
jddd 发表于 2022-11-23 21:26
666 正好需要这个,自己找了好多都不能用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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