大语言模型LLM的微调中 QA 转换的小工具 txt2excel.py

server/2024/11/28 7:58:07/

在训练语言模型中,需要将文件整理成规范的文档,因为文档本身会有很多不规范的地方,为了训练的正确,将文档进行规范处理

文章最后附上txt的sample

该 Python 代码的主要目的是将特定格式的文本文件中的问答数据读取出来,并写入到 Excel 文件中。其具体功能如下:

1. 读取文本文件中的问答数据

  • 代码首先定义了read_txt_file函数,用于读取指定路径(txt_file_path)的文本文件。
  • 在函数中,以utf-8编码打开文件,逐行读取内容。通过判断每行是否以### Q:### Q:开头来识别问题,以### A:### A:开头来识别答案。
  • 将识别出的问题和答案组合成完整的问答对,并存储在一个列表中返回。

2. 将问答数据写入 Excel 文件

  • 接着定义了write_to_excel函数,该函数接受问答数据列表和输出文件路径(excel_file_path)作为参数。
  • 在函数内部,创建一个新的 Excel 工作簿,获取活动工作表并设置其标题为QA_Data
  • 然后遍历问答数据列表,将每个问答对中的问题和答案进行处理后,作为一行数据添加到工作表中。
  • 最后保存工作簿到指定的输出路径,生成包含问答数据的 Excel 文件。

代码如下

1. 导入必要的库

from openpyxl import Workbook
import os

  • from openpyxl import Workbook:从openpyxl库中导入Workbook类,用于创建和操作 Excel 文件。
  • import os:导入os模块,用于处理文件路径相关的操作。

2. 设置工作目录

work_dir = os.path.dirname(os.path.abspath(__file__))

这行代码获取当前 Python 脚本文件所在的目录路径,并将其赋值给work_dir变量。os.path.dirname获取指定路径的目录部分,os.path.abspath获取绝对路径,__file__是 Python 内置变量,表示当前脚本文件的路径。

3. 指定文件路径

txt_file_path = os.path.join(work_dir, "qa.txt")   # 替换为实际的文本文档路径
excel_file_path = "output.xlsx"  # 替换为输出的Excel文件路径

  • txt_file_path:通过os.path.join将工作目录和文件名qa.txt拼接成完整的文本文件路径,这里假设qa.txt与脚本在同一目录下,如果实际情况不同,需要修改路径。
  • excel_file_path:指定输出 Excel 文件的名称,这里假设输出文件在当前工作目录下。如果需要指定其他目录,同样可以使用os.path.join进行路径拼接。

4. 读取文本文件函数

def read_txt_file(file_path):with open(file_path, 'r', encoding='utf-8') as file:lines = file.readlines()qa_list = []current_qa = ""for line in lines:line = line.strip()if line.startswith("### Q:") or line.startswith("### Q:"):if current_qa:qa_list.append(current_qa)current_qa = line.replace("### Q:", "Q:")elif line.startswith("### A:") or line.startswith("### A:"):current_qa += " " + line.replace("### A:", "A:")if current_qa:qa_list.append(current_qa)return qa_list

  • def read_txt_file(file_path)::定义了一个名为read_txt_file的函数,它接受一个文件路径作为参数,用于读取文本文件中的问答内容。
  • with open(file_path, 'r', encoding='utf-8') as file::以只读模式('r')打开指定路径的文本文件,并使用utf-8编码。with语句确保文件在使用后正确关闭。
  • lines = file.readlines():读取文件的所有行,并将每行内容作为一个字符串存储在lines列表中。
  • qa_list = []:初始化一个空列表,用于存储解析后的问答对。
  • current_qa = "":初始化一个空字符串,用于临时存储当前正在解析的问答内容。
  • 循环部分:
    • line = line.strip():去除每行字符串开头和结尾的空白字符(如空格、换行符等)。
    • if line.startswith("### Q:") or line.startswith("### Q:")::检查当前行是否以### Q:开头,如果是,表示一个新问题的开始。
      • if current_qa::如果current_qa不为空,说明之前已经读取了一个完整的问答对,将其添加到qa_list列表中。
      • current_qa = line.replace("### Q:", "Q:"):将当前行中的### Q:替换为Q:,并赋值给current_qa,开始存储新的问题。
    • elif line.startswith("### A:") or line.startswith("### A:")::检查当前行是否以### A:开头,如果是,表示当前行是问题的答案部分。
      • current_qa += " " + line.replace("### A:", "A:"):将当前行中的### A:替换为A:,并添加到current_qa字符串中,与问题部分组合成完整的问答对。
  • 最后部分:
    • if current_qa::在循环结束后,如果current_qa不为空,说明最后一组问答对还未添加到qa_list中,将其添加进去。
    • return qa_list:返回包含所有解析后的问答对的列表。

