Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск возможных комбинаций слов.. [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
Dragon_Knight
Отправлено: 30 Апреля, 2013 - 00:28:46
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Май 2012  
Откуда: г.Мытищи, МО


Помог: 0 раз(а)




Поверьте, перебор циклом кучу массивов, будет работать дольше, чем если я напишу тоже самое на php, и с сервера буду делать POST запрос на этот PHP, обрабатывать его там и возвращать обратно на сервер. Но это бред.

Я крайне зажат в ресурсах, тем более на встроенных функциях. Грубо говоря, пока сервер будет обрабатывать строку, все игроки 'зависнут', а за сутки под 100мб чата набегает..

Почему я упёрся в регулярку? тока потому, что она работает вне потока сервера, и пусть она хоть секунду обрабатывается...
 
 Top
DlTA
Отправлено: 30 Апреля, 2013 - 00:40:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




 
 Top
Champion Супермодератор
Отправлено: 30 Апреля, 2013 - 08:32:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




если чисто регуляркой, то
PHP:
скопировать код в буфер обмена
  1.  /(?:(?:дайте|дадите|можно).+?(?:админку|хелперку|хелпера)|(?:админку|хелперку|хелпера).+(?:дайте|дадите|можно))/is


Но если слов больше и порядок тоже не имеет значения, то таким способом можно задолбаться писать.

Можно сделать так (я напишу на PHP, Вы переведете на свой язык):
preg_match_all('/(дайте|дадите|можно)|(админку|хелперку|хелпера)/', $src, $m);
а потом циклом проверить, чтоб все элементы $m[1] были не пустые.

Что будет работать быстрее - preg_match_all + цикл по совпадниям или цикл со стрпозами - вопрос спорный. Регулярка почти всегда быстрее двух стрпозов (если она выполняет то же самое, что планируется сделать двумя стрпозами). А если матчить точное совпадение, то она сопоставима по скорости со стрпозом.
 
 Top
LIME
Отправлено: 30 Апреля, 2013 - 10:59:35
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Champion пишет:
А если матчить точное совпадение, то она сопоставима по скорости со стрпозом.
как-то тут делали замер
на простейшую регулярку(точное совпадение)
стрпоз в 10 раз быстрее
 
 Top
Champion Супермодератор
Отправлено: 30 Апреля, 2013 - 12:32:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Длина строки, время выполнения 1000000 итераций:
1. Искомая строка 5 символов близко к началу
int(3366) double(3.8106479644775) double(3.3490209579468)
2. Искомая строка 5 символов в конце (или вообще отсутствует)
int(3366) double(6.5905828475952) double(3.3512721347809)
3. Искомая строка находится ближе к концу, ее длина 1000 символов
int(3366) double(24.582785129547) double(2.3106808662415).

Последний случай - явление довольно редкое, а вот первые 2 показывают, что стрпоз сопоставим с регуляркой.
 
 Top
LIME
Отправлено: 30 Апреля, 2013 - 13:09:05
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




мэйби
однакож стоит хоть немного усложнить регулярку и посыпется в геометрической прогрессии(это замечание для новичков)

(Отредактировано автором: 30 Апреля, 2013 - 13:10:20)

 
 Top
Champion Супермодератор
Отправлено: 30 Апреля, 2013 - 13:54:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




LIME пишет:
однакож стоит хоть немного усложнить регулярку и посыпется в геометрической прогрессии(это замечание для новичков)
Напиши-ка стрпозами то, что может сделать усложненная регулярка - что там посыпится?)
 
 Top
LIME
Отправлено: 30 Апреля, 2013 - 13:55:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




писал
не всегда необходима регулярка
 
 Top
Champion Супермодератор
Отправлено: 30 Апреля, 2013 - 14:53:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




А если есть под рукой, можешь продемонстрировать?
 
 Top
LIME
Отправлено: 30 Апреля, 2013 - 15:23:59
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1. $begin=strpos('begin',$str);
  2. substr($str,$begin,strpos('end',$str,$begin)-$begin);

(Добавление)
замеришь против регулярки?
 
 Top
nerv
Отправлено: 30 Апреля, 2013 - 19:01:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




LIME пишет:
не всегда необходима регулярка

+
если задачу можно решить без регулярки, ее надо решать без регулярки

Dragon_Knight пишет:
в которой присутствуют слова по такой маске: "(дайте|дадите|можно)&(админку|хелперку|хелпера)".

берешь текстовый редактор, пишешь в столбик словарь. Затем собираешь в одну регулярку с помощью "замены по регулярному выражению" Ха-ха

к слову: минус стрпоз - найдет подстроки внутри строки, что не всегда необходимо. Регуляркой можно "подрулить".

(Отредактировано автором: 30 Апреля, 2013 - 19:09:07)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
EuGen Администратор
Отправлено: 30 Апреля, 2013 - 20:06:45
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




А теперь представим, что вариантов с выбором будет не 2, а, например, 4. Или 6 ? В соответствии с числом перестановок количество требуемых вариантов будет расти по факториалу, то есть для 4-х это уже 24, а для 6 - 720 и т.п.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Champion Супермодератор
Отправлено: 30 Апреля, 2013 - 20:41:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




LIME пишет:
замеришь против регулярки?

float(3.1662002086639) float(2.857399892807) на короткой строке
float(3.5562990188599) float(2.9403080463409) на длинной
Та таком простеньком регулярка тоже проиграла. Но она удобнее читается)
 
 Top
nerv
Отправлено: 01 Мая, 2013 - 00:04:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




EuGen пишет:
А теперь представим

не буду представлять Закатив глазки

nerv пишет:
если задачу можно решить без регулярки, ее надо решать без регулярки

давайте понимать это в пределах разумного Подмигивание

Любую задачу связанную с обработкой теста можно решить без регулярки. Однако, регулярные выражения созданы (будем наедятся) с целью упростить решение поставленных задач, зачастую не травильных. И когда я говорю фразу выше, подразумеваю решение с использованием простых строковых функций без нагромождения кода и т.п. Т.е., если задачу можно решить просто, ее надо решать просто. Если нет, регулярные выражения в помощь.

(Отредактировано автором: 01 Мая, 2013 - 00:05:32)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
Dragon_Knight
Отправлено: 01 Мая, 2013 - 03:40:12
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Май 2012  
Откуда: г.Мытищи, МО


Помог: 0 раз(а)




А тема-то разгорелась Радость
Если честно, я пока отказался от этой идеи, но появился чисто спортивный интерес, как-же всётаки такое реализовать, на родной языке, это я про PHP Хорошо.

Уточню суть задачи: Сделать инструмент, желательно гибкий и простой в обращении, который позволит в строке, набранной человеком, находить определённые группы слов, по которым можно было-бы определить суть текста и соответственно на него отреагировать.
Самое простое что приходит на ум, это взять любую систему антимата и расковырять её, но там есть один нюанс, в нем идёт проверка по одному слову, когда в данной задачи нужно находить несколько ключевых слов.
Иными словами написать некое подобие чат бота, но настроенный на конкретные ключевые слова.

Как пример на конструкцию "(дайте|дадите|можно)&(админку|хелперку|хелпера)" нада послать пользователя на.. форум Радость.
Расшифровка примера (Отобразить)


Поиграв с регулярками на сайте: http://rubular[dot]com/ (Кстати, отличный сайт для отладки регулярок), не смог добиться результата, даже приближённо к поставленной задачи.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB