![]() |
|
Модераторы: ginnie |
![]()
|
|
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: нет Всего: 40 |
perldoc re::engine::Suppir ?
|
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Да ладно вам стебаться. Если б регулярные выражения оставались такими, какими они появилсь, то мы бы писали километровые шаблоны для разбора простейших случаев.
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: нет Всего: 40 |
по-вашему, вся программа должна состоять из одного, средних размеров регулярного выражения?
("make me happy" рассматриваем как эктремальный вырожденный случай, к которому надо стремиться). |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
arto, мне кажется, нужно стремиться к более высокоуровневому представлению.
Чтобы не пришлось описывать все варианты руками. Имхо это может дать Perl новую жизнь. . 1) например, если у меня в регулярном выражении /кошка/, я хочу, чтобы слово "кошка" нашлось и в ANSI и DOS и в UNICODE кодировках (чтобы регулярное выражение для юникода было таким же как и для других кодировок) 2) нечеткий поиск, например /?2:конституция/ - любые две буквы могут не совпадать 3) поддержка синонимов. Имхо это очень крутая фича, особенно для поиска-замены. 4) автоматическая упаковка набора из регулярных выражений. Например, у меня для разбора текста написаны 200 регулярок. Из них большинство пересекаются (есть одинаковые конструкции). Соответственно, их можно преобразовать в один автомат, и очистить от повторяющихся (лишних) состояний. Это значительно ускорит поиск. Это сообщение отредактировал(а) Suppir - 15.5.2009, 15:19 |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: нет Всего: 40 |
1. проще все привести все данные к одной кодировке. каким автоматом вы распознаете koi8-r, cp1251 и iso-8859-1 ?
2. проще выделить слово и самому проверить его. 3. пример? 4. типа ORM, который perl-код переводит в sql, от которого плачут dba? |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
to arto:
1. Допустим, у меня данные в cp866 (dos), cp1251 (ansi) и unicode. Я хочу написать одно регулярное выражение, и чтобы оно работало в любой кодировке. Первые две похожи, но регулярка для юникода делается иначе. 2. Фразу "Интернет-сайт" могут написать так: "Интернет-сайт", "интернет сайт" и так далее. Достаточно набрать /(?3:интернет сайт)/ - и регулярка найдет все возможные варианты. А если написать s/(?3:интернет сайт)/интернет сайт/, то Perl преобразует варианты к одному виду. Другой пример - поиск текста с ошибками и опечатками. Слово может быть набрано "Итернет-сайт", "презедент", "инструция" - как вы его найдете обычным регулярным выражением? Никак. Еще пример - ошибка распознавания при сканировании. Вместо какой-нибудь буквы может быть цифра (о - 0, 1 - i), вместо кириллической буквы латинская (o - о, p - р). В шаблоне вы ведь не сможете учесть все варианты ошибок. А с нечетким поиском достаточно ввести правильный шаблон и максимальное допущение. 3. Например, я хочу найти все документы 2009 года: /\d{1,2} мая 2009 года/ - найдутся и "мая" и "апреля" и "июня" также исключение лишних синонимов из текста: замена слов одно на другое с учетом окончаний (вы ведь не будете вручную все окончания перебирать) и так далее. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: нет Всего: 40 |
1. пример -- "опхбер", это в какой кодировке? откуда perl узнает кодировку?
2. /интернет[\s-]+сайт/i, не подойдет? угу, как сделать в слове из 3 букв 4 ошибки? грамотность написание -- проблема не perl, а средней школы. 3. а "февраль" не найдется? а почему? а "maaliskuu"? а почему? ps. семимильными шагами идем к /<make me happy>/ :) |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
arto, насчет ошибок. Я разбираю документы органов власти (официальные документы, регламентирующие нашу жизнь) - там сотни ошибок на мегабайт. Причем, самые неграмотные чиновники в департаментах образования и здравоохранения
Конечно, если использовать регулярные выраженияl только для разбора логов, то, наверное, эти фичи не нужны. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: нет Всего: 40 |
полагаю, неграмотность российских чиновников должна волновать их начальство, а не разработчиков perl.
|
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
К сожалению, начальников это мало волнует :(
Приходится перелопачивать весь текст - искать ошибки, приводить к единому виду. Юзаю (в основном) архивариус 3000, powergrep и perl. Архивариус - для поиска с поддержкой морфологии, powergrep - для пакетных фильтров и замен в тексте, а Perl - как универсальный инструмент для сложных случаев. Вот эти вышеперечисленные фичи Perl принесли бы огромную пользу, по крайней мере в моей работе Наверное, их не так просто реализовать, хотя, я, кажется, видел модуль нечеткого поиска на CPAN... Это сообщение отредактировал(а) Suppir - 15.5.2009, 17:07 |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: нет Всего: 40 |
большинство, если не все, заточены под английский язык.
а левенштейн вам, imho, не очень поможет. скорее вам надо смотреть на какие-нибудь антиматы, там попадаются интересные алгоритмы. |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Если кто знает софтину для поиска/замен со следующими функциями:
1) поиск/замена в .doc, .pdf, поддержка юникода 2) регулярные выражения Perl (PCRE) 3) поиск (и замена) с учетом морфологии (русский язык) 4) поиск орфографических, пунктуационных ошибок 5) возможность создавать и редактировать коллекции фильтров 6) поддержка нечеткого поиска то дайте знать |
|||
|
||||
| Logo |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 5 Всего: 10 |
Можно реализовать с помщью перегрузки, но конечно по скорости будет уступать встроенной возможности, плюс некоторые ограничения, налагаемые перегрузкой. Учет языка это скорее удел библиотек, а не ядра. Запихать туда множество языков мира, плюс различные профессиональные сленги не реально Где-то видел платную Perl/PHP либу для поиска с учетом морфологии. |
||||
|
|||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 1 Всего: 31 |
||||
|
||||
| Logo |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 5 Всего: 10 |
В книге у Фридла писалось
sample.pl
regexaddon.pm
О плохом, самое плохое нельзя будет использовать интерполяцию переменной внутрь конструкции, например \fd{<$numeric}. Еще нельзя будет использовать новую конструкцию в строке, которая интерполируется в регулярное выражение, можно только в конструции qr//;
|
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |