Форум сайта python.su
10
shizaВ питоновской регулярке наиболее уязвимые места итак написаны на С, поэтому скорость врядли будет существенно выше, если использовать полностью сишный аналог.
Поэтому, у меня пока есть надежда, что наверняка есть модуль на С например, с более удобным интерфейсом и сходной скоростью.
Отредактировано (Авг. 9, 2008 16:15:55)
Офлайн
0
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)
Офлайн
0
На данный момент, остановился на том, что написал небольшой DFA (детереминированого автомата состояний).
Но в нем есть минус в том, что чтобы задать условия прасинга - надо описывать его в конструкция питона. Что не сложно, но кода много. И пока задаешь - мысль расползается.
Теперь понятно, почему в регулярках и в других подобных парсерах используется специальный синтаксис.
Отредактировано (Авг. 10, 2008 17:32:18)
Офлайн
0
вопрос немного в сторону, а как часто меняется формат текста которого необходимо парсить ?
если не очень часто, то лучше оставить так как есть, через время у тебя будет набор процедур для парсинга типовых конструкций
Офлайн
0
asv13 как ты - еще не пробовал ANTLR?
Офлайн
0
В процессе поисков набрел на вот такую штуку:
http://bisqwit.iki.fi/source/regexopt.html - оптимизатор регулярок.
Мне правда не помогло сильно (на четверть время сократил) но может кому пригодится.
Офлайн
0
Сточил я 2 мыши, стоптал 2 клавиатуры, потратил столько электроэнергии, что можно было-бы обеспечить потребности среднего города в течении одной пикосекунды…
Испробовал все, до чего мог дотянутся.
И результат весьма неожиданный: самый быстрый результат (при приемлемом удобстве составления шаблонов) дал egrep вызываемый через subprocess.
На нем на данный момент и остановился. =)
Офлайн
0
shizaUXIX-Way таки ралит ;)
самый быстрый результат (при приемлемом удобстве составления шаблонов) дал egrep вызываемый через subprocess.
Офлайн
0
shizaА можно посмотреть код DFA? Насколько он сложен? Пытался свой написать, упрощал структуру как мог, но очень быстро запутался в условиях и бросил. Что-то изменять, это полдня надо снова вникать в написанное.
На данный момент, остановился на том, что написал небольшой DFA (детереминированого автомата состояний).
Но в нем есть минус в том, что чтобы задать условия прасинга - надо описывать его в конструкция питона. Что не сложно, но кода много. И пока задаешь - мысль расползается.
Теперь понятно, почему в регулярках и в других подобных парсерах используется специальный синтаксис.
Отредактировано (Фев. 16, 2009 11:13:40)
Офлайн
10
asv13Именно поэтому не нужно его хардкодить. Я не случайно сбрасывал ссылку в этой ветке - там описано, как создать ДКА по регулярному выражению. Чтобы реализовать этот алгоритм нужно фактически написать парсер строки в AST регулярки. Парсер, кстати, может предствавлять собой некий “неизменяемый” конечный автомат.
Пытался свой написать, упрощал структуру как мог, но очень быстро запутался в условиях и бросил. Что-то изменять, это полдня надо снова вникать в написанное.
Офлайн