Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск определенной фразы по массиву 
:(
    Опции темы
Zmiuko
Дата 20.10.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Ребят. Проблема такая.

Есть массив данных. Допустим это история сообщений гостевой книги.

Код

$arr = array(
array('Привет!'),
array('Как дела'),
array('И как? Нормально все'),
array('Хм..'),
array('Вот те раз! Вот те два!'),
array('Ухаха'),
array('Пипец'),
array('Хах ыыыыы')
);


Вносим, к примеру, в поиск "Привет как дела?", указываем ключ $a=1 , регистронезависимый , указываем ключ $b - первая максимально схожая строка, в случае отсутствия совпадений - выводит " Привет!" , либо "Привет как дела?" в случае совпадения

Не могу никак придумать функцию, которая бы искала указанную фразу среди массива имеющихся не смотря на знаки препинания...

Пробовал посредством ereg

Код

$pattern = implode('|',(xz($string)));

    if(eregi($pattern,$text)) { ...


где каждый элемент массива фильтруется, разбивается на слова и собирается в паттерн "Привет", либо "Как|дела" и  через регулярку сравнивается, но с различными фразами очень много косяков и часто поиск не работает.

Помогите решить проблему.

Поиск, гугл, яндекс - безрезультатно. Мускул не использую.

Добавлено @ 09:19

Код

/* Сравниваю каждый элемент массива с искомой фразой $string*/
for($m=0; $m<count($arr); $m++) {

    $pattern = implode('|',(xz($arr[$m]['0'])); 
    if (preg_match( "/(".$pattern.")*/is", $string )) {

            ...


Точнее так ничего не выходит...

Добавлено @ 09:19
Выводит последний элемент массива по любому запросу :(

Это сообщение отредактировал(а) Zmiuko - 20.10.2009, 09:22
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 20.10.2009, 09:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Подпись под всем этим неиллюзорно доставляет.

PM MAIL   Вверх
Zmiuko
Дата 20.10.2009, 09:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Не понял, пардон.

Я в регулярках дубок. 

Понимаешь, мне как то надо при поиске фразы, найти из массива ту фразу, которая по словам схожа, в каком порядке бы они не были..

На ум приходит только ereg('/слово|слово|слово/', $искомая_фраза) 

Можно хоть в массиве по паттерну искать, хоть паттерном по искомой фразе... однохерственно: и там и там словосочетания. Да и смысл дальнейшей работы, что мне формировать паттерн из элемнов массива удобнее будет.

Ну хз как сделать чтобы была регистронезависимость и любой порядок слов. :(

Добавлено через 2 минуты и 21 секунду
К примеру есть элемент массива "Петя любит Машу", и чтобы его находило по запросам "петя любит машу""Петя машу Любит" и так далее 
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 20.10.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Я-то понимаю. 
Мне интересно, поймет ли кто-то еще, в этом нагромождении не имеющих никакого отношения к задаче массивов, вложенных массивов, ключей, xz каких функций и прочего. 

И снова к вопросу о том, нужны ли алгоритмы пхп-программисту. Прекрасная иллюстрация. 
Мы наблюдаем сейчас случай, когда программист привыкнув, что алгоритм ему не нужен, пытается решить задачу "в лоб", так же, как обычно - просто написав один за другим несколько операторов. Только обычно алгоритм есть, неявный, и обычно получается. А здесь алгоритма нету совсем, и поэтому попытки выглядят очень смешно. 
PM MAIL   Вверх
Zmiuko
Дата 20.10.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Есть файл истори сообщений, читаем функцией file() в массив $arr:

Код

$arr = array(
array('Привет!'),
array('Как дела'),
array('И как? Нормально все'),
array('Хм..'),
array('Вот те раз! Вот те два!'),
array('Ухаха'),
array('Пипец'),
array('Хах ыыыыы')
);


Есть фраза "И как, все нормально", которая как видим присутствует в массиве, только порядок слов и регистр другой.

Далее, я пробегаю циклом по массиву, и обрабатываю каждый элемент функцией xz() (функция делит словосочетания в элементах по словам [то есть пробелам], уберает окончания и вывод в массив), затем результат функции xz() обрабатываю посредством implode('|', xz(**)) дабы получить паттерн для функции eregi.

Получаем:

Код

for($m=0; $m<count($arr); $m++) {
    $pattern = implode('|',(xz($arr[$m]['0']))); 
    /* Допустим $pattern от xz($arr['0']['0']) = "Привет", от xz($arr['1']['0']) = "Как|дел", от от xz($arr['2']['0']) = "И|как?|Нормальн|все" и т.д. */
    if(eregi($pattern,"И как, все нормально")) {
        echo $arr[$m]['0'];
    }
}


Должно вывести схожий по словам элемент, но фигвам! :( Чего тут непонятного?

P.s.: Вы уж извините, что я здесь функцию xz не привожу, но просто две страницы замет код.
PM MAIL WWW ICQ Skype Jabber   Вверх
skyboy
Дата 20.10.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



регулярка?
не получится написать регулярку "сначала либо первое слово, либо второе; затем - затем оставшееся, в зависимости от того, что было в первой позиции".
потому у тебя полученная регулярка будет находить по запросу "петя любит машу" и элемент "петя петя машу" и "машу машу машу". 
точнее, собрать регулярку возможно, но так как она будет для N слов состоять из N! вариантов разного порядка слов, то для поиска 5 слов будет регулярка из 120 вариантов порядка следования слов. А уж какой длины будет полученная регулярка, лучше не думать.
Это же просто смерть сервера.


PM MAIL   Вверх
Zmiuko
  Дата 20.10.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  20.10.2009,  09:54 Найти цитируемый пост)
Я-то понимаю. 
Мне интересно, поймет ли кто-то еще, в этом нагромождении не имеющих никакого отношения к задаче массивов, вложенных массивов, ключей, xz каких функций и прочего. 

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


Хорошо написал, только вот не по делу. 

Я устал и не спал. Мог бы написать конечно "Народ, необходима функция для сравнения двух фраз, где порядок слов и регистр не имеет значения", но решил ситуацию изобразить полностью.
Нужны алгоритмы, не нужны... Отвечу, для формирования некой базы знаний нужно все, необходимо просто. Имхо только ошибки нас и учат. Мне, 16-летнему как-то сложные философские конструкции не к чему. А вы, Ипатьев, извиняюсь, ежели Вам не нравиться, нету желания, рябит в глазах от моего кода, лучше бы не показывали свой ум и мнение, а не писали вовсе. Зачем умолять в чужих глазах на этом форуме, для этого блоги есть.

Извиняюсь за флуд и прощу прощения что потревожил своими дурацкими идеями.

Добавлено через 2 минуты и 11 секунд
Цитата(skyboy @  20.10.2009,  10:39 Найти цитируемый пост)
зате


Хм.. А через eregi('слово|слово|слово') не получится?

дело в том что вышеуказанный код нормально реагирует на длинные фразы, а если я ищу слово "привет" то возращает пустое значение..
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 20.10.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Zmiuko @  20.10.2009,  10:19 Найти цитируемый пост)
Есть файл истори сообщений, читаем функцией file() в массив $arr:

начнем с того, что функция file ничего похожего на массив $arr в принципе вернуть не может.
не говоря уже о том, что сам по себе массив является лишним звеном в задаче поиска по строке.

и так в этой задаче всё. миллион лишних телодвижений, за которыми сама задача (довольно простая, в сущности), совершенно теряется из виду.

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


PM MAIL   Вверх
skyboy
Дата 20.10.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



если ты ищешь в строках определенные слова в произвольном порядке, то почему бы не разбить строку поиска и текст, в котором происходит поиск, на слова? И не проверять наличие определенного слова во множестве слов, вместо составления монструозной регулярки.
Цитата(Zmiuko @  20.10.2009,  09:41 Найти цитируемый пост)
Я устал и не спал.

я надеюсь, это не попытка вызвать сопливое сочувствие?
PM MAIL   Вверх
Ипатьев
Дата 20.10.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Zmiuko @ 20.10.2009,  10:41)
Цитата(Ипатьев @  20.10.2009,  09:54 Найти цитируемый пост)

И снова к вопросу о том, нужны ли алгоритмы пхп-программисту. 


Хорошо написал, только вот не по делу. 
Мне как-то сложные философские конструкции не к чему

Если кроме шуток, то в этом и состоит главная проблема. 
программа - это реализация алгоритма. Это так, вне зависимости от того, понимаете вы это, или нет.

И главная ваша проблема - в отсутствии алгоритма. 

Вы пишете программу, которая выполняет какие-то действия. Вы пытаетесь заставить выполнять ее какие-то действия. Но при этом эти действия - совсем не то, что вам нужно.
PM MAIL   Вверх
Zmiuko
  Дата 20.10.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  20.10.2009,  10:41 Найти цитируемый пост)
охожего 


smile да вроде что содержимое $arr , что вывод в массив через file() это один и тот же массив, какая разница-то при отладке скрипта?... ну пускай из кода $arr[$m]['0'] уберем ['0'] , я так полагаю, что любой кодер на пыхе это поймет... тут вроде бы понятно все. Пожимаю плечами.
PM MAIL WWW ICQ Skype Jabber   Вверх
Учащий
Дата 20.10.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.10.2009

Репутация: -1
Всего: -1



Не для слабых умов smile

Ты хочешь чтобы при вводе в табло поиска слово допустимое в массиве "Привет как дела" выводилось при нахождении, это у тебя получается, а если писать слово как дела привет, то он нечего не находит?

Я правельно понял??
PM MAIL   Вверх
Zmiuko
  Дата 20.10.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(skyboy @  20.10.2009,  10:44 Найти цитируемый пост)
 


Блин, я вопрос всего задал. А тут флуда развелось. Вопрос же был не оценки моего знания, либо душевного равновесия. Вопрос касался, а почему это и вот это не работает, как лучше. Что касается стиля программирования, я уж как-нить сам уж... Мануалы почитаю чтоле.. Кто как кодит - какая разница-то?

Что за предвзятость-то?
PM MAIL WWW ICQ Skype Jabber   Вверх
skyboy
Дата 20.10.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Zmiuko @  20.10.2009,  09:41 Найти цитируемый пост)
Хм.. А через eregi('слово|слово|слово') не получится?

то есть, тебя устроит, если для запроса "петя любит машу" станет "находиться" фраза "любит любит любит"? о_0
PM MAIL   Вверх
Zmiuko
  Дата 20.10.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Я так понимаю, что на замечание, что мол все таки по делу надо что-то писать. Это я не о вас, skyboy. Люди здесь обижаются, что-то пишут о политики поставленных задач. Когда основы вполне просты и я сна задача. Даже если что-то не так, можно предупредить о той или иной проблеме.

Второй раз уже. Только первый раз когда спросил, зачем мне описывать то что мол так давно не пишут либо я нечитабельно пишу, мне замечание ставят и в кратковременный бан. 

Я матерюсь? Унижаю чье-либо достоинство? Не вежлив? Невествен? Оскобляю либо излишне резок?

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

Спасибо, что уделили время.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1238 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.