[英]Clean list of string containing escape sequence in 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"]
我嘗試更換它們,但沒有任何效果,它恢復到提取時的狀態。 有什么建議么? 提前致謝。
首先,您可以嘗試:
for i, s in enumerate(extracted):
extracted[i] =(s.replace("b'", '')
.replace("i)", '')
.replace('\\na', '')
.replace('\\n', '')
.replace("\\x0c'", '')
.replace('.', ''))
這似乎是字節碼字符串表示,您可以將其解碼為 utf-8。 我們使用ast
中的literal_eval
進行安全評估。
這將使您大部分時間到達那里,來自 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))
Output:
i) SYRUP a
mi.
100
Te eT ran SYRUP
tamol, Ambroxol k
Guaiphenesin
Syrup
ol HCl &
quantity.
這是一個答案,假設您在每個字符串中查找的 substring 位於兩個換行符之間或位於字符串的開頭並后跟一個換行符。
import re
def find_substring(string):
string = (eval(string)).decode('UTF-8')
pattern = r"\n?.*\.?\n"
lst = re.findall(pattern,string)
if len(lst) == 1:
substring = lst[0].strip(".\n")
else:
pattern2 = r"\n.*\n"
lst2 = re.findall(pattern2,"".join(lst))
substring = lst2[0].strip("\n")
return substring
然后,map 到列表中是這樣的。
list(map(find_substring,extracted))
這輸出:
['SYRUP',
'mi',
'100',
'SYRUP',
'tamol, Ambroxol k',
'Guaiphenesin',
'Syrup',
'ol HCl &',
'quantity']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.