WikiLeaks电缆的基于容错python的解析器

|| 不久前,我开始为WikiLeaks发布的电缆编写基于BNF的语法。但是我现在意识到我的方法可能不是最好的,我正在寻找一些改进。 电缆由三部分组成。头部具有一些RFC2822样式的格式。这种解析通常是正确的。文本部分具有更非正式的规范。例如,有一条REF线。应该以ѭ0开头,但是我发现了不同的版本。以下正则表达式可以捕获大多数情况:
^\\s*[Rr][Ee][Ff][Ss: ]
。所以前面有空格,不同的情况等等。文本部分主要是纯文本,带有一些特殊格式的标题。 我们要识别每个字段(日期,参考号等)并放入数据库中。我们选择了Pythons SimpleParse。目前,解析在每个无法识别的字段处停止。我们现在正在寻找一种更加容错的解决方案。所有字段都有某种顺序。当解析器无法识别字段时,它应在当前字段中添加一些“未识别” -blob并继续。 (或者也许您在这里有一些更好的方法)。 您会建议哪种解析器或其他解决方案?周围更好吗?     
已邀请:
Cablemap似乎可以满足您的搜索需求:http://pypi.python.org/pypi/cablemap.core/     
我没有看电缆,但让我们来解决一个类似的问题并考虑以下选项:假设您想为RFC编写一个解析器,有一个用于RFC格式化的RFC,但并非所有RFC都遵循它。 如果编写了严格的解析器,则会遇到您遇到的情况-异常值会阻止您的进度-在这种情况下,您有两种选择: 将它们分为两组,严格格式化的和非严格格式化的。编写严格的解析器,以使它获得低落的果实,并根据数字异常值找出最佳的选择是什么(手动处理,异常值解析器等) 如果两组的大小相等,或者离群值比标准格式多,请编写一个灵活的解析器。在这种情况下,正则表达式将对您更有利,因为您可以处理整个文件以查找一系列灵活的正则表达式,如果其中一个正则表达式失败,则可以轻松生成异常值列表。但是,由于您可以针对一系列正则表达式进行搜索,因此可以为每个正则表达式建立通过/失败矩阵。 对于“模糊”数据,有些遵循格式,有些则不遵循,我更喜欢使用正则表达式。那只是我。 (是的,它比较慢,但是必须处理每个匹配段之间的关系,以便您拥有一个适合每个极端情况的查询(或解析器),这是处理人工生成的输入时的噩梦。     

要回复问题请先登录注册