首页 > 解决方案 > python中包含转义序列的字符串的清理列表

问题描述

我正在处理 OCR,并且从图像中提取的文本被附加到一个包含很多转义序列的列表中。

如何清理这样的字符串列表

extracted = ["b'i)\\nSYRUP\\na\\n\\x0c'",
 "b'mi.\\n\\x0c'",
 "b'100\\n\\x0c'",
 "b'Te eT ran\\nSYRUP\\n\\x0c'",
 "b'tamol, Ambroxol k\\n\\x0c'",
 "b'Guaiphenesin\\n\\x0c'",
 "b'Syrup\\n\\x0c'",
 "b'ol HCl &\\n\\x0c'",
 "b'quantity.\\n\\x0c'"]

对此

cleaned= ["SYRUP",
 "mi",
 "100",
 "Te eT ran SYRUP",
 "tamol, Ambroxol k",
 "Guaiphenesin",
 "Syrup",
 "ol HCl &"
 "quantity"]

我尝试更换它们,但没有任何效果,它恢复到提取时的状态。有什么建议么?提前致谢。

标签: pythondataframedata-cleaning

解决方案


这似乎是字节码字符串表示形式,您可以将其解码为 utf-8。我们使用literal_evalfromast进行安全评估。

这将使您大部分时间到达那里,OCR 的奇怪之处,例如i)您需要通过替换手动修复。

import ast

extracted = [
"b'i)\\nSYRUP\\na\\n\\x0c'",
"b'mi.\\n\\x0c'",
"b'100\\n\\x0c'",
"b'Te eT ran\\nSYRUP\\n\\x0c'",
"b'tamol, Ambroxol k\\n\\x0c'",
"b'Guaiphenesin\\n\\x0c'",
"b'Syrup\\n\\x0c'",
"b'ol HCl &\\n\\x0c'",
"b'quantity.\\n\\x0c'"]

def fix_string(s):
    eval_str = ast.literal_eval(s)
    dec_str = eval_str.decode('utf-8')
    fix_str = dec_str.strip().replace('\n', ' ')
    
    return fix_str

    
for e in extracted:
    print(fix_string(e))

输出:

i) SYRUP a
mi.
100
Te eT ran SYRUP
tamol, Ambroxol k
Guaiphenesin
Syrup
ol HCl &
quantity.

推荐阅读