Python预处理丨问答对数据集预处理

1. 规范行

在这里插入图片描述

如图所示,2295#才是真正第2295行内容,再看2333行,这一行其实根本不是完整的问答对,只是上一行内容的一部分。为了以后读取每一行问答对不出错,于是我决定先将这些行规范一下,鉴于此类有问题的行数很多,毕竟有接近8w条问答对,于是使用以下代码进行处理:

elements = ()
for i in range(1, 72290):#我一共有72289条数据,循环末尾加一
    elements += (f"{i}#",)  # 注意逗号,这里创建一个只有一个元素的元组
        
with open('QA数据72289条.txt', 'r', encoding = "utf-8") as input_file, open('output.txt', 'w', encoding = "utf-8") as output_file:
    for line in input_file:
        if line.startswith(elements):
            # 当前行的开头是以数字#开头的
            output_file.write(line)
        else:
            # 当前行的开头不是以数字#开头的
            output_file.seek(0, 2)  # 将文件指针移动到文件末尾
            output_file.write(line.rstrip('\n'))  # 去掉行末的换行符并写入文件末尾

使用以上代码可以规范绝大部分行,可是不知道哪里出了问题,又出现了如下图的问题:
在这里插入图片描述
莫名其妙在某一行的开头又出错了,虽然很少,但确实有一些!这一些需要我手动去改,但我不知道在哪些行有,我总不能再去逐行看吧,于是用以下代码检查哪些行不是以1234567890这十个数字开头的,返回它所在的行数:

def find_lines_without_digits(filename):
    # 打开文件,读取每一行
    with open(filename, 'r') as f:
        lines = f.readlines()

    # 记录不以数字开头的行数
    line_numbers = []
    for i, line in enumerate(lines):
        if not line.strip().startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')):
            line_numbers.append(i+1)

    # 返回不以数字开头的行数
    return line_numbers

filename = 'output.txt'
line_numbers = find_lines_without_digits(filename)
print(line_numbers)

一输出,尼玛还有这么多行?!不过好在总比不知道在哪些行强,这样有了行数在vscode右下角直接输入行数就可跳转到对应行去修改:
在这里插入图片描述
我在检查这些行的时候,偶然发现有的行开头确实是数字,但是不是行的序号,如下图28391行,于是重新修改查找代码:
在这里插入图片描述

with open('output.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()

for i, line in enumerate(lines):
    if not line.startswith(str(i+1)+'#'):
        print(f"Line {i+1}")

这样检查每一行的开头是否是该行数+“#”,如果不是,就会返回给我它的行数,比上一个方法严谨一些。

2. 对行中内容做修改

with open('output.txt', 'r', encoding = 'utf-8') as old_file, open('output1.txt', 'w', encoding = 'utf-8') as new_file:
    for line in old_file:
        new_line = line.split('#', 1)[1].strip() + '\n'
        new_file.write(new_line)

运行上述代码将每一行中开头的数字加#删掉,并把纯内容逐行写到新文本中。
在这里插入图片描述
看起来没那么赘余了。

在每一行中,第一个@和#之间的内容是“经发问人采纳”的意思,对QA问答对来说毫无作用,因为都是这个,所以想将这些东西去除掉,并且在@前边是问题,#后边是回答,所以我要在问题和回答之间加个分隔符。
在这里插入图片描述
以下是使用Python读取txt文档中的每一行,删除第一个“@”和第一个“#”及其中间所有的内容,用一个“《answer》”代替此位置,并将新内容写入新的txt文档中的代码:

# 打开原始文档和新文档
with open('output1.txt', 'r', encoding = 'utf-8') as f, open('output2.txt', 'w', encoding = 'utf-8') as new_file:
    # 逐行读取原始文档
    for line in f:
        # 找到第一个 "@" 和第一个 "#" 的位置
        at_pos = line.find("@")
        hash_pos = line.find("#")
        # 如果存在 "@" 和 "#",并且 "@" 在 "#" 之前
        if at_pos != -1 and hash_pos != -1 and at_pos < hash_pos:
            # 将 "@" 和 "#" 之间的内容替换为 "《answer》"
            new_line = line[:at_pos] + "《answer》" + line[hash_pos+1:]
        else:
            # 如果不存在 "@" 和 "#",或者 "@" 在 "#" 之后,则不进行替换
            new_line = line
        # 将处理后的行写入新文档中
        new_file.write(new_line)

在这里插入图片描述
看起来又更顺眼了一点!

但是我红框中的内容其实也是些无意义的内容:
在这里插入图片描述
类似于点赞转发评论数量一样,于是我也想连这些数字和前边的点评二字一并删除。

思路就是读取txt文档的每一行,将每行中最后一个“དཔྱད་བརྗོད།”字符及其后边的字符删掉,并将这一行剩余的部分写入新txt文档的新一行中,代码如下:

# 打开原始文件和目标文件
with open('output2.txt', 'r', encoding = 'utf-8') as infile, open('output3.txt', 'w', encoding = 'utf-8') as outfile:
    # 逐行读取原始文件并处理每行
    for line in infile:
        # 删除每行中最后一个"དཔྱད་བརྗོད།"及其后面的字符
        line = line.rstrip()  # 删除行末空格和换行符
        line = line[:line.rfind('དཔྱད་བརྗོད།')]  # 删除最后一个"###"及其后面的字符
        # 将处理后的行写入目标文件
        outfile.write(line + '\n')

处理之后,好嘛,确实看起来更简洁了,因为我发现有的根本就没有答案,只有问题!
在这里插入图片描述
但是也有很多问题和答案都有的:
在这里插入图片描述
这样其实每一行就只是问题+《answer》分隔符+答案了。

3. 总结

数据预处理到这里基本就结束了,剩下的部分等到在存储进数据库时,再做说明吧!

后边按照老师的要求应该会搭一个问答系统放在网页上,老师也让我再学一下知识表示的内容,听起来还很有意思呢!到时候会再进行记录~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mmdetectionsunrgb-d数据集是一个用于物体检测的数据集,包含了来自不同场景的图像和对应的标注框。在进行物体检测任务前,通常需要进行一些数据预处理,提高模型的训练效果。本文介绍了使用Python进行mmdetectionsunrgb-d数据集预处理的方法。 第一步:下载数据集 首先需要从数据集官网(或者其他可靠来源)下载mmdetectionsunrgb-d数据集。下载完成后需要解压缩,并将解压后的文件存放到合适的路径下。 第二步:安装相关库 在进行数据预处理前,需要安装一些相关的Python库。常用的库包括numpy、Pillow、opencv-python等。这些库可以通过pip命令进行安装。 第三步:读取图像和标注文件 读取数据集中的图像和对应的标注文件。可以使用Python内置的io流和csv库来读取标注文件,并使用Pillow库来读取图像文件。 第四步:对图像进行预处理 对读取的图像进行一些预处理操作,例如将图像裁剪为指定大小、调整图像亮度和对比度、进行数据增强等。可以使用opencv-python库的函数来完成这些操作。 第五步:对标注框进行预处理 对读取的标注框进行一些预处理操作,例如将坐标缩放为网络输入的大小、根据实际情况进行标签映射、去除一些不必要的标注框等。可以使用numpy库来完成这些操作。 第六步:保存预处理后的数据 将预处理后的图像和标注文件保存在指定的位置,以备下一步训练使用。 综上所述,对于mmdetectionsunrgb-d数据集Python预处理程序可以分为以上六个步骤。通过对预处理程序的调整和参数的设置,可以得到适合不同模型的预处理数据集

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Magneto_万磁王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值