当前位置: 首页 > article >正文

羲和数据清洗器002

fix_json_line(line) 函数:

尝试直接解析 JSON。
如果解析失败,尝试修复常见的 JSON 格式错误,如引号和括号。
返回修复后的 JSON 对象,如果无法修复则返回 None。
convert_and_check_jsonl_file(input_file, log_file, output_file=None) 函数:

读取输入文件的每一行。
使用 fix_json_line 函数修复 JSON 格式错误。
如果 JSON 对象包含 “answer” 键,将其转换为 “xihe_answers” 和 “ling_answers”。
检查 JSON 对象是否符合要求,并记录错误信息到日志文件。
将有效的行保存到输出文件中。
示例用法
假设你有一个名为 data.jsonl 的文件,内容如下:

jsonl
{“question”: “11111”, “answer”: “22222”}
{“question”: “What is the capital of France?”, “xihe_answers”: [“Paris”], “ling_answers”: [“Paris”]}
{“question”: “What is 2 + 2?”, “xihe_answers”: [“4”], “ling_answers”: [4]} // 错误:ling_answers 应该是字符串列表
{“question”: “What is the largest planet in our solar system?”, “xihe_answers”: [“Jupiter”], “ling_answers”: [“Jupiter”]}
{“question”: “What is the capital of France?”, xihe_answers: [“Paris”], ling_answers: [“Paris”]} // 错误:缺少引号
运行程序后,选择 data.jsonl 作为输入文件,选择 valid_data.jsonl 作为输出文件。程序会生成一个 error_log.txt 文件,记录错误信息,并将有效的行保存到 valid_data.jsonl 中。

生成的
valid_data.jsonl
内容示例
jsonl
{“question”: “11111”, “xihe_answers”: [“22222”], “ling_answers”: [“22222”]}
{“question”: “What is the capital of France?”, “xihe_answers”: [“Paris”], “ling_answers”: [“Paris”]}
{“question”: “What is the largest planet in our solar system?”, “xihe_answers”: [“Jupiter”], “ling_answers”: [“Jupiter”]}
生成的
error_log.txt
内容示例
code
第 3 行错误: {“question”: “What is 2 + 2?”, “xihe_answers”: [“4”], “ling_answers”: [4]}
第 4 行错误: {“question”: “What is the capital of France?”, xihe_answers: [“Paris”], ling_answers: [“Paris”]}
通过这些改进,程序不仅能够检查和记录错误,还能自动修复常见的 JSON 格式错误,并将数据转换为所需的格式。

import json
import tkinter as tk
from tkinter import filedialog, messagebox
import re

def fix_json_line(line):
    # 尝试修复 JSON 格式错误
    try:
        # 尝试直接解析
        data = json.loads(line)
        return data
    except json.JSONDecodeError as e:
        # 尝试修复引号和括号
        fixed_line = re.sub(r'([{,]\s*)([a-zA-Z_][a-zA-Z0-9_]*)\s*:', r'\1"\2":', line)
        fixed_line = re.sub(r'([a-zA-Z_][a-zA-Z0-9_]*)(\s*[,}])', r'"\1"\2', fixed_line)
        fixed_line = re.sub(r'([{,]\s*"[^"]*")([^"]*")(\s*[,}])', r'\1\2\3', fixed_line

http://www.kler.cn/news/353410.html

相关文章:

  • jEasyUI 创建自定义视图
  • Unable to open nested entry ‘********.jar‘ 问题解决
  • YOLOv11改进-卷积-引入小波卷积WTConv 解决多尺度小目标问题
  • Redis中String类型常见的应用场景
  • 关于Linux自带的python2.6.6升级到2.7.5版本步骤详解
  • 企业文件怎么管控?这几个软件你一定要知道!
  • 纯HTML实现标签页切换
  • uni-app 打包成app时 限制web-view大小
  • 【Linux修炼进程之权限篇】探讨Linux权限问题
  • 【Linux 从基础到进阶】数据加密与安全传输
  • ES 入门 -http-条件查询分页查询查询排序
  • js 对网页表格内容进行全选
  • 车载软件架构 --- 软件定义汽车开发:S32 CoreRide平台
  • 系统架构设计师教程 第16章 16.3 嵌入式系统软件架构设计方法 笔记
  • 代码随想录算法训练营第十七天|Day17二叉树
  • 【ChatGPT】如何通过 Prompt 优化 ChatGPT 的输出
  • 解锁C++多态的魔力:灵活与高效的编码艺术(上)
  • 【私有云盘搭建】Portainer CE部署NextCloud,轻松实现公网访问
  • Java 8 的内存结构
  • 基于MATLAB的语音信号处理系统
  • CV图像处理小工具——json文件转mask
  • 06_实现watch
  • 【排序】——2.快速排序法(含优化)
  • 开源项目低代码表单FormCreate重写内置的请求方法,实现中间件和附带token
  • 类间方差,分割地物
  • 基于SSM的医院药品管理系统