5. 将内容写入 Excel 文件函数

def write_to_excel(data, output_file):wb = Workbook()ws = wb.activews.title = "QA_Data"for item in data:parts = item.split("A:")question = parts[0].replace("Q:", "").strip()answer = parts[1].strip() if len(parts) > 1 else ""ws.append([question, answer])wb.save(output_file)

  • def write_to_excel(data, output_file)::定义了一个名为write_to_excel的函数,它接受数据列表和输出文件路径作为参数,用于将数据写入 Excel 文件。
  • wb = Workbook():创建一个新的 Excel 工作簿对象。
  • ws = wb.active:获取工作簿中的活动工作表(默认是第一个工作表)。
  • ws.title = "QA_Data":将工作表的标题设置为QA_Data
  • 循环部分:
    • parts = item.split("A:"):将每个问答对字符串按照A:进行分割,得到一个包含问题和答案的列表(假设格式为问题A:答案)。
    • question = parts[0].replace("Q:", "").strip():从分割后的列表中获取问题部分,去除Q:前缀并去除首尾空白字符,然后赋值给question变量。
    • answer = parts[1].strip() if len(parts) > 1 else "":如果分割后的列表长度大于 1,说明有答案部分,获取答案并去除首尾空白字符,否则将answer设置为空字符串。
    • ws.append([question, answer]):将问题和答案作为一行数据添加到工作表中。
  • wb.save(output_file):保存工作簿到指定的输出文件路径。

6. 主程序部分

if __name__ == "__main__":qa_data = read_txt_file(txt_file_path)write_to_excel(qa_data, excel_file_path)

  • if __name__ == "__main__"::这是 Python 中的一个常用结构,用于确保代码在作为主程序运行时执行以下代码块,而在被导入为模块时不执行。
  • qa_data = read_txt_file(txt_file_path):调用read_txt_file函数读取指定文本文件中的问答数据,并将结果赋值给qa_data变量。
  • write_to_excel(qa_data, excel_file_path):调用write_to_excel函数将问答数据写入指定的 Excel 文件中。

整体代码如下:

from openpyxl import Workbook
import os# 设置工作目录(与训练代码中的设置对应)
work_dir = os.path.dirname(os.path.abspath(__file__))txt_file_path = os.path.join(work_dir, "qa.txt")   # 替换为实际的文本文档路径
excel_file_path = "output.xlsx"  # 替换为输出的Excel文件路径# 读取文本文件
def read_txt_file(file_path):with open(file_path, 'r', encoding='utf-8') as file:lines = file.readlines()qa_list = []current_qa = ""for line in lines:line = line.strip()if line.startswith("### Q:") or line.startswith("### Q:"):if current_qa:qa_list.append(current_qa)current_qa = line.replace("### Q:", "Q:")elif line.startswith("### A:") or line.startswith("### A:"):current_qa += " " + line.replace("### A:", "A:")if current_qa:qa_list.append(current_qa)return qa_list# 将内容写入Excel文件
def write_to_excel(data, output_file):wb = Workbook()ws = wb.activews.title = "QA_Data"for item in data:parts = item.split("A:")question = parts[0].replace("Q:", "").strip()answer = parts[1].strip() if len(parts) > 1 else ""ws.append([question, answer])wb.save(output_file)if __name__ == "__main__":qa_data = read_txt_file(txt_file_path)write_to_excel(qa_data, excel_file_path)

