从凌乱的数据中嗅探文件格式的可扩展工具包或方法?

时间:2012-03-22 04:43:47

标签: parsing pattern-matching file-format sniffing

是否有任何框架支持使用声明,模糊架构和/或有效格式的语法定义进行文件格式嗅探?我正在寻找可以处理脏或格式不良的文件的东西,可能跨越多个版本的文件格式定义/模式,并且可以轻松编写基于规则或模式的嗅探器,根据内省对文件类型进行最佳猜测。

我正在寻找一些声明性的东西,允许您描述性地定义格式,可能是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

Python标准库中的Sniffer功能朝着正确的方向前进,但我正在寻找更通用和可扩展的东西(并不仅限于表格数据)。关于在哪里寻找这样的东西的任何建议?

1 个答案:

答案 0 :(得分:0)

首先,我很高兴我发现了这个问题 - 我正在考虑类似的事情(标记任何文件格式的声明性解决方案,并将其与文件本身一起提供给可以验证文件的工具)

你所谓的“嗅探者”被广泛称为“文件雕刻师”,这个人擅长雕刻:http://en.wikipedia.org/wiki/Simson_Garfinkel

他不仅开发了出色的雕刻师,还提供了不完整文件的不同案例的定义。

因此,如果您正在处理某些特定的文件格式修复工具 - 请检查上述分类,以了解问题的复杂程度。例如,从未完全接收的数据流中雕刻并从磁盘图像中雕刻显着延迟。从带有碎片磁盘的磁盘映像中雕刻会非常困难,而将一些视频文件填充到无意义的数据中,只是为了让它通过视频播放器打开很容易 - 你只需要提供正确的格式。

希望它有所帮助。

此致