Существуют ли какие-либо платформы для поддержки анализа форматов файлов с использованием декларативных, нечетких схем и / или синтаксических определений для допустимых форматов? Я ищу что-то, что может обрабатывать грязные или плохо отформатированные файлы, возможно, в разных версиях определений / схем форматов файлов и облегчать написание правил или анализаторов на основе шаблонов, которые позволяют лучше понять типы файлов на основе самоанализа ,
Я ищу что-то декларативное, позволяющее описательно определять форматы, может быть, DSL, что-то вроде:
format A, v1.0:
is tabular
has a "id" and "name" column
may have a "size" column
with integer values in 1-10 range
is tab-delimited
usually ends in .txt or .tab
format A, v1.1:
is tabular
has a "id" column
may have a "name" column
may have a "size" column
with integer values in 1-10 range
is tab- or comma-separated
usually ends in .txt, .csv or .tab
Ключ в том, что входящие файлы могут быть неправильно отформатированы, либо из-за ошибки пользователя, либо из-за плохо реализованного экспорта из других инструментов, и классификация может быть недетерминированной. Так что это должно было бы поддерживать множественное частичное соответствие определениям формата, а также полезные объяснения. Простая схема голосования, вероятно, достаточна для ранжирования догадок (то есть, чем больше найденных проблем, тем ниже оценка совпадения).
Например, с учетом приведенных выше определений файл «test.txt», разделенный запятыми, со столбцом «id» и столбцом «size» без значений, приведет к тому, что журнал сниффера будет выглядеть примерно так:
Probably format A, v1.1
- but "size" column is empty
Possibly format A, v1.0
- but "size" column is empty
- but missing "name" column
- but is comma-delimited
Функциональность Sniffer в стандартной библиотеке Python движется в правильном направлении, но я ищу что-то более общее и расширяемое (не ограничивающееся табличными данными). Любые предложения о том, где искать что-то подобное?