Выбрать все последовательные строки данных в Pandas, которые соответствуют некоторым критериям? - PullRequest
0 голосов
/ 27 января 2020

У меня есть данные от Tesseract OCR в DataFrame. Один из столбцов в этих выходных данных представляет доверительную оценку результата OCR для отдельного слова текста в качестве результата Tesseract. Тессеракт по умолчанию, однако, борется с распознаванием рукописных символов. Я хочу использовать подход, в котором я использую информацию ограничивающего прямоугольника, которая также , предоставленную Tesseract, чтобы захватить рамку вокруг слов с низким уровнем достоверности, проверить, написаны ли они от руки, и использовать другую модель для классификации того, что рукописный текст состояний. Так что мой DataFrame, который OCR «Привет, мир, я Za c!» где «Я - Za c!» написан от руки, может выглядеть так:

         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, если существует более одной строки подряд. Мне также нужно было бы отдельно выбрать все эти группы последовательных строк с низким уровнем достоверности, потому что мне нужно будет использовать значения top, left, width и height, чтобы найти все ограничивающие рамки слова, суммируйте эти блоки вместе, чтобы собрать все отдельные блоки в один большой блок, и передайте этот новый блок модели, чтобы предсказать почерк. Итак, из примера я хотел бы выбрать:

         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 (несколько) последовательных значения с низкой достоверностью, а затем Я должен перебрать все эти выборы, чтобы получить информацию о них, и выполнение этого для каждой страницы каждого документа кажется вычислительно сложным.

Буду очень признателен за любые советы или предложения, связанные с проблемой (даже если этот совет - лучший способ сделать то, что я пытаюсь сделать).

1 Ответ

1 голос
/ 28 января 2020

Похоже, ваше представление о последовательных строках относится к словам / токенам, появляющимся рядом друг с другом в исходном вводе. Я рекомендую сначала применить фильтры более высокого уровня, такие как conf < 60 (чтобы уменьшить пространство поиска), а затем выполнить что-то вроде Обнаружение последовательных целых чисел в списке , чтобы получить список последовательных индексов. Когда у вас есть эти индексы, используйте его для фильтрации вашего фрейма данных.

...