Алгоритм ИИ для обработки текста и извлечения столбцов данных

Есть структурированный текст в виде таблицы следующего вида
Позиция           Код    С1   С2     С3
Кошки             1000   20   30     45
Собачки           2000   13   49    -40
Попугайчики       3000   45         -90
зеленопёрые
Свинки            4000	             10
Хомяки            5000	      67

Необходимо извлечь данные из столбцов Код, С1, С2 и С3.
Проблема заключается в том, что в разных таблицах расстояние между столбцами может быть от 5 до 40 пробелов, при этом как видно в примере, данных в одном из столбцов может не быть вовсе. Текст в столбцах может быть центрирован по любому краю или центру.
Исходя из этих условий, использование регулярных выражений не всегда дает ожидаемый результат и данные могут быть смещены из одного столбца в другой.
Моя идея заключается в том, чтобы научить некий алгоритм разбирать текст на столбцы, проводя между ними условную границу, как бы это сделал человек и получить таким образом четыре массива, откуда уже можно по индексу строки выдернуть нужное значение.
Я не силен в ИИ и поэтому даже не знаю в какую сторону копать, стало быть, прошу подсказать направление для изучения: какой алгоритм выбрать, на чем лучше его реализовывать, как обучать и т.д.
  • Вопрос задан
  • 2759 просмотров
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
ИИ тут не причем. Тут нужно алгоритм разработать, обычный тупой алгоритм.

Я бы попробовал решить задачу так:
- первая колонка у нас есть всегда, далее у нас идут данные.
- Выбираем из строки позиции всех данных в строке, например для строки с попугайчиками у нас получается, что значение сильно отстает от предыдущего, значит перед ним пропущено одно. Ну и так по расстоянию между значениями можно делать предположения о том, к какой колонке оно принадлежит.
Ответ написан
ИИ здесь не при чем.

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

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

Войдите, чтобы написать ответ

Похожие вопросы