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

Поиск:

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


Эксперт
****


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

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



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

Цитата(Zmiuko @  20.10.2009,  14:07 Найти цитируемый пост)
Очевидно вы не поняли суть проблемы и цели реализации.

Разумеется. Поскольку никто не потрудился их нам рассказать

Цитата(Zmiuko @  20.10.2009,  14:07 Найти цитируемый пост)
Я пытался при помощи стреммера Поттера, поместив искомую фразу в массив, обработав каждое слово в ней и выделив корень русского языка.

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

в общем, в итоге, вместо того, чтобы сократить, как я настоятельно рекомендовал, область поиска, вы ее расширяете. Вместо того, чтобы осилить хотя бы полнотекстовый поиск, вы одновременно хотите еще и поиск с учетом словоформ. Ну что ж. Желаю удачи smile
PM MAIL   Вверх
Ипатьев
Дата 20.10.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Zmiuko @  20.10.2009,  14:07 Найти цитируемый пост)
Поможете? 

Понимаете какое дело.
Практическая задача решается очень просто. Но это решение упирается в гордое "Мускул не использую".
Заниматься же теоретическими изысканиями на пустом месте как-то не хочется. 

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


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


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

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



Цитата(Ипатьев @  20.10.2009,  13:58 Найти цитируемый пост)
skyboy, я так понял, что этот молодой человек хочет полнотекстовый поиск с ранжированием результатов по релевантности. 

угу. я понял. хоть и не сразу.
предлагаю искать не "фразу" с использованием регулярных выражений, а каждой слово из поискового запроса в отдельности. Потом считать, сколько слов из поискового запроса было обнаружено в каждом блоке текста. Затем сортировать по количеству найденных в блоке слов из поискового запроса. Грубо говоря(без учета того, что в поисковом запросе могут быть слова с разной смысловой нагрузкой - местоимения и предлоги или прилагательные с узкоспециализированными терминами) чем больше слов из поискового запроса найдено в одном блоке, тем блок выше в общем зачете.
Когда сделаешь это, офигеешь от низкой скорости, то посмотри в сторону встроенного в mysql механизма полнотекстового поиска. Или sphinx. Или не смотри.
PM MAIL   Вверх
youri
Дата 21.10.2009, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Zmiuko @  20.10.2009,  14:07 Найти цитируемый пост)
Цель: найти максимально точную морфологически и численно по колличеству слов фразу!

тебя спрашивают не про проблемы, с которыми ты столкнулся, а что ты пишешь? Поисковик? Чат? Гостевую книгу? Или просто один консольный php-файл, который в массиве слова ищет?

Цитата(Zmiuko @  20.10.2009,  14:07 Найти цитируемый пост)
Поможете?

ну покопайся в исходниках phpMorphy или mysql, или sphinx smile
PM   Вверх
Zmiuko
Дата 23.10.2009, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



AI пишу, если устроит.  smile Пытаюсь воспроизвести человеческое мышление. Ассоциативный подход и все такое. "Земля имеет форму шара" => "Шар круглый" => "Земля круглая" как видите искомые слова имеют разную форму так что проект все усложняется, усложняется и усложняется..

Добавлено через 53 секунды
Мы же, пардон, к несчастью - русские )))) вот и язык нам достался 40 тысяч слов + сленга в 10 раз еще больше...

Добавлено через 3 минуты и 9 секунд
Насчет phpMorphy ))) я ж казал что использую стреммер.. отсюда уже понятно что я изучал скрипты и phpMorphy и sphinx Гора полезнейшего материала, но не поможет эта гора моей проблеме.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 23.10.2009, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Может, сначала знаний поднабраться?
Как-то, судя по приведенному коду, не особо вяжутся амбиции и используемый инструментарий. Это даже если говорить о проблеме поиска "в лоб". А "ассоциативный подход" требует несколько более мощного математического аппарата, чем поиск пересечения двух множеств, даже с которым вам справиться не удалось.


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


http://zmiuko.ru
**


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

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



smile Я подумаю на Вашим предложением

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

Допустим есть многомерный массив:

Код

/*представлю его в приписке значения к переменной*/

$array = array(
'0' => array('132' => 'Яблоко', 'Дерево' => 'Лиственница'),
'1' => array('автомобиль' => 'Опель', 'трамвай' => 'древний', 'скупой'=> 'математик'),
'2' => array('волшебный' => 'коршун')
и так далее...
);


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

Подскажите функцию которая производит поиск либо значения, либо ключа и возвращает 'ключ'=>'значение' 

В интернете находил, но вот сейчас утеряна. Извините за настойчивость.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 24.10.2009, 16:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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


http://zmiuko.ru
**


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

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



smile 

Код

function multi_array_search($search_value, $the_array)
{
    if (is_array($the_array))
    {
        foreach ($the_array as $key => $value)
        {
            $result = multi_array_search($search_value, $value);
            if (is_array($result))
            {
                $return = $result;
                array_unshift($return, $key);
                return $return;
            }
            elseif ($result == true)
            {
                $return[] = $key;
                return $return;
            }
        }
        return false;
    }
    else
    {
        if ($search_value == $the_array)
        {
            return true;
        }
        else return false;
    }
}


...держи... вдруг до победного будешь foreach наяривать  smile  smile  smile 

p.S: Ах, да... Функция массив возвращает... буть готов  smile

