为了进一步完善代码,使其能够更灵活地处理不同格式的 QA 对,并增强错误处理和日志记录功能,我们可以在以下几个方面进行改进:
增强 extract_qa_pairs_from_content 函数:确保能够识别和处理不同格式的 QA 对,包括 JSON 格式的 QA 对,并处理空格和换行问题。
增加详细的错误日志记录:记录处理文件时的具体错误位置和错误信息。
完善 GUI:增加进度条和日志显示,使用户界面更加友好。
以下是完善后的代码:
import os
import json
import fitz # PyMuPDF
import docx
import re
import tkinter as tk
from tkinter import filedialog, messagebox, simpledialog
import logging
from tkinter import ttk# 设置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def clean_text(text):""" 清理文本,去除多余的空白字符和标点符号,替换影响数据集的特殊字符 """text = re.sub(r'\s+', ' ', text) # 合并多个空白字符text = re.sub(r'[^\w\s]', '', text) # 去除标点符号text = re.sub(r'"', "'", text) # 替换双引号text = re.sub(r'\\', '/', text) # 替换反斜杠return text.strip()def extract_qa_pairs_from_txt(file_path):with open(file_path, 'r', encoding='utf-8') as f:content = f.read()content = clean_text(content)qa_pairs = extract_qa_pairs_from_content(content)return qa_pairsdef extract_qa_pairs_from_docx(file_path):doc = docx.Document(file_path)content = []for para in doc.paragraphs:content.append(para.text)for table in doc.tables:for row in table.rows:for cell in row.cells:content.append(cell.text)for rel in doc.part.rels.values():if "textBox" in rel.target_ref:text_box = rel.target_partfor element in text_box.element.body:if element.tag.endswith('p'):content.append(element.text)content = '\n'.join(content)content = clean_text(content)qa_pairs = extract_qa_pairs_from_content(content)return qa_pairsdef extract_qa_pairs_from_pdf(file_path):doc = fitz.open(file_path)content = ''for page_num in range(len(doc)):page = doc.load_page(page_num)content += page.get_text("text")for annot in page.annots():if annot