![]() |
1
3
我推荐一些东西: 基于文本的比较: OCR使用谷歌的Tesseract(目前最好的开源OCR软件包之一)来提取文档和文本功能。它还有一个叫做python的包装器 PyTesseract . 您可能需要利用图像的分辨率,使OCR工作到您满意的程度——这需要一些尝试和错误。 一旦你提取了单词,一个普遍接受的方法是计算tf-idf(术语频率-文档反向频率),然后任何基于距离的方法(余弦相似性是常见的方法之一)来比较哪些文档彼此“相似”(更接近)。 基于图像的比较 如果您已经将图像作为一个向量,那么应用基于距离的度量来计算相似性。一般来说,l1或l2标准是可行的。这个 paper 这表明曼哈顿(l1标准)可能对自然图像更有效。你可以从这个开始,尝试其他基于距离的测量方法 集合基于文本和图像的比较 运行这两种方法,然后在这两种方法之间取一些平均值,以得到彼此相似的文档。 例如 基于文本的方法可能将docb和docc分别按距离10和20个单位排列为距离doca最近的2个文档。 根据距离5和距离20,基于图像的方法可能将docc和docb列为最接近的两个。 然后你可以平均两个距离。docb为(10+20)/2=15,docc为(20+5)/2=12.5,与doca分开。所以你会用一种整体的方法来对待docc,让它更接近a而不是b。 |
![]() |
2
2
由于两个原因,从图像测量文档的相似度比从文本测量文档复杂。
解决方案我的解决方案是使用机器学习查找文档的表示,并使用此表示对文档进行分类。 在这里,我将向Keras提供我建议的解决方案的实施。 网络类型我建议使用卷积层进行特征提取,然后使用循环层进行序列分类。我之所以选择Keras是因为我很熟悉,它有一个简单的API来定义一个包含卷积层和循环层的网络。但代码可以很容易地更改为其他库,如pytorch、tensorflow等。 图像预处理有很多方法可以预先处理神经网络文档的图像。我在做假设。
垂直拆分图像,以便将行作为序列馈送(如果拆分行可以在空行上对齐,则效率更高)。我将使用numpy显示单个文档。在下面的实现中,我假设单个文档的图像形状是(100,100,3)。 首先,让我们定义图像形状文档图像的形状为
网络实现克拉斯有 ConvLSTM2D 层处理顺序图像。网络的输入是由分割文档图像生成的一系列图像的列表。
理想情况下,该模型可以工作,因为该模型可以从文档的图像中学习文档的层次表示(字符、单词、句子、上下文、符号)。 |
![]() |
3
1
样本文档差异很大,无法在图像级别进行比较(柱状图,np_avg)。 报告的内容是多个数字(最小、最大、推荐)或类别结果(负/正)。 对于每种类型的报告 你得做预处理。 如果文档源是数字的(未扫描),则需要提取和比较字段、行。每行单独。
如果文档被扫描,在提取之前,您必须处理图像、质量和工件的旋转。 每种类型的报告都有其自身的问题。选择一种具有多个样本的报告类型作为开始。 因为你处理的是数字,只有提取到文本和数字,你会有很好的结果。如果报告说值为0.2,允许的范围在0.1到0.3之间,那么nn不是实现这一点的工具。你必须比较数字。 nns并不是实现这一点的最佳工具,至少不用于比较值。可能是提取过程的一部分。 解决方法步骤
|
![]() |
4
0
这似乎是一个使用机器学习对文档进行分类的好地方。 你考虑过使用TensorFlow吗? (tensorflow.org) 你可以用一堆文件来训练你的神经网络,然后把它放在其他文件上。 |