Найти - Пользователи
Полная версия: Парсер текста
Начало » Python для экспертов » Парсер текста
1 2 3 4
shiza
Парсю много текста в промышленных маштабах.
Столкнулся с тем, что скорость регулярок для меня слишком маленькая (зато функционал полностью подходит).

Попробовал переписать все на питоне (с автоматами состояний), скорость стала в 40 раз больше.
Но мой код не униврсален: Чуть-чуть изменил паттерны поиска, и почти все с начала переписывать.

У кого-нибудь есть опыт в подобной области, чтоб ткнуть носом - куда копать?
Ferroman
Может стоит либу на си взять какую, или саому накропать, раз уж скорость так критична…
asv13
использую mxTextTools либа на С скорость хороша да вот только здорово описание структуры похоже на автоматы состояний, менять что-либо не очень удобно.
Ferroman
Вынести правила для автоматов отдельно в матрицу, и менять их там.
Правда так можно и до регулярок добраться ;)
shiza
Ferroman
Вынести правила для автоматов отдельно в матрицу, и менять их там.
Правда так можно и до регулярок добраться ;)
Ты не видел структуры описания этого дела… Perl отдыхает.
PooH
asv13
использую mxTextTools либа на С скорость хороша да вот только здорово описание структуры похоже на автоматы состояний, менять что-либо не очень удобно.
Введите промежуточный DSL ;)
ZAN
shiza
Столкнулся с тем, что скорость регулярок для меня слишком маленькая (зато функционал полностью подходит).
Можно:
1. Попробовать оптимизировать шаблон.
2. Посмотреть здесь -> http://construct.wikispaces.com/
3. Если используются только базовые конструкции регулярных выражений (не понимать под BRE), такие как *, +, | и (), можно написать свой движок на ДКА.
shiza
asv13
mxTextTools - все никак не найду как подступиться - ужасные конуструкции, но видимо придется. %)
Из документации я нашел только официальную доку и еще мануал по прасингу от Гвидо. Есть еще что-нибудь?

ZAN
А что такое ДКА и с чем его едят?
shiza
Нашел для mxTextTools генератор. Но генерит он из другой незнакомой мне штуки.
Никто не встречался с EBNF?
ZAN
shiza
А что такое ДКА и с чем его едят?
ДКА - это имеется ввиду детерминированный конечный автомат. Питоновский движок регулярки написан на недетерминированных КА, поэтому он очень многофункциональный и относительно медленный (за счет механизма откатов, которые присущи НКА). Движки на ДКА, как правило, намного более быстрые, но более примитивные.
Как построить ДКА по регулярному выражению - описано здесь
Возможно, однако, имеет смысл для начала просто пересмотреть используемые шаблоны - нет ли в них явных ресурсоемких конструкций, например:
(.*); вместо ([^;]);
или же
(.*)end вместо (.*?)(?=end)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB