Вы можете получить ограничивающую рамку для каждого распознанного слова. Ниже приведен пример кода с использованием C # Tesseract wrapper .
//intialize the TesseractEngine
using (var engine = new TesseractEngine("path to tessdata folder", "eng", EngineMode.Default))
{
//image here is Bitmap on which OCR is to be performed
using (var page = engine.Process(image, PageSegMode.Auto))
{
using (var iterator = page.GetIterator())
{
iterator.Begin();
do
{
string currentWord = iterator.GetText(PageIteratorLevel.Word);
//do something with bounds
iterator.TryGetBoundingBox(PageIteratorLevel.Word, out Rect bounds);
}
while (iterator.Next(PageIteratorLevel.Word));
}
}
}
Теперь вы можете сохранять границы для каждого слова и писать свою логику, чтобы сопоставить их со строками / столбцами таблицы на основе их ограничивающего прямоугольника (это сложная часть, и если формат таблицы у вас аккуратный, вы сможете его получить работать с некоторыми усилиями.). Кроме того, рассмотрите библиотеку Tabula , чтобы увидеть, может ли она решить проблему под рукой.