【问题标题】:Extensible toolkits or approaches to sniffing file formats from messy data?从杂乱数据中嗅探文件格式的可扩展工具包或方法?
【发布时间】:2012-04-06 16:13:53
【问题描述】:

是否有任何框架支持对有效格式使用声明性、模糊模式和/或语法定义的文件格式嗅探?我正在寻找可以处理脏文件或格式错误的文件的东西,可能跨越多个版本的文件格式定义/模式,并使编写基于规则或模式的嗅探器变得容易,这些嗅探器可以基于内省对文件类型做出最佳猜测.

我正在寻找一些声明性的东西,允许您以描述性方式定义格式,也许是 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 功能正朝着正确的方向发展,但我正在寻找更通用和可扩展的东西(并且不限于表格数据)。关于在哪里寻找这样的东西有什么建议吗?

【问题讨论】:

    标签: parsing pattern-matching file-format sniffing


    【解决方案1】:

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

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

    他不仅培养了一位杰出的雕刻师,还提供了不完整文件的不同情况的定义。

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

    希望对您有所帮助。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多