Files
2026-07-13 12:35:57 +08:00

155 lines
4.4 KiB
Python

"""
Markdown 到 QA 数据集处理流程 - 统合脚本
这个脚本整合了从 Markdown 文件到最终 QA 数据集的完整处理流程:
1. Step 1: Markdown 文件切分并转换为 CSV (step1_md2csv)
2. Step 2: 从 CSV 文本生成 QA 对 (step2_chunk2qa)
3. Step 3: 合并多个 CSV 文件为单个数据集 (step3_merge)
使用说明:
- 在 __main__ 中调整 base_folder 和其他参数
- 可以根据需要选择运行部分步骤或全部步骤
- 每个步骤的函数都可以独立调用
"""
import os
from step1_md2csv import process_md_to_csv
from step2_chunk2qa import process_csv_to_qa
from step3_merge import merge_csv_files
def run_step1(input_folder, output_folder, chunk_size=350, min_chunk_size=100):
"""
Step 1: 将 Markdown/文本文件处理为 CSV
参数:
input_folder: Markdown 文件输入路径
output_folder: CSV 文件输出路径
chunk_size: 文本切分大小
min_chunk_size: 最小块大小
输出:
CSV 文件,包含 Text, Text_pure, Img_url, Position 列
"""
print("\n" + "="*60)
print("Step 1: 处理 Markdown 文件为 CSV")
print("="*60)
print(f"输入文件夹: {input_folder}")
print(f"输出文件夹: {output_folder}")
print(f"切分大小: {chunk_size}, 最小块: {min_chunk_size}")
process_md_to_csv(
input_folder=input_folder,
output_folder=output_folder,
chunk_size=chunk_size,
min_chunk_size=min_chunk_size
)
print("\nStep 1 完成!\n")
def run_step2(input_folder, output_folder, rounds=3, max_workers=5):
"""
Step 2: 从 CSV 文本生成 QA 对
参数:
input_folder: CSV 文件输入路径
output_folder: 带 QA 的 CSV 输出路径
rounds: 每行生成轮次(选择最长结果)
max_workers: 并发线程数
输入:
需要包含 Text_pure 列的 CSV 文件
输出:
CSV 文件,增加 Question 和 Answer 列
"""
print("\n" + "="*60)
print("Step 2: 生成 QA 对")
print("="*60)
print(f"输入文件夹: {input_folder}")
print(f"输出文件夹: {output_folder}")
print(f"生成轮次: {rounds}, 最大并发: {max_workers}")
process_csv_to_qa(
input_folder=input_folder,
output_folder=output_folder,
rounds=rounds,
max_workers=max_workers
)
print("\nStep 2 完成!\n")
def run_step3(input_folder, output_folder, output_filename):
"""
Step 3: 合并多个 CSV 文件为单个数据集
参数:
input_folder: 多个 CSV 文件的输入路径
output_folder: 合并后文件的输出路径
output_filename: 合并后的文件名
输出:
单个合并的 CSV 文件,包含 file_name 列标记来源
"""
print("\n" + "="*60)
print("Step 3: 合并 CSV 文件")
print("="*60)
print(f"输入文件夹: {input_folder}")
print(f"输出文件夹: {output_folder}")
print(f"输出文件名: {output_filename}")
merge_csv_files(
input_folder=input_folder,
output_folder=output_folder,
output_filename=output_filename
)
print("\nStep 3 完成!\n")
if __name__ == "__main__":
# ===== 配置区域 =====
# 数据集基础配置
DATA_NAME = "notebook_lm"
BASE_FOLDER = DATA_NAME # 输入/输出的子文件夹名
DATASET_NAME = DATA_NAME # 最终数据集名称
# Step 1 参数
CHUNK_SIZE = 350 # 文本切分大小
MIN_CHUNK_SIZE = 100 # 最小块大小
# Step 2 参数
QA_ROUNDS = 3 # QA 生成轮次
MAX_WORKERS = 5 # 并发线程数
# ===== 选择运行模式 =====
CURRENT_INPUT_FOLDER = "input"
CURRENT_OUTPUT_FOLDER = "output"
run_step1(
input_folder=f"./{CURRENT_INPUT_FOLDER}/{BASE_FOLDER}/",
output_folder=f"./{CURRENT_OUTPUT_FOLDER}/{BASE_FOLDER}/",
chunk_size=CHUNK_SIZE,
min_chunk_size=MIN_CHUNK_SIZE
)
# CURRENT_INPUT_FOLDER = CURRENT_OUTPUT_FOLDER
# CURRENT_OUTPUT_FOLDER = "QA"
# run_step2(
# input_folder=f"./{CURRENT_INPUT_FOLDER}/{BASE_FOLDER}/",
# output_folder=f"./{CURRENT_OUTPUT_FOLDER}/{BASE_FOLDER}/",
# rounds=QA_ROUNDS,
# max_workers=MAX_WORKERS
# )
CURRENT_INPUT_FOLDER = CURRENT_OUTPUT_FOLDER
CURRENT_OUTPUT_FOLDER = "merged"
run_step3(
input_folder=f"./{CURRENT_INPUT_FOLDER}/{BASE_FOLDER}/",
output_folder=f"./{CURRENT_OUTPUT_FOLDER}/",
output_filename=f"{DATASET_NAME}.csv"
)