使用特殊标记解析文本文件

时间:2011-09-07 19:23:57

标签: python parsing tags markup

我需要使用Python解析DSL文件。 DSL文件是一个文本文件,其文本具有特殊标记,其中包含ABBYY Lingvo使用的标记。

看起来像:

activate
    [m0][b]ac·ti·vate[/b] {{id=000000367}} [c rosybrown]\[[/c][c darkslategray][b]activate[/b][/c] [c darkslategray][b]activates[/b][/c] [c darkslategray][b]activated[/b][/c] [c darkslategray][b]activating[/b][/c][c rosybrown]\][/c] [p]BrE[/p] [c darkgray] [/c][c darkcyan]\[ˈæktɪveɪt\][/c] [s]z_activate__gb_1.wav[/s] [p]NAmE[/p] [c darkgray] [/c][c darkcyan]\[ˈæktɪveɪt\][/c] [s]z_activate__us_1.wav[/s] [c orange] verb[/c] [c darkgray] [/c][b]{{cf}}\~ sth{{/cf}} [/b]
    [m1]{{d}}to make sth such as a device or chemical process start working{{/d}}
    [m2][ex][*]• [/*][/ex][ex][*]{{x}}The burglar alarm is activated by movement.{{/x}} [/*][/ex]
    [m2][ex][*]• [/*][/ex][c darkgray] [/c][ex][*]{{x}}The gene is activated by a specific protein.{{/x}} [/*][/ex]
    {{Derived Word}}[m3][c darkslategray][u]Derived Word:[/u][/c] ↑<<activation>>{{/Derived Word}}
    {{side_verb_forms}}[m3][c darkslategray][u]Verb forms:[/u][/c] [s]x_verb_forms_activate.jpg[/s]{{/side_verb_forms}}

现在我看到使用regexps解析此文件的唯一选项。但我怀疑是否可以实现,因为该格式的标签具有某种层次结构,其中一些标签位于其他标准中。

我无法使用特殊的xmlhtml解析器。它们非常适合创建文档的树结构,但它们专为htmlxml的特殊标记而设计。

以这种格式解析文件的最佳方法是什么?是否有用于此目的的Python库?

2 个答案:

答案 0 :(得分:1)

将RegExp用于非平凡用途的事情会带来痛苦和痛苦。

如果您坚持使用RegEx(未推荐),请查看XML上使用的方法HERE

如果“.dsl”表示ABBRY或Lingvo dict格式,您可能需要查看stardict.它可以读取ABBRY dsl格式。

答案 1 :(得分:1)

  

“一些允许基于嵌套标记结构创建树的引擎”。

查看http://www.dabeaz.com/ply/

您可以快速轻松地将语法定义为一组词法规则和一些语法产品。

如果你不喜欢那个,这里有一个替代品清单。

http://wiki.python.org/moin/LanguageParsing