Форум сайта python.su
shizaВ питоновской регулярке наиболее уязвимые места итак написаны на С, поэтому скорость врядли будет существенно выше, если использовать полностью сишный аналог.
Поэтому, у меня пока есть надежда, что наверняка есть модуль на С например, с более удобным интерфейсом и сходной скоростью.
Отредактировано (Авг. 9, 2008 16:15:55)
Офлайн
ZAN Спасибо, буду изучать.
http://paste.lisp.org/display/24849 - красивый код, но голову можно сломать %)
Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, …) - очень интересная ссылка. Отправная точка для дальнейших исследовний.
Отредактировано (Авг. 10, 2008 19:15:23)
Офлайн
На данный момент, остановился на том, что написал небольшой DFA (детереминированого автомата состояний).
Но в нем есть минус в том, что чтобы задать условия прасинга - надо описывать его в конструкция питона. Что не сложно, но кода много. И пока задаешь - мысль расползается.
Теперь понятно, почему в регулярках и в других подобных парсерах используется специальный синтаксис.
Отредактировано (Авг. 10, 2008 17:32:18)
Офлайн
вопрос немного в сторону, а как часто меняется формат текста которого необходимо парсить ?
если не очень часто, то лучше оставить так как есть, через время у тебя будет набор процедур для парсинга типовых конструкций
Офлайн
asv13 как ты - еще не пробовал ANTLR?
Офлайн
В процессе поисков набрел на вот такую штуку:
http://bisqwit.iki.fi/source/regexopt.html - оптимизатор регулярок.
Мне правда не помогло сильно (на четверть время сократил) но может кому пригодится.
Офлайн
Сточил я 2 мыши, стоптал 2 клавиатуры, потратил столько электроэнергии, что можно было-бы обеспечить потребности среднего города в течении одной пикосекунды…
Испробовал все, до чего мог дотянутся.
И результат весьма неожиданный: самый быстрый результат (при приемлемом удобстве составления шаблонов) дал egrep вызываемый через subprocess.
На нем на данный момент и остановился. =)
Офлайн
shizaUXIX-Way таки ралит ;)
самый быстрый результат (при приемлемом удобстве составления шаблонов) дал egrep вызываемый через subprocess.
Офлайн
shizaА можно посмотреть код DFA? Насколько он сложен? Пытался свой написать, упрощал структуру как мог, но очень быстро запутался в условиях и бросил. Что-то изменять, это полдня надо снова вникать в написанное.
На данный момент, остановился на том, что написал небольшой DFA (детереминированого автомата состояний).
Но в нем есть минус в том, что чтобы задать условия прасинга - надо описывать его в конструкция питона. Что не сложно, но кода много. И пока задаешь - мысль расползается.
Теперь понятно, почему в регулярках и в других подобных парсерах используется специальный синтаксис.
Отредактировано (Фев. 16, 2009 11:13:40)
Офлайн
asv13Именно поэтому не нужно его хардкодить. Я не случайно сбрасывал ссылку в этой ветке - там описано, как создать ДКА по регулярному выражению. Чтобы реализовать этот алгоритм нужно фактически написать парсер строки в AST регулярки. Парсер, кстати, может предствавлять собой некий “неизменяемый” конечный автомат.
Пытался свой написать, упрощал структуру как мог, но очень быстро запутался в условиях и бросил. Что-то изменять, это полдня надо снова вникать в написанное.
Офлайн