解析带有特殊标记的文本文件

5 投票
2 回答
2564 浏览
提问于 2025-04-17 01:44

我需要用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 个回答

1

如果你想用正则表达式来处理一些复杂的事情,那可能会让你感到很痛苦。

如果你还是想用正则表达式(不推荐哦),可以看看这里关于XML的处理方法:HERE

如果你说的“.dsl”是指ABBRY或Lingvo字典格式,那你可以看看stardict。 它可以读取ABBRY的dsl格式。

1

“某个引擎可以根据嵌套标签的结构来创建一个树形结构。”

可以看看这个链接:http://www.dabeaz.com/ply/

你可以很快且简单地定义语法,方法是用一组词法规则和一些语法生成规则。

如果你不喜欢这个,还有其他选择,看看这个列表。

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

撰写回答