提问人:JohnDiGriz 提问时间:3/21/2023 更新时间:3/21/2023 访问量:27
按位置将一组字母聚类到表格中
Clustering a set of letters into a table by position
问:
我有一组位于平面上的字母(对于每个字母,我知道其角点的坐标,字符串可以被视为平行四边形)。我知道字符串构成了一个表,但我不知道表有多少行或列,也不知道单元格的大小。此外,字母和表格还具有以下属性
- 字母组成单词
- 每个单词的末尾都有一个空格,或者是其行中的最后一个单词
- 表的每个单元格要么包含一个字符串(可以由多个单词组成),要么完全为空
- 字符串中单词之间的间距可以大于或小于空格的宽度。
- 单个表格行中的字母并不都具有相同的 Y 坐标,但倾斜永远不会太大(即给定行中每个字母的每个角的 Y 坐标都高于下一行中每个字母的每个角的 Y 坐标)
- 单元格从不跨越两行
- 某些单元格跨越多个列 - 在这种情况下,该单元格的内容可以放在任何跨区列中,最好是一致的,但不一定一致(即始终放在最左边或总是放在最右边的跨区列中)
- 空单元格中没有任何字母(即没有可用于识别空单元格的“空格”字母)
- 列中每个单元格的内容通常都向左对齐,或者全部向右对齐,尽管它们并不总是具有相同的最左边的 X 坐标,并且某些单元格的内容不遵循其列的对齐方式(相反,它们根本没有对齐,因此字符串的两个边缘都在单元格中间的某个位置)。
- 字符串的实际内容无助于确定表的结构。
那么问题来了,给定一组字母及其坐标,我怎样才能正确地将它们划分成一个表格?
例如:
同上 | 名字 | 数字 1 | 号码 2 | 号码 3 |
---|---|---|---|---|
GJ32型 | 巴勃罗·迭戈·何塞·弗朗西斯科·德·保拉·胡安·内波穆切诺·玛丽亚·德洛斯·雷梅迪奥斯·西普里亚诺 | 24.5 | 443423 | 332.68 |
G33!!:L | 简D0~ | 24 17 | 44:!4O | .68 |
** | 鲍勃 Sm1th | 34,7 | I.oo | 所以 |
假设字母像这样组成表格,但我只知道字母本身和它们的坐标,但不知道表格的大小。
具体来说,我正在解析一个由表格扫描组成的 PDF 文件,并尝试将这些扫描转换为 Excel 表格(每个 PDF 页面一个 Excel 工作表),但是有问题的 PDF 文件的构建方式存在很多问题:
- 文本是用文本识别软件生成的,经常会出现小数点缺失、符号识别错误(没有可靠的一对一对应关系)等问题。因此,我不能依赖字符串的内容
- 文本并不总是按阅读顺序绘制,而且绘制的顺序会因页面而异
- 单词和字符串并不总是绘制在一起,通常 PDF 显示单词的一部分,调整文本矩阵,并显示同一单词的另一部分
- 文档中混合了多种类型的表。
- 有时,一个表跨越多个页面,因此实际上只有一个页面包含标题行。而且表格的对齐方式不匹配,所以即使我能够找到一个标题行(由于第一个问题,这是有问题的),我也不能使用它的坐标来正确地分组另一个页面上的字符串
我正在使用 C# 和 PdfPig,但这个问题在很大程度上与语言无关
答: 暂无答案
评论