Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 8, 2008 01:23:13

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер текста

Парсю много текста в промышленных маштабах.
Столкнулся с тем, что скорость регулярок для меня слишком маленькая (зато функционал полностью подходит).

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

У кого-нибудь есть опыт в подобной области, чтоб ткнуть носом - куда копать?



Офлайн

#2 Авг. 8, 2008 02:28:32

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Парсер текста

Может стоит либу на си взять какую, или саому накропать, раз уж скорость так критична…

Офлайн

#3 Авг. 8, 2008 08:06:54

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер текста

использую mxTextTools либа на С скорость хороша да вот только здорово описание структуры похоже на автоматы состояний, менять что-либо не очень удобно.



Офлайн

#4 Авг. 8, 2008 11:11:45

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Парсер текста

Вынести правила для автоматов отдельно в матрицу, и менять их там.
Правда так можно и до регулярок добраться ;)

Офлайн

#5 Авг. 8, 2008 11:19:41

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер текста

Ferroman
Вынести правила для автоматов отдельно в матрицу, и менять их там.
Правда так можно и до регулярок добраться ;)
Ты не видел структуры описания этого дела… Perl отдыхает.



Офлайн

#6 Авг. 8, 2008 11:25:37

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Парсер текста

asv13
использую mxTextTools либа на С скорость хороша да вот только здорово описание структуры похоже на автоматы состояний, менять что-либо не очень удобно.
Введите промежуточный DSL ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Авг. 8, 2008 12:50:42

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Парсер текста

shiza
Столкнулся с тем, что скорость регулярок для меня слишком маленькая (зато функционал полностью подходит).
Можно:
1. Попробовать оптимизировать шаблон.
2. Посмотреть здесь -> http://construct.wikispaces.com/
3. Если используются только базовые конструкции регулярных выражений (не понимать под BRE), такие как *, +, | и (), можно написать свой движок на ДКА.



Офлайн

#8 Авг. 8, 2008 13:17:24

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер текста

asv13
mxTextTools - все никак не найду как подступиться - ужасные конуструкции, но видимо придется. %)
Из документации я нашел только официальную доку и еще мануал по прасингу от Гвидо. Есть еще что-нибудь?

ZAN
А что такое ДКА и с чем его едят?



Офлайн

#9 Авг. 8, 2008 13:19:27

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер текста

Нашел для mxTextTools генератор. Но генерит он из другой незнакомой мне штуки.
Никто не встречался с EBNF?



Офлайн

#10 Авг. 8, 2008 13:49:27

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Парсер текста

shiza
А что такое ДКА и с чем его едят?
ДКА - это имеется ввиду детерминированный конечный автомат. Питоновский движок регулярки написан на недетерминированных КА, поэтому он очень многофункциональный и относительно медленный (за счет механизма откатов, которые присущи НКА). Движки на ДКА, как правило, намного более быстрые, но более примитивные.
Как построить ДКА по регулярному выражению - описано здесь
Возможно, однако, имеет смысл для начала просто пересмотреть используемые шаблоны - нет ли в них явных ресурсоемких конструкций, например:
(.*); вместо ([^;]);
или же
(.*)end вместо (.*?)(?=end)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version