【问题标题】:Select all consecutive rows of data in Pandas that match some criteria?选择 Pandas 中符合某些条件的所有连续数据行?
【发布时间】:2020-01-27 17:17:57
【问题描述】:

我在 DataFrame 中有来自 Tesseract OCR 的数据。此输出中的一列表示作为 Tesseract 输出的单个文本单词的 OCR 结果中的置信度分数。但是,默认情况下,Tesseract 难以识别手写字符。我想采取一种方法,我使用 Tesseract 提供的 也是 的边界框信息来捕获低置信度单词周围的框,检查它们是否是手写的,并使用不同的模型来分类什么手写文字说明。所以我的 OCR 的 DataFrame "Hello world, I am Zac!" 其中 "I am Zac!" 是手写的可能看起来像:

         conf    top    left    width    height    text
1        90.0    100     50     67       14        Hello
2        92.0    100     60     67       14        world,
3        54.0    100     65     21       13        l
4        32.0    100     67     29       12        @n;
5         0.0    100     71     37       14        2ao!
6        90.0    100     77     36       12        text
...

现在我的实际数据有很多行(每张图片很容易超过一千,有几十张图片),所以使用.iterrows() 可能效率低下,我不确定。我需要选择的是带有conf < 60 的所有连续 行,只要连续多行。我还需要分别选择所有这些连续的低置信行组,因为我需要使用topleftwidthheight 值来查找所有单词的边界框,将这些框加在一起以捕获一个大框中的所有单个框,并将该新框传递给模型以预测笔迹。因此,从示例中,我想选择:

         conf    top    left    width    height    text
3        54.0    100     65     21       13        l
4        32.0    100     67     29       12        @n;
5         0.0    100     71     37       14        2ao!

我可以选择conf 低于我的阈值的所有行,但我想知道是否有更有效的方法来选择符合此条件的连续数据行,因为如果我选择所有值低置信度,然后我必须迭代以找到至少有 2 个(多个)连续低置信度值的所有行组,然后我必须遍历所有这些选择以获取它们的框信息,并做对于每个文档的每一页,这似乎在计算上很费力。

任何与问题相关的建议或建议(即使建议是做我想做的事情的更好方法)将不胜感激。

【问题讨论】:

    标签: python pandas dataframe ocr tesseract


    【解决方案1】:

    听起来您的连续行概念是指在原始输入中彼此相邻出现的单词/标记。我建议先应用conf < 60 之类的更高级别过滤器(以减少搜索空间),然后按照Detecting consecutive integers in a list 之类的方法获取连续的索引列表。一旦你有了这些索引,就用它来过滤你的数据框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多