一、背景
最近在做一个数据集,但是数据集是不同人标注的,不同人标注的习惯和方式不同,因此需要对数据集做一些后处理。
二、问题介绍
做好数据集之后,需要对txt文本进行统计,统计的时候发现了下面的情况:
很明显里面的two和2是一个意思,但是他们却是按不同的内容来记录的,因此需要将他们改为一致。另外还有一些特殊情况,比如:
统计的文本中还有类似于制表符,单词前和单词后有空格,这些都是需要处理的。
三、解决方法
思路比较简单,直接遍历文件夹下所有txt文件,然后修改里面的内容就可以了,这里将'two'改为'2'为例,代码为:
import os
import re
def modify_txt(text_file_path, input_string, output_string):
text_files = os.listdir(text_file_path)
for text_file in text_files:
print(text_file)
with open(os.path.join(text_file_path, text_file), 'r+') as f:
line_new = re.sub(input_string, output_string, f.read())
f.seek(0) # 将指针位置指到文件开头
f.truncate() # 清空文件内容
f.write(line_new)
if __name__ == '__main__':
modify_txt('./annoted_text/', 'two', '2')
执行上述文件,可以将文件夹里面的所有'two'改为'2'。下面是处理后的结果:
四、其他
需要注意的是,如果文本中有中文字符,有可能会报错,比如我的文件中个别有中文'?'而非'?',这样就报错了,不过可以根据输出的print(text_file)定位出哪个文件有问题,由于我的问题文件比较少,所以就直接手动修改了。