ИИ здесь не при чем.
Если у Вас столбцы с продвижением вниз не могут уехать в бок так сильно что заедут на соседнее место шапки соседнего столбца, то Вам достаточно найти знакоместа, которые равны пробелам на всем протяжении файла с самого верха до самого низа ("пробельные столбцы"). Затем объединить вплотную прилегающие пробельные столбцы, разбить по их позициям каждую строчку и найти внутри разбиения либо число либо пустоту (число пропущено). Этот алгоритм детерминированный и не имеет параметров (настраивать в нем нечего).
Если предыдущее не выполняется и столбцы съезжают сильно, то можно запустить этот же алгоритм не глобально на всем файле, а локально, например, на близлежащих 3-4-5 строках - это будет соответствовать тому, что живой человек считает, что за 5 строк столбец не может уехать на место соседнего. В локальной версии уже возможно придется поискать подходящие параметры (кол-во мониторящихся последовательных строк, максимальное смещение вбок и т.п.)