qa.txt
### Q: 目前什么事项会有系统邮件或者企信消息通知?
### A: [此处未明确提及具体通知事项,需查看文档中的图片,假设图片显示包含合同审批通知、付款通知等]合同审批进度、付款状态等事项会有系统邮件或企信消息通知(具体需根据文档中图片所示内容确定)。

## 商旅
### Q: 元年商旅订票时身份信息有误,如何修改?
### A: 行程选择界面,点击出行人“>”按钮编辑证件信息,外籍注意检查护照信息,避免证件信息有误影响乘机。

### Q: 差旅费哪些发票需要员工线下打印?
### A: 机票中的电子客运行程单、酒店住宿专票、火车票,线上订票月结统付统一打印发票;使用护照等非身份证订票的火车票、火车退改签票据,须员工线下打印后交回;滴滴用车、餐费、洗衣费等,须员工垫付后开票。

### Q: 差旅酒店住宿不通过线上预订,如何在差旅事前申请中预估费用?
### A: 按标准添加行程规划,如选择目的地、入住离店日期、房间数、住宿标准等,系统会自动计算预估费用上限。

### Q: 跨店同事是否可以合住?
### A: 为节约费用,可以合住,请线下预定酒店,报销时事由特殊报备。另外,同店员工也是可以合住的,请通过元年预定酒店即可。

### Q: 老系统已审批完成的差旅事前申请在哪提报销?
### A: 商旅模块—行程方案—迁移前差旅费报销单。

### Q: 迁移前差旅费报销单据,如何添加未在事前申请中预估的费用?
### A: 在预算归属中点击操作下的“⊕”按钮,新增行项目添加费用。老系统事前申请的所有行项目、未在事前申请中预估报销新增的行项目均在同一费用明细行里添加。

整理后的 excel 如下

 


http://www.ppmy.cn/server/145568.html

相关文章

蓝桥杯不知道叫什么题目

小蓝有一个整数,初始值为1,他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如,如果整…

8K超高清相机+双光谱融合技术

8K超高清相机 双光谱融合技术

如何通过PHP爬虫模拟表单提交,抓取隐藏数据

引言 在网络爬虫技术中,模拟表单提交是一项常见的任务,特别是对于需要动态请求才能获取的隐藏数据。在电商双十一、双十二等促销活动期间,商品信息的实时获取尤为重要,特别是针对不断变化的价格和库存动态。为了满足这种需求&…

基于Java Springboot华为数码商城交易平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

【人工智能】深入解析GPT、BERT与Transformer模型|从原理到应用的完整教程

在当今人工智能迅猛发展的时代,自然语言处理(NLP)领域涌现出许多强大的模型,其中GPT、BERT与Transformer无疑是最受关注的三大巨头。这些模型不仅在学术界引起了广泛讨论,也在工业界得到了广泛应用。那么,G…

基于Dell Idrac7的服务器硬件监控指标解读

在现代化数据中心中,服务器的稳定运行对于保障业务连续性至关重要。为了确保服务器的健康状况,运维团队需要借助高效的监控工具。Dell Idrac7作为Dell服务器的一个关键组件,提供了强大的远程管理和监控功能。 本文将针对使用IPMI和Idracm命令…

数据结构-堆的实现和应用

目录 1.堆的概念 2.堆的构建 3.堆的实现 4.堆的功能实现 4.1堆的初始化 4.2堆的销毁 4.3堆的插入 4.3.1向上调整 4.4堆的删除 4.4.1向下调整法 ​编辑4.5取堆顶 5. 向上调整法和向下调整法比较 6.堆的应用 6.1TOP-K问题 6.2TOP-K思路 6.2.1用前n个数据来建堆 6.…

天通物联网应用:首创渐进式图片压缩算法,实现1000倍高效图传,可一键拨打天通电话

一、天通卫星物联网应用 (一)天通卫星发展历程 汶川地震后,国家提出建设自己的移动通信卫星,以确保在严重自然灾害时的应急通信需求。2011年国家立项研制建设独立自主的卫星移动通信系统。2016年天通一号01星在我国西昌卫星发射…