Форум сайта python.su
Приветствую всех!
Первый пост - пришёл за помощью несколько из другой области. Любительски занимаюсь словарями. Не программист, но более или менее имею представление об AutoIt, VBA и общих принципах программирования. Неплохо знаю регулярные выражения. Суть проблемы:
Наверное, большинство знает что такое язык разметки Lingvo DSL от ABBYY (вероятно, учили инглиш с помощью словарей в этом формате). На данный момент большинство любительских словарей как и оцифровка печатных делается именно в нём (см. ру-боард). По сути формат является сырцом-исходником для компиляции во всевозможные другие форматы под различные программы/платформы. Одним из самых универсальных конвертеров является pyglossary, написанный на Python 2.7. Но с DSL он работает криво. Точнее неполноценно.
Проблема 1. Сам формат DSL, хоть и похож на BBCode, имеет специфические особенности. Он допускает “ill-nested” теги, что является основным препятствием для корректного конвертирования (в html, к примеру). Здесь скрипт на Perl, решающий эту проблему (там же и примеры для наглядности). Но он сортирует теги только внутри группы без пробелов, тогда как могут существовать и такие ситуации:
#fix unclosed tags like [b]...[c]...[/b]...[/c]
#change it to [b]...[c]...[/c][/b][c]...[/c]
gEntryHeader = re.sub('[{}]', '', thisString) # this one shows up as an entry header gEntryHeader = re.sub('(\s+?)\)', ') ', gEntryHeader) gEntryHeader = re.sub('\((\s+?)', ' (', gEntryHeader) gEntryHeader = re.sub(' \]', '] ', gEntryHeader) gEntryHeader = re.sub('\[ ', ' [', gEntryHeader) gEntryTitle = re.sub('{(.*?)}', '', thisString) # this one is the value displayed in window header and search list gEntryTitle = re.sub('^\.\.\.', '', gEntryTitle)
Офлайн