denislov 发表于 2022-11-19 19:26

如何提取pdf里的中文页和英文页

前两天导师给了我一个任务,让我把一个pdf里面的中文页和英文页分开来,pdf有300+页,先是英文页,然后是对英文翻译的中文页,该怎么弄呢?
## 1、pdf分割
这个可以用软件,也可以用代码,wps就有pdf分割的功能
如何用代码呢,这里用python的pypdf2,先用pip进行安装
```bash
pip install pypdf2
```
分割pdf的具体代码实现:
```python
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
```bash
pip install paddlehub
```
识别语言类型的具体代码实现
```python
import paddlehub as hub
language_recognition_model = hub.Module(name='baidu_language_recognition')


text = ... # 通过pdfplumber提取pdf一页的内容
language_code = language_recognition_model.recognize(text)
    if language_code == 'en':
        # 复制文件到英文分类目录
    elif language_code == 'zh':
        # 复制文件到中文分类目录
    else:
        print("unsupport language code")
```
上面代码还未实现如何提取pdf的内容
## 3、提取pdf文件的内容
这里我们使用pdfplumber提取pdf文件的内容,同理,使用pip进行安装
```shell
pip install pdfplumber
```
话不多说,结合2所说,代码实现:
```python
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 #指定页码
        text = page01.extract_text()#提取文本
       
                language_code = language_recognition_model.recognize(text)
            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
```python
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('.'))

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)
```

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

我想尝试识别论文pdf,因为要做一个语料库

Alive47 发表于 2022-11-20 14:59

猴赛雷,羡慕

Z191299 发表于 2022-11-21 08:45

感觉实用性有点?{:1_909:}

tanchao 发表于 2022-11-21 12:03

这个试试,支持分享

penguin2022 发表于 2022-11-21 17:31

涨知识了{:1_893:}

deniol 发表于 2022-11-21 18:23

没看懂,太专业了{:1_889:}

Gaobosky30 发表于 2022-11-22 08:49

之前用过这个做PDF切割页面,多个pdf整合,挺好用的

jddd 发表于 2022-11-23 21:26

666 正好需要这个,自己找了好多都不能用
页: [1] 2
查看完整版本: 如何提取pdf里的中文页和英文页