Добавлено через 33 секунды
Шутю канечн...  smile 
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 24.10.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ба. Рекурсия. Да-а, без нее, конечно в двумерном массиве ничего не найти. 
PM MAIL   Вверх
Ипатьев
Дата 24.10.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Zmiuko @  24.10.2009,  21:17 Найти цитируемый пост)
p.S: Ах, да... Функция массив возвращает... буть готов  

ничего, я переживу. 
тем более, что массивчик небольшой получается. совсем крохотный.
PM MAIL   Вверх
Zmiuko
Дата 24.10.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



Да двумерный-то причем, необходимо же в многомерном найти. Можно прыгать и при помощи foreach, ток вот кода туева хуча наполучается. А тут боле-менее компактненько.

А насчет сравнения двух строк "Мама мыла раму" и "Мама раму мыла", подумал, что необходимо будет использование функции array_diff(), сравниваем 2 массива ("A" и "B") и по результатам сравнения создаем 3й массив ("С") в котором будут те элементы массива "В" не найденные в массиве "А":

Код

$c = array_diff($b, $a);


Пляски с бубном: 
1. бьем искомую фразу по пробелам, удаляем окончания
2. помещаем обработанную фразу в массив
3. помещаем архив мильена фраз и словосочетаний, среди которых бум искать в красивый массив, по одному
4. начинаем сравнивать искомую, что в массиве и каждый элемент массива архивных данных разделенный также по пробелам и с убранными окончаниями и представленный временным массивом
5. получаем массив "C" разницы от искомого и элемента архива
6. если сount($С)>0, то все прошло славно smile

, как вам подобная реализация. Я понимаю, что ресурсоемко и грузно... но релевантность применима к SQL нежели простым файлам. не индексировать же мне данные базы. Да и не знаю каким образом подсчитывать число вхождений того или иного слова.
База представлена в файле, в таком виде:
Код

-привет-<>Привет<>-чем--занима-<>Чем занимаешься?<><>
-ничем-<>Да ничем :)<><><><>
... и т.д.


, если кому интересно... хотя я полагаю, что никому :(

PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 24.10.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Zmiuko @  24.10.2009,  23:28 Найти цитируемый пост)
необходимо же в многомерном найти

какой пример дали, в таком и ищем.
когда будет "многомерный" - тогда и будем о нем говорить.

Цитата(Zmiuko @  24.10.2009,  23:28 Найти цитируемый пост)
А тут боле-менее компактненько.

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

при этом очень странная организация словаря по которому ищем. зачем было делать двумерный массив, когда по одномерному поиск был бы в сто раз быстрее.
PM MAIL   Вверх
Zmiuko
  Дата 25.10.2009, 00:07 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


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

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



 smile блин.. интересно, сорри за флуд, ты всем так тягу к программированию отбиваешь? ..."непонятно... вообще не понятно... нет цели..." еще напишешь скора - "ПИШИ, цук, РАЗБОРЧИВЕЙ"  smile 
Цитата(Ипатьев @  24.10.2009,  23:42 Найти цитируемый пост)
какой пример дали, в таком и ищем.
когда будет "многомерный" - тогда и будем о нем говорить.


Ага... можт еще 5 страниц флуда здесь расписать?  smile 

Йоперный балет! Какая, нахрен, разница какой код, какой пример... лишь бы показывало к чему это все. Пять раз обьяснял: ищу строку! Одна есть! Других - полный мешок! ..Спрашивал - как же мне, дураку, эту строку в массиве-то найти, несмотря на его многомерность! Да так найти чтобы несмотря на сумму слов в искомой строке (релевантность или как ее еще там, етиху... называют) . ДАБЫ ЧТОБЫ В БАЗЕ СМЫСЛОВЫХ ПОВТОРОВ НЕ БЫЛО! Опять не то?... Опять не понятно?.. Вопрос был в том как лучше это реализовать.

Суть в том! Есть ФАЙЛ с базой! Данные в нем... Да-да! Двумерный массив!.. Почему двумерный... не приставай.. пущай трех.. четырехмерный  будет.. 

Вооот! smile 

Эта база - база бота, допустим... Задаем боту вопрос... "Сколько тебе лет?" Вопрос идентичен вопросу "Сколько лет тебе?". Да, разные там суммы слов, но это и балбесу известно.. смысловая нагрузка верна! 

Вооот! smile 

В базе двумерный массив, как я уже говорил:
Код

"Вопрос?"<>"Ответ!"<>
"Вопрос?"<>"Ответ!"<>
Cколько тебе лет?<>Осьмнадцать<>
...
 smile 

Так вооот! smile 

Вот как мне найти среди базы, очевидно, что это первый столбец, строку "Сколько тебе лет?" , дабы вернуть пользователю ответ "Осьмнадцать" несмотря на очередность или как там... сумму слов в строке.

Вот затеялся мне этот бот. Развожу рукаме.  smile 
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 25.10.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



я, честно говоря, не понял, как массив
Цитата(Zmiuko @  24.10.2009,  16:16 Найти цитируемый пост)
$array = array(
'0' => array('132' => 'Яблоко', 'Дерево' => 'Лиственница'),
'1' => array('автомобиль' => 'Опель', 'трамвай' => 'древний', 'скупой'=> 'математик'),
'2' => array('волшебный' => 'коршун')
и так далее...
);

относится к 
Цитата(Zmiuko @  25.10.2009,  00:07 Найти цитируемый пост)
"Вопрос?"<>"Ответ!"<>
"Вопрос?"<>"Ответ!"<>
Cколько тебе лет?<>Осьмнадцать<>

в первом вместо вопросов просто цифры.
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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