Есть ли Python-эквивалент для `изучения` Perl? - PullRequest
4 голосов
/ 06 марта 2012

Из документации Perl :

study требуется дополнительное время для изучения SCALAR ($ _, если не указано) в ожидании выполнения множества сопоставлений с образцом в строке, прежде чем она будетследующий модифицированныйЭто может или не может сэкономить время, в зависимости от характера и количества шаблонов, которые вы ищете, и распределения частот символов в искомой строке;

Я пытаюсь ускорить некоторые регулярныеанализ, управляемый выражениями, который я делаю в Python, и я вспомнил этот трюк из Perl.Я понимаю, что мне придется провести тестирование, чтобы определить, есть ли ускорение, но я не могу найти эквивалентный метод в Python.

Ответы [ 2 ]

8 голосов
/ 06 марта 2012

Изучение Перла на самом деле мало что дает. Скомпилированное регулярное выражение стало намного умнее, чем было при создании study.

Например, он компилирует альтернативы в трехуровневую структуру с предсказанием Ахо-Корасика.

Запустите с perl -Mre=debug, чтобы увидеть, какие хитрости применяют компилятор регулярного выражения и механизм выполнения.

6 голосов
/ 06 марта 2012

Насколько я знаю, в Python нет ничего подобного. Но согласно perldoc :

Способ обучения таков: связанный список каждого персонажа в Строка для поиска сделана, поэтому мы знаем, например, где все 'K' символы. Из каждой строки поиска самый редкий символ выбран на основе некоторых статических таблиц частот, построенных из С программами и английским текстом. Только те места, которые содержат это рассматриваются "редчайшие" персонажи.

Это звучит не очень изощренно, и вы, вероятно, могли бы взломать что-то подобное себе.

esmre отчасти смутно похож. И , как заметил @Frg , вы захотите использовать re.compile, если вы повторно используете одно регулярное выражение (чтобы избежать повторного анализа самого регулярного выражения снова и снова).

Или вы можете использовать деревья суффиксов (здесь одна реализация или расширение C с поддержкой юникода ) или массивы суффиксов ( осуществление ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...