Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

На чем парсить большие объемы output из научных программ

24.04.18 17:10
Re: На чем парсить большие объемы output из научных программ
 
Murr патриот
Murr
в ответ ilghiz 24.04.18 15:24

еорию компиляции когда-то в Универе по Ахо-Ульману учил и что-то до сих пор помню.

------

Делая строго по теории компилятор написать, разумеется, можно.

Правда с непривычки это займет довольно много времени.

В зависимости от того, насколько будешь придерживаться теории - модификация может стать мучительно сложной и долгой.

А времени, как ты сам говоришь, у тебя нет.


Потому могу посоветовать делать парсинг документов на базе "распознавателей".

Т.е. ты берешь документ и режешь на куски - какие-то маркеры между частями там же должны быть - вот по ним и режь.

С текстовым документом - просто - построчно и/или по абзацам.

Нарезанные куски скармливаемые "распознавателям".

Задача распознавателя - вычислить может ли он извлечь интересующие данные из предоставленного фрагмента.

Если "распознаватель" может извлечь нужное из фрагмента - он его извлекает, если нет - т.е. кусок им не опознается как содержащий узнаваемые им данные - кусок передается следующему "распознавателю".

Что нужно помнить - ты не будешь иметь полный компилятор исходного документа или группы документов и, соответственно, могут быть множественные распознавания... ну или в терминах грамматики - локальные неоднозначности. Т.е. придется решать как это найти и как разрешить.


Но сами распознаватели писать просто.


Например - распознаватель рецепта борща.

Документ должен содержать текст "Рецепт борща.". Иначе он не считается распознанным.

Дальше пойдут ингредиенты - каждый распознается своим отдельным распознавателем.

Но ведь ты же знаешь что именно тебе надо извлечь из всех наборов данных? Вот оттуда и танцуй.

Писанины довольно много, но она не сложная. Ну валидировать весь набор надо...


Работать будет относительно медленно.

У меня документы разбираются где-то в 20 раз медленнее, чем при чтении по формату, но данные Я получаю корректные.

Модификация всей системы - относительно не сложная - меняется/дописывается только набор распознавателей - проверено на множественных изменениях форматов документов клиентами.


На чем писать - почти без разницы.

Будет чуток удобнее иметь базовый абстрактный класс и виртуальные функции, но ничто не мешает вместо массива объектов(распознователей) сделать массив указателей на функции.

 

Перейти на