我一直在开发一个程序,该程序将读取 OCR 输出,找到页码,然后将它们还给我。每当我的函数找到一个数字时,它就会开始一个序列,然后它会在下一页上查找比前一个大 1 的数字。它还可以添加空格来推断缺失的数字。
在任何给定的书中,我的函数将识别 1-100 个潜在序列。它识别的许多序列都是垃圾……完全没用。然而,其他的通常是主要序列的子集,可以拼接在一起形成更全面的序列。这是我的问题:我如何将它们缝合在一起?我的输出现在看起来像这样:
Index: 185 PNUM: 158
Index: 186 PNUM: 159
Index: 187 PNUM: 160
Index: 188 PNUM: 161
Index: 189 PNUM: 162
Index: -1 PNUM: blank
Index: -1 PNUM: blank
-------------------------------------------------
Index: 163 PNUM: 134
Index: 164 PNUM: 135
Index: -1 PNUM: blank
-------------------------------------------------
Index: 191 PNUM: 166
Index: 192 PNUM: 167
Index: 193 PNUM: 168
Index: 194 PNUM: 169
索引是书籍封面的页数,包括所有那些传统上未编号的版权、奉献、目录页数。PNUM 是我的算法检测到的页码。在这里我们可以看到三个不同的序列,它们的顶部和底部应该缝合在一起。您会注意到顶部序列的索引和 pnum 之间的偏移量是 27,而底部序列的偏移量是 25。偏移量之间存在差异的最常见原因是缺少页面,或者页面扫描了两次。
有人建议我使用 Viterbi 最佳路径算法将这些序列拼接在一起,但这对我来说似乎有点矫枉过正,因为我真的只需要将我的序列拼接在一起,而不是确认它们的准确性。我真的不知道该去哪里,我非常感谢任何帮助。谢谢!