我有一个具有大约300行结构的json文件,如下所示:
[
{
"OCR":"ANNA żółty LEWANDOWSKA\nHEALTHY SWEETS by Am 31\n",
"Correct_title":...,
"Correct_author":...,
"Correct_ID":...
},
{
"OCR":"some other\nstuff that should\nstay in same line",
"Correct_title":...,
"Correct_author":...,
"Correct_ID":...
}
]
这是OCR的结果。每条记录代表一本书,我只需要保存'OCR‘字段,但是将新行字符嵌入到一个字符串中。
然后对每个记录进行md5sum计数,然后根据编码名称的最后一个字符,将每个记录保存在3个文件中的一个中,即: 0-4 ->列车,5-7 -> dev-0,rest -> test-A。
注意:
。
以下是我迄今尝试过的:
import hashlib
file = "data/books_OCR.json"
df_ocr = pd.read_json(file, encoding='utf-8')
for item in df_ocr['OCR']:
line = hashlib.md5(item.encode('utf-8')).hexdigest()
p_train = re.compile(r'[0-4]$')
p_dev = re.compile(r'[5-7]$')
# Distribute files
if re.match(p_train, line[-1]):
with open('gonito/train', 'a', encoding="utf-8", newline='') as f:
f.write(item)
elif re.match(p_dev, line[-1]):
with open('gonito/dev-0', 'a', encoding="utf-8", newline='') as f:
f.write(item)
else:
with open('gonito/test-A', 'a', encoding="utf-8", newline='') as f:
f.write(item)
例如,文件测试的预期输出-A是:
ANNA żółty LEWANDOWSKA\nHEALTHY SWEETS by Am 31\n
some other\nstuff that should\nstay in same line
但我得到的是:
ANNA LEWANDOWSKA
HEALTHY SWEETS by Am 31
some other
stuff that should
stay in same line
当我试图将记录写到*.csv或*.tsv (用‘\t’分隔)文件时,也会发生同样的事情--我得到了几行文本(记录),而不是只有1行纯文本。
是否有合理的解决办法?
发布于 2021-09-09 15:12:52
如注释中所述,如果您想要的话,可以轻松地用\n
替换换行符。
这样做的一个问题是,包含文字反斜杠的序列将是不明确的。c:\new\tmp
是否包含换行符(和选项卡)或文字反斜杠(后面是文字n
)?消除歧义的正确方法是反斜杠--也可以逃避所有其他反斜杠。
for item in df_ocr['OCR']:
item = item.replace('\\', '\\\\').replace('\n', '\\n')
...
这里反斜杠的数量略显惊人,因为您也必须避免使用Python。
从长远来看,设计您自己的迷你格式会令人沮丧;一个更可持续的解决方案是使用已经定义的格式,如CSV (或YAML、XML或.JSON!)因此,您不必自行开发和测试任何字符级的故障,由此产生的文件将与许多标准工具进行互操作。但当然,有时候你就是别无选择。
https://stackoverflow.com/questions/69112784
复制相似问题