![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
я, честно говоря, не понял, как массив
относится к
в первом вместо вопросов просто цифры. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |