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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм нахождения ревалентности данной строки. 
:(
    Опции темы
theworldcreator
Дата 19.9.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Название как то запутанно написал...
Суть вопроса вот в чем: какой на ваш взгляд лучшей способ определения релевантности строки/куска текста для поисковых результатов. Сейчас использую такую систему(мною рассматриваются несколько алгоритмов поиска для разных типов данных. В примере таблица состоящая из id, имени, описания и еще кое какой информации о файлах. Ну проги там всякие)
Поисковая строка разбивается на два массива - слова, и те же слова, но с отрезанными окончаниями.
Затем ведется несколько отдельных поисков:
первый, это нахождение хотя бы одного/всех(зависит от логики - OR AND)слов из поисковой строки в имени файла. Затем результаты сортируются присвоением чего то вроде степени релевантность(сумма кол-ва вхождений каждого слова в данную строку).
Второй все тоже самое, только для описания файла.
Третий и четвертый такие же как первые два, только для слов без окончаний.

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




Знаю объяснил ужасно, по этому покажу на примере:
Код

$search_string="программа для закачивания файлов";
$words=explode(" ", $search_string);
$short_words=get_short_words($words);
//short_words[0]="программ"
//short_words[1]="закачиван"
//short_words[2]="файлов"
$sql1="SELECT * FROM programmes WHERE name LIKE '%программа%' OR name LIKE '%закачивания%' OR name LIKE '%файлов%'";
$sql2="SELECT * FROM programmes WHERE descr LIKE '%программа%' OR descr LIKE '%закачивания%' OR descr LIKE '%файлов%'";
$sql3="SELECT * FROM programmes WHERE name LIKE '%программ%' OR name LIKE '%закачиван%' OR name LIKE '%файлов%'";
$sql4="SELECT * FROM programmes WHERE descr LIKE '%программ%' OR descr LIKE '%закачиван%' OR descr LIKE '%файлов%'";


...............


while($row=mysqli_fetch_array($query)){
$entries_quantity=0;
foreach($words as $word){
$entries_quantity+=substr_count(strtolower($row['name']), strtolower($word));
}
foreach($row as $key=>$val){
$return[$key][]=$row[$key];}
$return['totals'][]=$entries_quantity;
}
arsort($return['totals']);

..............................................




Ну и вывод результатов

Жду ваших мнений.


Это сообщение отредактировал(а) theworldcreator - 22.9.2007, 21:53
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 20.9.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



theworldcreator, а зачем так делать? Не проще ли использовать FULLTEXT поиск с включенным логическим режимом?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
theworldcreator
Дата 20.9.2007, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А русский потянет? Ну там замена окончаний... И кто не будь знает, какой способ определения релевантности использовался в FULLTEXT

Добавлено @ 06:31
Блин. Извините, название темы с ошибкой написал. А как исправить не знаю..

Это сообщение отредактировал(а) theworldcreator - 20.9.2007, 13:51
PM MAIL WWW ICQ   Вверх
Всемогущий
Дата 21.9.2007, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://www.mysql.ru/docs/man/Fulltext_Search.html

Добавлено через 1 минуту и 33 секунды
MATCH (title,body) возвращает значение релевантности


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
theworldcreator
Дата 21.9.2007, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо. Попробую. Думаю если FULLTEXT не будет отрезать окончания у русских слов, воспользоваиться моей функцией, а потом добавлять в конце слова без окончания '*'. Может быть даже подберу какой нибудь коэффициент, на который релевантность умножается(меньше одного, разумеется) при поиске без окончаний. А потом все в один массив, и сортировка внутренними функциями php. Или все в один запрос, а перед словами без окончаний еще знак <. Вообщем буду эксперементировать. 
Еще раз спасибо.
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 22.9.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



С русскими у FULLTEXT-а все в порядке, если кодировка базы правильная и COLLATION на полях.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
theworldcreator
Дата 22.9.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MySql выдает ошибку - #1214 - The used table type doesn't support FULLTEXT indexes
Поискал в инете, везде говорят используйте MyISAM. Вопрос - как его использовать, и в чем его отличия от InnoDB? 
P.S. Умные слова InnoDB и MyISAM узнал впервые после поиска по этой ошибке, сегодня. До этого даже не знал что в MySql можно разные типы баз ставить.  До сих пор ничего про них толком не знаю, так что буду признателен за информацию/ссылку на нее.

Добавлено через 1 минуту и 35 секунд
И еще, какая кодировка правильная? Unicode? Извините за дуратские вопросы
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 22.9.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Цитата(theworldcreator @  22.9.2007,  13:21 Найти цитируемый пост)
The used table type doesn't support FULLTEXT indexes

FULLTEXT индекс держит только MyISAM насколько я помню.
Цитата(theworldcreator @  22.9.2007,  13:21 Найти цитируемый пост)
Вопрос - как его использовать, и в чем его отличия от InnoDB? 

Есть некоторые различия в поддержке индексов и транзакций. Если важна скорость на выборку, тогда MyISAM, если на вставку и обновления тогда InnoDB.
Цитата(theworldcreator @  22.9.2007,  13:21 Найти цитируемый пост)
так что буду признателен за информацию/ссылку на нее.

http://dev.mysql.com
Цитата(theworldcreator @  22.9.2007,  13:21 Найти цитируемый пост)
И еще, какая кодировка правильная?

Все кодировки правильные, если с ними правильно работать.



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
theworldcreator
Дата 23.9.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В таблицу с информацией по файлам данные буду заносить я лично, поэтому отсутствие транзакций по идеи не смертельно.
А что значит работать с кодировками правильно?
P.S. За информацию большое спасибо.

Это сообщение отредактировал(а) theworldcreator - 23.9.2007, 11:28
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 24.9.2007, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Цитата(theworldcreator @  23.9.2007,  10:07 Найти цитируемый пост)
А что значит работать с кодировками правильно?

Создавать базу в нужной тебе кодировке, незабывать выставлять правильные COLLATION-ы на поля ну и все такое.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
theworldcreator
Дата 25.9.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как  узнать, какая мне нужна кодировка?
Как мне сказали, COLLATION - это способность бд задавать разные кодировки, разным столбцам одной таблицы. Здесь нужны какие-то разные кодировки? 
PM MAIL WWW ICQ   Вверх
theworldcreator
Дата 28.9.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я тут поискал по форуму. Че то все советуют для сайтов php использовать свои алгоритмы, основные на LIKE. И доводы приводят весьма убедительные... Так какое мнение большинства - что лучше использовать(и если LIKE, то как? Читай первый пост)?
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1259 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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