Форум сайта python.su
Парсю много текста в промышленных маштабах.
Столкнулся с тем, что скорость регулярок для меня слишком маленькая (зато функционал полностью подходит).
Попробовал переписать все на питоне (с автоматами состояний), скорость стала в 40 раз больше.
Но мой код не униврсален: Чуть-чуть изменил паттерны поиска, и почти все с начала переписывать.
У кого-нибудь есть опыт в подобной области, чтоб ткнуть носом - куда копать?
Офлайн
Может стоит либу на си взять какую, или саому накропать, раз уж скорость так критична…
Офлайн
использую mxTextTools либа на С скорость хороша да вот только здорово описание структуры похоже на автоматы состояний, менять что-либо не очень удобно.
Офлайн
Вынести правила для автоматов отдельно в матрицу, и менять их там.
Правда так можно и до регулярок добраться ;)
Офлайн
FerromanТы не видел структуры описания этого дела… Perl отдыхает.
Вынести правила для автоматов отдельно в матрицу, и менять их там.
Правда так можно и до регулярок добраться ;)
Офлайн
asv13Введите промежуточный DSL ;)
использую mxTextTools либа на С скорость хороша да вот только здорово описание структуры похоже на автоматы состояний, менять что-либо не очень удобно.
Офлайн
shizaМожно:
Столкнулся с тем, что скорость регулярок для меня слишком маленькая (зато функционал полностью подходит).
Офлайн
asv13
mxTextTools - все никак не найду как подступиться - ужасные конуструкции, но видимо придется. %)
Из документации я нашел только официальную доку и еще мануал по прасингу от Гвидо. Есть еще что-нибудь?
ZAN
А что такое ДКА и с чем его едят?
Офлайн
Нашел для mxTextTools генератор. Но генерит он из другой незнакомой мне штуки.
Никто не встречался с EBNF?
Офлайн
shizaДКА - это имеется ввиду детерминированный конечный автомат. Питоновский движок регулярки написан на недетерминированных КА, поэтому он очень многофункциональный и относительно медленный (за счет механизма откатов, которые присущи НКА). Движки на ДКА, как правило, намного более быстрые, но более примитивные.
А что такое ДКА и с чем его едят?
(.*); вместо ([^;]);
(.*)end вместо (.*?)(?=end)
Офлайн