从图像创建 CSV 表

从图像创建 CSV 表

从图像创建 CSV 表的 Ubuntu 选项有哪些:

图表

理想情况下,选择应该简单快捷。图片来自收益曲线文章

答案1

我编写了一个小型 Python 脚本,可以完成你想做的事情。

对于 OCR 部分,您需要tesseract。您可以运行以下命令安装它:

sudo apt install tesseract-ocr

然后,运行tesseract创建一个包含图像读取数据的txt文件。我正在命名这个文件tesseract_outputtesseract将添加.txt扩展名),您可以随意命名。

tesseract /path/to/image /path/to/tesseract_output

然后复制并粘贴以下脚本并将其保存到以 结尾的文件中.py(例如script.py)。

import csv

def split_list(l, n):
    """Split list l in size-n lists.
    Returns a list containing the size-n lists.
    """
    splitted = []

    for i in range(0, len(l), n):
        splitted.append(l[i:i + n])

    return splitted

######################   USER INPUT   ######################
input_file = '/path/to/tesseract_output.txt'
output_file = '/path/to/table.csv'
rows = 10
delimiter = ';'
############################################################

# read input file
with open(input_file, 'r') as f:
    data = f.readlines()

# remove trailing whitespace and newlines
data = list(map(lambda x: x.strip(), data))
# remove empty elements 
data = list(filter(None, data))
# split data to rows-sized lists
data = split_list(data, rows)
# shape data
data = list(map(list, zip(*data)))

# write to csv
with open(output_file, 'w', newline='\n') as f:
    wr = csv.writer(f, delimiter=delimiter)
    for i in range(len(data)):
        wr.writerow(data[i])

为了使脚本正常工作,您必须在用户输入部分输入以下内容:

  • input_file:输出的完整路径tesseract

  • output_file:最终 csv 文件的完整路径。

  • rows:表格行数。在您的示例图片中,该数字为 10。

  • delimiter:csv 中使用的分隔符。这里我使用;。您可以使用所需的任何 1 个字符的字符串。

运行文件:

python /path/to/your/script.py

您现在应该有一个包含以下内容的 csv:

Date;1Mo;2Mo;3Mo;6 Mo;4Yr;2Yr;3Yr;5Yr;TYr;10 Yr;20Yr;30 Yr
08/01/19;2.14;214;2.07;2.04;1.88;1.73;1.67;1.68;177;1.90;2.21;2.44
08/02/19;2.44;2.12;2.08;2.02;1.85;1.72;1.67;1.66;1.75;1.86;2.16;2.39
08/05/19;2.07;2.08;2.05;1.99;1.78;1.59;1.55;1.55;1.63;1.75;2.07;2.30
08/06/19;2.05;2.08;2.05;2.00;1.80;1.60;1.54;1.53;1.62;1.73;2.03;2.25
08/07/19;2.02;2.04;2.02;1.95;1.75;1.59;1.51;1.52;1.60;171;2.01;2.22
08/08/19;2.09;2.07;2.02;1.96;1.79;1.62;1.54;1.54;1.62;1.72;2.02;2.25
08/09/19;2.05;2.06;2.00;1.95;1.78;1.63;1.58;1.57;1.65;174;2.03;2.26
08/12/19;2.09;2.06;2.00;1.94;1.75;1.58;1.51;1.49;1.56;1.65;1.92;2.14
08/13/19;2.05;2.04;2.00;1.96;1.86;1.66;1.60;1.57;1.62;1.68;1.94;2.15

警告

如您所见,结果令人满意,但取决于 的tesseract输出。几乎可以肯定tesseract无法正确检测所有内容,正如您在 csv 输出中轻松看到的那样。您必须将结果与原始图像进行比较并手动修复它们,无论是在 tesseract 输出中还是在最后的 csv 输出中。

此外,在脚本中,我处理了尾随空格和多余的换行符tesseract,这对于您的示例图像来说效果很好。但是,如果表格单元格为空,它将被完全删除,从而有效地破坏整个表格结构。在这种情况下,如果我是你,我会编辑文件tesseract_output.txt并手动将空单元格更改为包含-,这样它就不会被删除。

相关内容