期刊论文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窗口,包括一个选择文件夹的按钮和一个进度条。
使用说明
要使用这个工具,你可以按照以下步骤进行操作:
- 运行程序后,点击 “选择文件夹” 按钮。
- 在弹出的对话框中,选择包含要转换的PDF文件的文件夹。
- 程序将自动创建存储转换后HTML和TXT文件的文件夹。
- 转换过程将自动开始,进度条会显示转换的进展情况。
- 转换完成后,将弹出一个消息框提示转换已完成,并自动打开存储TXT文件的文件夹。
这个简单而实用的GUI应用将帮助你将期刊论文从PDF格式转换为可供文本分析和处理的TXT格式,提高你的科研工作效率
参考文章:b站@穿云蟒 Python提取pdf文献分栏文本并保存为txt