期刊论文PDF分栏转TXT工具 - 一个简单的Python GUI应用

期刊论文PDF分栏转TXT工具 - 一个简单的Python GUI应用

在科学研究中,阅读和处理大量的期刊论文是一个常见的任务。然而,有时候我们需要将PDF格式的论文转换为可供文本分析和处理的TXT格式。为了解决这个问题,我编写了一个名为“期刊论文PDF分栏转TXT工具”的Python GUI应用。

程序功能

这个工具可以将选择的PDF文件夹中的所有期刊论文逐个转换为TXT文件。每个PDF文件都将先转换为HTML格式,然后使用Beautifulsoup库将HTML文件解析为TXT文件。以下是工具的主要功能:

  • 选择要转换的PDF文件夹。
  • 自动创建存储转换后HTML文件的文件夹。
  • 自动创建存储转换后TXT文件的文件夹。
  • 显示转换进度条,以便用户了解转换的进展。
  • 转换完成后,弹出消息框提示用户转换已完成,并自动打开存储TXT文件的文件夹。
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

代码解析

让我们一起来看看实现这些功能的Python代码:

import os
import fitz
from tqdm import tqdm
from bs4 import BeautifulSoup
import re
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import tkinter.ttk as ttk

# 省略部分代码...

在上述代码中,我们导入了一些需要使用的Python库。os库用于文件和文件夹操作,fitz库用于处理PDF文件,tqdm库用于创建进度条,BeautifulSoup库用于解析HTML文件,re库用于正则表达式操作,tkinter库用于创建GUI窗口和对话框,ttk模块用于创建进度条部件。

def pdf2html(input_path, html_path):
    doc = fitz.open(input_path)
    html_content = ''
    for page in tqdm(doc, desc='Converting PDF'):
        html_content += page.get_text('html')
    html_content += "</body></html>"
    with open(html_path, 'w', encoding='utf-8', newline='') as fp:
        fp.write(html_content)


def html2txt(html_path, txt_path):
    html_file = open(html_path, 'r', encoding='utf-8')
    htmlhandle = html_file.read()
    soup = BeautifulSoup(htmlhandle, "html.parser")
    for div in soup.find_all('div'):
        for p in div:
            text = str()
            for span in p:
                p_info = '<span .*?>(.*?)</span>'   # 提取规则
                res = re.findall(p_info, str(span))  # findall函数
                if len(res) == 0:
                    pass
                else:
                    text += res[0]
            with open(txt_path, 'a', encoding='utf-8') as text_file:
                text_file.write(text)
                text_file.write('\n')


def convert_files():
    folder_path = filedialog.askdirectory(title='选择PDF文件夹')
    if folder_path:
        pdf_folder = folder_path
        parent_folder = os.path.dirname(pdf_folder)
        html_folder = os.path.join(parent_folder, 'html_files')
        txt_folder = os.path.join(parent_folder, 'txt_files')

        if not os.path.exists(html_folder):
            os.makedirs(html_folder)

        if not os.path.exists(txt_folder):
            os.makedirs(txt_folder)

        pdf_files = [file for file in os.listdir(pdf_folder) if file.endswith('.pdf')]

        progress_bar['maximum'] = len(pdf_files)

        for filename in pdf_files:
            pdf_path = os.path.join(pdf_folder, filename)
            html_path = os.path.join(html_folder, os.path.splitext(filename)[0] + '.html')
            txt_path = os.path.join(txt_folder, os.path.splitext(filename)[0] + '.txt')

            pdf2html(pdf_path, html_path)

            html2txt(html_path, txt_path)

            progress_bar['value'] += 1
            progress_bar.update()

        messagebox.showinfo('转换完成', 'PDF转换完成!')
        open_txt_folder(parent_folder)


def open_txt_folder(parent_folder):
    txt_folder = os.path.join(parent_folder, 'txt_files')
    os.startfile(txt_folder)


window = tk.Tk()
window.title('期刊论文PDF分栏转TXT工具')

select_folder_btn = tk.Button(window, text='选择文件夹', command=convert_files)
select_folder_btn.pack(pady=20)

progress_bar = ttk.Progressbar(window, orient='horizontal', length=300, mode='determinate')
progress_bar.pack(pady=10)

window.mainloop()

在上述代码中,我们定义了一系列函数来实现转换功能。pdf2html函数接受一个PDF文件路径和一个HTML文件路径作为输入,使用fitz库打开PDF文件并逐页转换为HTML格式,并将结果保存到HTML文件中。html2txt函数接受一个HTML文件路径和一个TXT文件路径作为输入,使用BeautifulSoup库解析HTML文件,提取所需的文本内容,并将结果保存到TXT文件中。convert_files函数用于处理用户选择的PDF文件夹,创建必要的文件夹,遍历PDF文件夹中的文件并依次进行转换操作。open_txt_folder函数用于打开存储TXT文件的文件夹。最后,我们使用tkinter库创建了一个GUI窗口,包括一个选择文件夹的按钮和一个进度条。

使用说明

要使用这个工具,你可以按照以下步骤进行操作:

  1. 运行程序后,点击 “选择文件夹” 按钮。
  2. 在弹出的对话框中,选择包含要转换的PDF文件的文件夹。
  3. 程序将自动创建存储转换后HTML和TXT文件的文件夹。
  4. 转换过程将自动开始,进度条会显示转换的进展情况。
  5. 转换完成后,将弹出一个消息框提示转换已完成,并自动打开存储TXT文件的文件夹。

这个简单而实用的GUI应用将帮助你将期刊论文从PDF格式转换为可供文本分析和处理的TXT格式,提高你的科研工作效率

参考文章:b站@穿云蟒 Python提取pdf文献分栏文本并保存为txt

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值