Разбор текстового файла со специальной разметкой - PullRequest
5 голосов
/ 07 сентября 2011

Мне нужно проанализировать файл DSL с помощью Python. 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. Но я сомневаюсь, что это может быть достигнуто, поскольку теги в этом формате имеют некоторую иерархию, где некоторые из них находятся внутри других.

Я не могу использовать специальные парсеры xml и html. Они идеально подходят для создания древовидной структуры документа, но предназначены для специальных тегов html и xml.

.

Как лучше всего проанализировать файл в таком формате? Есть ли какая-либо библиотека Python для этой цели?

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

"некоторый движок, который позволяет создавать дерево на основе структуры вложенных тегов".

Посмотрите на http://www.dabeaz.com/ply/

Вы можете быстро и легко определить синтаксис как набор лексических правил и некоторых грамматических произведений.

Если вам не нравится этот, вот список альтернатив.

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

1 голос
/ 07 сентября 2011

Использование RegExp для этого для чего-то другого, кроме обычного использования, вызовет душевную боль и боль.

Если вы настаиваете на использовании RegEx (НЕ РЕКОМЕНДУЕТСЯ), посмотрите на используемые методы ЗДЕСЬ в XML

Если под ".dsl" вы подразумеваете формат dict ABBRY или Lingvo, вы можете посмотреть stardict. Он может читать формат ABBRY dsl.

...