![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Zmiuko |
|
||||||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Ребят. Проблема такая.
Есть массив данных. Допустим это история сообщений гостевой книги.
Вносим, к примеру, в поиск "Привет как дела?", указываем ключ $a=1 , регистронезависимый , указываем ключ $b - первая максимально схожая строка, в случае отсутствия совпадений - выводит " Привет!" , либо "Привет как дела?" в случае совпадения Не могу никак придумать функцию, которая бы искала указанную фразу среди массива имеющихся не смотря на знаки препинания... Пробовал посредством ereg
где каждый элемент массива фильтруется, разбивается на слова и собирается в паттерн "Привет", либо "Как|дела" и через регулярку сравнивается, но с различными фразами очень много косяков и часто поиск не работает. Помогите решить проблему. Поиск, гугл, яндекс - безрезультатно. Мускул не использую. Добавлено @ 09:19
Точнее так ничего не выходит... Добавлено @ 09:19 Выводит последний элемент массива по любому запросу :( Это сообщение отредактировал(а) Zmiuko - 20.10.2009, 09:22 |
||||||
|
|||||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Подпись под всем этим неиллюзорно доставляет.
|
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Не понял, пардон.
Я в регулярках дубок. Понимаешь, мне как то надо при поиске фразы, найти из массива ту фразу, которая по словам схожа, в каком порядке бы они не были.. На ум приходит только ereg('/слово|слово|слово/', $искомая_фраза) Можно хоть в массиве по паттерну искать, хоть паттерном по искомой фразе... однохерственно: и там и там словосочетания. Да и смысл дальнейшей работы, что мне формировать паттерн из элемнов массива удобнее будет. Ну хз как сделать чтобы была регистронезависимость и любой порядок слов. :( Добавлено через 2 минуты и 21 секунду К примеру есть элемент массива "Петя любит Машу", и чтобы его находило по запросам "петя любит машу", "Петя машу Любит" и так далее |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Я-то понимаю.
Мне интересно, поймет ли кто-то еще, в этом нагромождении не имеющих никакого отношения к задаче массивов, вложенных массивов, ключей, xz каких функций и прочего. И снова к вопросу о том, нужны ли алгоритмы пхп-программисту. Прекрасная иллюстрация. Мы наблюдаем сейчас случай, когда программист привыкнув, что алгоритм ему не нужен, пытается решить задачу "в лоб", так же, как обычно - просто написав один за другим несколько операторов. Только обычно алгоритм есть, неявный, и обычно получается. А здесь алгоритма нету совсем, и поэтому попытки выглядят очень смешно. |
|||
|
||||
Zmiuko |
|
||||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Есть файл истори сообщений, читаем функцией file() в массив $arr:
Есть фраза "И как, все нормально", которая как видим присутствует в массиве, только порядок слов и регистр другой. Далее, я пробегаю циклом по массиву, и обрабатываю каждый элемент функцией xz() (функция делит словосочетания в элементах по словам [то есть пробелам], уберает окончания и вывод в массив), затем результат функции xz() обрабатываю посредством implode('|', xz(**)) дабы получить паттерн для функции eregi. Получаем:
Должно вывести схожий по словам элемент, но фигвам! :( Чего тут непонятного? P.s.: Вы уж извините, что я здесь функцию xz не привожу, но просто две страницы замет код. |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
регулярка?
не получится написать регулярку "сначала либо первое слово, либо второе; затем - затем оставшееся, в зависимости от того, что было в первой позиции". потому у тебя полученная регулярка будет находить по запросу "петя любит машу" и элемент "петя петя машу" и "машу машу машу". точнее, собрать регулярку возможно, но так как она будет для N слов состоять из N! вариантов разного порядка слов, то для поиска 5 слов будет регулярка из 120 вариантов порядка следования слов. А уж какой длины будет полученная регулярка, лучше не думать. Это же просто смерть сервера. |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Хорошо написал, только вот не по делу. Я устал и не спал. Мог бы написать конечно "Народ, необходима функция для сравнения двух фраз, где порядок слов и регистр не имеет значения", но решил ситуацию изобразить полностью. Нужны алгоритмы, не нужны... Отвечу, для формирования некой базы знаний нужно все, необходимо просто. Имхо только ошибки нас и учат. Мне, 16-летнему как-то сложные философские конструкции не к чему. А вы, Ипатьев, извиняюсь, ежели Вам не нравиться, нету желания, рябит в глазах от моего кода, лучше бы не показывали свой ум и мнение, а не писали вовсе. Зачем умолять в чужих глазах на этом форуме, для этого блоги есть. Извиняюсь за флуд и прощу прощения что потревожил своими дурацкими идеями. Добавлено через 2 минуты и 11 секунд Хм.. А через eregi('слово|слово|слово') не получится? дело в том что вышеуказанный код нормально реагирует на длинные фразы, а если я ищу слово "привет" то возращает пустое значение.. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
начнем с того, что функция file ничего похожего на массив $arr в принципе вернуть не может. не говоря уже о том, что сам по себе массив является лишним звеном в задаче поиска по строке. и так в этой задаче всё. миллион лишних телодвижений, за которыми сама задача (довольно простая, в сущности), совершенно теряется из виду. если бы вы не пытались сделать все сразу - и поиск по массиву, и регистронезависимый, и без знаков препинания, то дело бы пошло быстрее. а если бы вы сначала решили основную задачу - собственно поиск, вместо кучи второстепенных - то еще быстрее. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
если ты ищешь в строках определенные слова в произвольном порядке, то почему бы не разбить строку поиска и текст, в котором происходит поиск, на слова? И не проверять наличие определенного слова во множестве слов, вместо составления монструозной регулярки.
я надеюсь, это не попытка вызвать сопливое сочувствие? |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Если кроме шуток, то в этом и состоит главная проблема. программа - это реализация алгоритма. Это так, вне зависимости от того, понимаете вы это, или нет. И главная ваша проблема - в отсутствии алгоритма. Вы пишете программу, которая выполняет какие-то действия. Вы пытаетесь заставить выполнять ее какие-то действия. Но при этом эти действия - совсем не то, что вам нужно. |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
![]() |
|||
|
||||
Учащий |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.10.2009 Репутация: -1 Всего: -1 |
Не для слабых умов
![]() Ты хочешь чтобы при вводе в табло поиска слово допустимое в массиве "Привет как дела" выводилось при нахождении, это у тебя получается, а если писать слово как дела привет, то он нечего не находит? Я правельно понял?? |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Блин, я вопрос всего задал. А тут флуда развелось. Вопрос же был не оценки моего знания, либо душевного равновесия. Вопрос касался, а почему это и вот это не работает, как лучше. Что касается стиля программирования, я уж как-нить сам уж... Мануалы почитаю чтоле.. Кто как кодит - какая разница-то? Что за предвзятость-то? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Я так понимаю, что на замечание, что мол все таки по делу надо что-то писать. Это я не о вас, skyboy. Люди здесь обижаются, что-то пишут о политики поставленных задач. Когда основы вполне просты и я сна задача. Даже если что-то не так, можно предупредить о той или иной проблеме.
Второй раз уже. Только первый раз когда спросил, зачем мне описывать то что мол так давно не пишут либо я нечитабельно пишу, мне замечание ставят и в кратковременный бан. Я матерюсь? Унижаю чье-либо достоинство? Не вежлив? Невествен? Оскобляю либо излишне резок? Извините, просто далее обсуждение считаю бессмысленным с такой предвзятостью. Спасибо, что уделили время. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Вообще, конечно, 16 лет - это похвально.
Я в 16 лет не пытался написать яндекс ![]() Давайте вы расскажете, что вы хотите искать, и где. Безо всяких "Допустим". |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Да видишь, я не могу найти подобную реализацию нигде. Хотя бы просто фразы сравнивало без учета регистра, но вот как быть с местоположением слов.
Добавлено через 2 минуты и 19 секунд Мне необходимо в массиве найти значение элемента схожее с искомой фразой без учета регистра и знаков препинаний. Если возможно, то без учета порядка слов в предложении. Все перепробывал, везде что-то упускаю. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Не хотите описывать реальную задачу? Считаете, что можете описать ее на абстрактном уровне? Хорошо.
Формальное определение "схожести" в студию. Это сообщение отредактировал(а) Ипатьев - 20.10.2009, 11:06 |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Извиняюсь. До меня дошло: если использовать функцию eregi с паттерном вида слово|слово2|слово3 , то она вернет все значения массива где эти слова есть?
Значит выход возможен только если искомому фразу обратить в массив, также обратить в массив каждый элемент базы и сравнивать уже два массива? |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
||||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Формально?
хм.. есть массив фраз каких угодно и сколько угодно. необходима функция, которая осуществляет поиск конкретной фразы несмотря на изменный регистр и порядок слов. К примеру: ищем фразу красивая Водонапорная башня нашего города скрипт выдает при осуществлении поиска искомую фразу Башня водонапорная красивая Города Москвы .. несмотря на регистр и порядок слов. Так должно быть |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Большая. Ваш "стиль", хе-хе, "программирования" - главная причина того, что вы не можете решить свою задачу. А точнее - даже сформулировать её. А ещё точнее - пытаетесь решить задачу, не сформулировав её. Как в сказке - "пойди туда, не знаю куда " ![]()
ну, элементы базы не обязательно - пхп умеет искать по строкам. а дальше? чем это принципиально будет отличаться от поиска регуляркой? Добавлено @ 11:23 "конкретной фразы несмотря на измененный регистр и порядок слов" - это оксюморон. Если во фразе переставили слова, то это будет уже другая фраза. Тем более, что вы толкуете задачу на самом деле ещё шире - с изъятием слов из фразы. Не годится определение. Это сообщение отредактировал(а) Ипатьев - 20.10.2009, 11:25 |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Ладно, спасибо за консультацию, сам решу проблему.
|
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Ой, я невнимательно посмотрел ваш пример. Прошу прощения.
Судя по этому примеру, "построена новая красивая башня" и "упала новая красивая башня" - это одна и та же конкретная фраза. Нет слов. ![]() |
|||
|
||||
NLspieler |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 619 Регистрация: 13.10.2008 Где: Берлин Репутация: 16 Всего: 19 |
А как же ошибки о опчатки?
"построина новя кросивая башня" должна находить "упала новая красивая башня" Вообще, решение этой не простой задачи представляется мне таким: 1. Индексировать все слова при помощи soundex. Получив таким образом массив: $array[$номер_строки][$номер_слова] = soundex_слова. 2. Получить поисковый запрос. Разделить на слова. Найти soundex для каждого слова. Массив соундексов поискового запроса: $words_soundex[$номер] 3. Пройтись каждым из соуиндексов запроса, по массиву из информации $array. Если обнаружено совпадение, увличить на еденицу значение переменной, соответсвующей номеру строки $sowpadeniya[$номер_строки]++ ; 4. Найти самое большое значение в массиве $sowpadeniya. Выдать номер строки с самым большим количеством совпадений. 5. Дальше сложностей возникнуть не должно. При новом поисковом запросе, повторить начиная со второго пункта. Это сообщение отредактировал(а) NLspieler - 20.10.2009, 12:21 |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Это не решение данной задачи, а постановка новой. А автор еще со старой не разобрался
![]() |
|||
|
||||
NLspieler |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 619 Регистрация: 13.10.2008 Где: Берлин Репутация: 16 Всего: 19 |
||||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Дело в том, что поисковые алгоритмы - вещь не до конца, мягко говоря, исследованная.
И вы оба в своих желаниях заходите на территорию, которую и признанные авторитеты обходят стороной. Гугль, к примеру, не берется искать с учетом опечаток. А предлагает сначала исправить. А автор хочет, чтобы поиск понял, что ищущий имел в виду. То есть - контекст. А проблема контекста, кстати сказать - главный камень преткновения при распознавании речи. Так что тут далеко не все просто. И если бы автор четко сформулировал практическую проблему, которую он хочет решить, то решение нашлось бы. А так единственное, что он получит - это удовольствие от процесса. плюс - возможно - интерес, который побудит его приобрести новые знания, пойти в институт, и в конечном итоге - изобрести то, о чем он тут сейчас писал ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
мне казалось, что запрос "слово1 слово2 слово3" должно находить блоки текста, в которых есть все три слова("И"), а не хотя бы одно("ИЛИ"), если не указано иначе. для "ИЛИ" подойдет и регуляркой(опустим пока вопрос о скорости) "слово1|слово2|слово3", разве нет? Добавлено через 1 минуту и 22 секунды если быть последовательным, то тут на слово "нашего" положен болт. тогда надо найти и текст, в котором от запроса только слово "города" есть? |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Очевидно вы не поняли суть проблемы и цели реализации.
Вот, обратите внимание. Есть фразы в массиве "Питаюсь, ем радугу!" "Ем радугу, сру бабочками" "Ем радугу, сру бабочками в кашемировом пальто" заходит Вася-пользователь и не зная че внутри находится вводит в поиск фразу еМ радугу бабочками сру Цель: найти максимально точную морфологически и численно по колличеству слов фразу! Я пытался при помощи стреммера Поттера, поместив искомую фразу в массив, обработав каждое слово в ней и выделив корень русского языка. Получилось!... Теперь как-то надо сравнить. полученную фразу с элементами массива, дабы вывести максимально схожую. Думал, что возможно написать маску паттерна, где к примеру корень_слова*+корень_слова*+корень_слова* ищется в каждом элементе некоторое количество корней русских слов в произвольном порядке. Я никак не могу осилить данную задачу. Понимаю, что сложная задача, но все же. Что касается Гугла - тот морфологию языка в поисковых запросах не производит, да и не поисковик я пишу ![]() ![]() Добавлено через 11 минут и 55 секунд Цель такова, сравнить морфологически дефолтовую фразу с обычной фразой... То есть в одной фразу окончаний нету, слова обрезаны, а вторая нормальная. Поможете? |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
skyboy, я так понял, что этот молодой человек хочет полнотекстовый поиск с ранжированием результатов по релевантности. При котором в ход идут как раз все слова, как три, так и по одному. Собственно, то, что он хочет, но не знает, как сказать - это релевантность. Которая, если на простом уровне и реализуется достаточно простым алгоритмом, но на практике встречает немало подводных камней.
Разумеется. Поскольку никто не потрудился их нам рассказать
Вы можете получить таким образом совсем неожиданные результаты. Некоторые ваши предшественники таким же образом решили проанализировать творчество одного очень интеллектуального современного поэта. Программа выдала, что самые употребляемые им слова - это глаголы "мыть" и "какать". Только пережив некоторый шок, авторы программы сообразили, что программа не в состоянии отличить местоимение "какая" от деепричастия... в общем, в итоге, вместо того, чтобы сократить, как я настоятельно рекомендовал, область поиска, вы ее расширяете. Вместо того, чтобы осилить хотя бы полнотекстовый поиск, вы одновременно хотите еще и поиск с учетом словоформ. Ну что ж. Желаю удачи ![]() |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
||||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
угу. я понял. хоть и не сразу. предлагаю искать не "фразу" с использованием регулярных выражений, а каждой слово из поискового запроса в отдельности. Потом считать, сколько слов из поискового запроса было обнаружено в каждом блоке текста. Затем сортировать по количеству найденных в блоке слов из поискового запроса. Грубо говоря(без учета того, что в поисковом запросе могут быть слова с разной смысловой нагрузкой - местоимения и предлоги или прилагательные с узкоспециализированными терминами) чем больше слов из поискового запроса найдено в одном блоке, тем блок выше в общем зачете. Когда сделаешь это, офигеешь от низкой скорости, то посмотри в сторону встроенного в mysql механизма полнотекстового поиска. Или sphinx. Или не смотри. |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
тебя спрашивают не про проблемы, с которыми ты столкнулся, а что ты пишешь? Поисковик? Чат? Гостевую книгу? Или просто один консольный php-файл, который в массиве слова ищет? ну покопайся в исходниках phpMorphy или mysql, или sphinx ![]() |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
AI пишу, если устроит.
![]() Добавлено через 53 секунды Мы же, пардон, к несчастью - русские )))) вот и язык нам достался 40 тысяч слов + сленга в 10 раз еще больше... Добавлено через 3 минуты и 9 секунд Насчет phpMorphy ))) я ж казал что использую стреммер.. отсюда уже понятно что я изучал скрипты и phpMorphy и sphinx Гора полезнейшего материала, но не поможет эта гора моей проблеме. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Может, сначала знаний поднабраться?
Как-то, судя по приведенному коду, не особо вяжутся амбиции и используемый инструментарий. Это даже если говорить о проблеме поиска "в лоб". А "ассоциативный подход" требует несколько более мощного математического аппарата, чем поиск пересечения двух множеств, даже с которым вам справиться не удалось. |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
![]() Можете хотябы подсказать подобную функцию поиска по многомерному массиву. Допустим есть многомерный массив:
Массив многомерный, состоит из элементов по очереди, каждый из которых в свою очередь тоже массив из скольки угодных значений (меняется количество) Подскажите функцию которая производит поиск либо значения, либо ключа и возвращает 'ключ'=>'значение' В интернете находил, но вот сейчас утеряна. Извините за настойчивость. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
foreach
|
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
![]()
...держи... вдруг до победного будешь foreach наяривать ![]() ![]() ![]() p.S: Ах, да... Функция массив возвращает... буть готов ![]() Добавлено через 33 секунды Шутю канечн... ![]() |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Ба. Рекурсия. Да-а, без нее, конечно в двумерном массиве ничего не найти.
|
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
||||
|
||||
Zmiuko |
|
||||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Да двумерный-то причем, необходимо же в многомерном найти. Можно прыгать и при помощи foreach, ток вот кода туева хуча наполучается. А тут боле-менее компактненько.
А насчет сравнения двух строк "Мама мыла раму" и "Мама раму мыла", подумал, что необходимо будет использование функции array_diff(), сравниваем 2 массива ("A" и "B") и по результатам сравнения создаем 3й массив ("С") в котором будут те элементы массива "В" не найденные в массиве "А":
Пляски с бубном: 1. бьем искомую фразу по пробелам, удаляем окончания 2. помещаем обработанную фразу в массив 3. помещаем архив мильена фраз и словосочетаний, среди которых бум искать в красивый массив, по одному 4. начинаем сравнивать искомую, что в массиве и каждый элемент массива архивных данных разделенный также по пробелам и с убранными окончаниями и представленный временным массивом 5. получаем массив "C" разницы от искомого и элемента архива 6. если сount($С)>0, то все прошло славно ![]() , как вам подобная реализация. Я понимаю, что ресурсоемко и грузно... но релевантность применима к SQL нежели простым файлам. не индексировать же мне данные базы. Да и не знаю каким образом подсчитывать число вхождений того или иного слова. База представлена в файле, в таком виде:
, если кому интересно... хотя я полагаю, что никому :( |
||||
|
|||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
какой пример дали, в таком и ищем. когда будет "многомерный" - тогда и будем о нем говорить. для того, чтобы найти только первое вхождение тут кода раз в 5 больше, чем нужно. при этом очень странная организация словаря по которому ищем. зачем было делать двумерный массив, когда по одномерному поиск был бы в сто раз быстрее. |
|||
|
||||
Zmiuko |
|
||||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
![]() ![]()
Ага... можт еще 5 страниц флуда здесь расписать? ![]() Йоперный балет! Какая, нахрен, разница какой код, какой пример... лишь бы показывало к чему это все. Пять раз обьяснял: ищу строку! Одна есть! Других - полный мешок! ..Спрашивал - как же мне, дураку, эту строку в массиве-то найти, несмотря на его многомерность! Да так найти чтобы несмотря на сумму слов в искомой строке (релевантность или как ее еще там, етиху... называют) . ДАБЫ ЧТОБЫ В БАЗЕ СМЫСЛОВЫХ ПОВТОРОВ НЕ БЫЛО! Опять не то?... Опять не понятно?.. Вопрос был в том как лучше это реализовать. Суть в том! Есть ФАЙЛ с базой! Данные в нем... Да-да! Двумерный массив!.. Почему двумерный... не приставай.. пущай трех.. четырехмерный будет.. Вооот! ![]() Эта база - база бота, допустим... Задаем боту вопрос... "Сколько тебе лет?" Вопрос идентичен вопросу "Сколько лет тебе?". Да, разные там суммы слов, но это и балбесу известно.. смысловая нагрузка верна! Вооот! ![]() В базе двумерный массив, как я уже говорил:
![]() Так вооот! ![]() Вот как мне найти среди базы, очевидно, что это первый столбец, строку "Сколько тебе лет?" , дабы вернуть пользователю ответ "Осьмнадцать" несмотря на очередность или как там... сумму слов в строке. Вот затеялся мне этот бот. Развожу рукаме. ![]() |
||||
|
|||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
я, честно говоря, не понял, как массив
относится к
в первом вместо вопросов просто цифры. |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Просто предложил для примера. Не суть какой массив. Суть применить поиск к нему.
Извини, просто я как раз сейчас работаю с ним. Вот и меняю как ураган.
Все думал какой же базу сделать. Сделал вот Вопрос-Ответ... Тупой бот получается ![]() ![]() ![]() |
|||
|
||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Zmiuko,
Почитай историю о том, как программисты штурмовали шахматы. Просто увеличь объем базы. И, даже с тупой логикой в 10ть строчек, бот у тебя будет вести весьма интеллектуальные беседы. |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
а можно ссылку? |
|||
|
||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Увы. Сам я с этим знакомился еще когда занимался шахматами ![]() могу кстати похвастаться тем, что лично проигрывал сопливому будущему чемпиону мира ![]() Может гугл что-то даст ![]() Из того что мне помнится - базовые алгоритмы были разработаны еще во времена Ботвинника(он кстати был неплохим математиком, хотя докторскую вроде по чему-то еще защищал) и во многом при его участии. Дальше вступили в дело мощности. И, если я правильно помню, то вплоть до 2000го года победы машин(тех же Deep XXX) над гроссмейстерами были за счет заточки экспертных систем на игру конкретного человека. Сейчас просто бьют массой и глубиной перебора. Мур сделал свое черное дело ![]() |
|||
|
||||
BlackRu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 431 Регистрация: 14.9.2009 Репутация: нет Всего: 4 |
Да, интересная задача. Рекомендую автору полистать литературу на тему отличий естественного языка и искусственного, ознакомиться с работами по общему языкознанию, особенно по теме типы языков: аналитические - синтетические, не пропустить главу парадигматические отношения в лексике. Особенности синтаксиса русского языка тоже придется учесть, они потрясающе кратко изложены на 1500 страницах в учебнике Белошапковой, блестящим научным языком, от которого даже у маститых лингвистов зубы сводит.
Последние работы по психолингвистике тоже придется почитать, иначе не все понятно будет. Но дело эти не ограничится, так как русский язык имеет большую историю, то тем "Васей", который будет осуществлять поисковый запрос может оказаться вовсе не "Вася", а православная набожная бабушка-старушка, которая будет искать "Отче наш" на церковнославянском языке, не приведи господь, ей описАться. В общем манов придется порядком покурить - особенно на тему язык и мышление - если уж задача так глобальна. -------------------- Удалена администрацией форума |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |