форум вебмастероff на AlfaSpace.NET

Ubuntu и Linux |реактивный бесплатный хостинг | Киноклуб. ВСЁ БЕСПЛАТНО!
база знаний хостинга | правила форума

  Начало ° Ответить ° Статистика ° Опрос ° Регистрация ° Поиск ° FAQ °
Форум вебмастеров на AlfaSpace.NET / Болтовня / Задача на сообразительность
Автор Сообщение
Serg
Участник

1812
# Дата: 5 Ноя 2007 22:02


Такая задачка.
Есть таблица базы данных с ключевыми словами либо фразами, состоящими из скольки угодно слов.
Есть словосочетание (в дальнейшем "сл-ние").
Нужно найти совпадения ключевых слов или фраз в сл-нии. Каждый кей из базы сравнивать со сл-нием - ресурсоемко, разбивать сл-ние на отдельные слова, программно обрезать окончания и сравнимать с ключевыми словами - тема. НО! как в таком случае быть с ключевыми фразами?
На примере:
сл-ние "вчера мы жарили шашлыки на мангале". разбиваем на слова и осуществляем поиск по каждому из них в базе.
В базе есть ключ. фраза например "насрал в мангал".
когда очередь доходит до слова "мангале", после морфологического преобразования получаем "мангал".
Производим поиск по слову "мангал", тут-то наша фраза "насрал в мангал" и подойдет. А не должна, потому как условие "Нужно найти совпадения ключевых слов или фраз в сл-нии", а не наоборот. То есть сл-ние "вчера мы жарили шашлыки на мангале" не должно находить "насрал в мангал". Вот если "вчера мы жарили шашлыки на мангале, а потом я в него насрал" - было бы другое дело и тогда должно находить. Но как так сделать?
Идею грамотной реализации готов оплатить. 30 баксов.

Borman
Участник

1040
# Дата: 6 Ноя 2007 01:46


Яндекс пишем? Я как-то писал поиск в базе. Вот скрипт:

 
#!/usr/local/bin/php 
<?php 
if(isset($PATH_INFO)) 
{ 
    $script=$PATH_INFO; 
} 
else 
{ 
    $script=$SCRIPT_NAME; 
} 
$pg = $script; 
$log  = "counter/logs/visits.log"; 
include ("counter/loger.php"); 
?> 
<HTML> 
<HEAD> 
<TITLE> 
RussianStorehouse.com 
</TITLE> 
<META http-equiv=Content-Type content="text/html; charset=windows-1252"> 
<style> 
H1 { 
    FONT: 12px Tahoma 
} 
H2 { 
    FONT: bold 23px "Times New Roman"; COLOR: #800000 
} 
</style> 
</HEAD> 
<BODY leftMargin=0 topMargin=0 background="../images/fon2.gif"> 
<TABLE cellSpacing=0 cellPadding=0 width="780" border=0> 
<TBODY> 
<TR> 
<TD width="776"> 
<p align="center"> <a href="index.php" target="_blank"><img border="0" src="imag 
es/logoj2.gif" width="800" height="101" alt="Home"></a> </TD> <TD width="4">&nbsp;</TD></TR></TBODY></TABLE> <center> <?php $host=''; $login='***'; $password='***'; $db='***'; $tbl="***"; $link=mysql_connect($host,$login,$password); mysql_select_db($db,$link); if(!$kwd) { echo "<font size=+2 color=\"#ff0000\">Key Word Error!</font>"; exit; } $kwd = strtolower($kwd); $kwd = trim($kwd); $kwd = strtr($kwd, ",", " "); $in_arr = explode(" ", $kwd); $in_arr = array_filter($in_arr); $in_arr = array_unique($in_arr); $query = "SELECT * FROM $tbl"; $result = mysql_query($query,$link); $sid_cnt = 0; while ($arr = mysql_fetch_array($result)) { $sid_ = $arr['sid']; $dir_ = $arr['dir']; $groups_ = $arr['groups']; $names_ = $arr['names']; $wkeys_ = $arr['wkeys']; $descriptions_ = $arr['descriptions']; $costs_ = $arr['costs']; $transfers_ = $arr['transfers']; $arr_words = explode(" ", $wkeys_); $arr_words = array_filter($arr_words); $arr_words = array_unique($arr_words); $search_arr = array_diff($arr_words, $in_arr); $search_arr = array_diff($arr_words, $search_arr); if (count($search_arr) != 0) { $search_sid[$sid_cnt] = $sid_; $search_dir[$sid_cnt] = $dir_; $search_groups[$sid_cnt] = $groups_; $search_names[$sid_cnt] = $names_; $search_wkeys[$sid_cnt] = $wkeys_; $search_descriptions[$sid_cnt] = $descriptions_; $search_costs[$sid_cnt] = $costs_; $search_transfers[$sid_cnt] = $transfers_; $sid_cnt++; } } if (count($search_sid) == 0) { echo "<font size=+2 color=\"#ff0000\">Not Found!</font>"; } else { echo "<font size=+2 color=\"#0000ff\">Found ".count($search_sid)." results:<
/font><br><br>"; $limit_n = 0; $beg_lim = 0; $num_lim = floor(($sid_cnt + 1) / 20); $num_lim_ = ceil(($sid_cnt + 1) / 20); if (!$limit or $limit < 0 or $limit >= ($sid_cnt + 1)) { $limit = 0; } while ($num_lim >= $beg_lim) { $lim_out = $beg_lim + 1; if ($beg_lim != $num_lim_) { if ($lim_out != (ceil($limit / 20) + 1)) { echo "<font size=+1><a href=\"$src?limit=$limit_n&grp=$grp&kwd=$
kwd&submit=$submit\">[$lim_out]</a>&nbsp;</font>"; } else { echo "<font size=+1>[$lim_out]&nbsp;</font>"; } } $beg_lim ++; $limit_n = $limit_n + 20; } echo "<br><br>"; $sid_cnt = $limit; $sid_snt_end = $limit + 20; $num_cnt = $limit + 1; echo "<table border=0 width=600 bgcolor=\"#ffffff\" cellpadding=2 cellspacin
g=2>"; while ($sid_cnt < $sid_snt_end and $sid_cnt < count($search_sid)) { $path_to_im = "fotos/".$search_groups[$sid_cnt]."/".$search_dir[$sid_cnt
]."/im1.jpg"; echo "<tr><td>"; echo "<img src=\"shop/resize.php?path_to_im=$path_to_im&max_size=200\" b
order=1>"; echo "</td><td align=\"center\" valign=\"top\" background=\"images/fon2.
gif\">"; echo "<font color=\"#000080\"><b>".$search_names[$sid_cnt]."</b></font><
br><br>"; echo "<font size=+1 color=\"#000080\"><b>Price: ".$search_costs[$sid_cnt
]."</b></font><br>"; echo "<a href=\"shop/More.php?sid=".$search_sid[$sid_cnt]."\" target=\"_
top\">"; echo "<font size=+2 color=\"CC0000\"><b>More...</b></font>"; echo "</a><br><br>"; echo "</td></tr>"; $sid_cnt++; $num_cnt++; } echo "</table><br><br>"; } mysql_close($link); ?> </body>



Но, там таких нюансов не было предусмотрено, конечно.

Serg
Участник

1812
# Дата: 6 Ноя 2007 06:54


» Borman
Яндекс пишем?

Бери выше
» Borman
Я как-то писал поиск в базе. Вот скрипт:
...
Но, там таких нюансов не было предусмотрено, конечно.

Проблем с написанием поиска по базе у нас нет, проблема в создании алгоритма, учитывающего как раз эти нюансы. Такшто приведенный скрипт бесполезен.

Borman
Участник

1040
# Дата: 6 Ноя 2007 12:08


» Serg
Такшто приведенный скрипт бесполезен.

Может кому и это пригодится.

digs
Участник

364
# Дата: 6 Ноя 2007 19:29


Заводишь таблицу, в которую помещаешь все одиночные слова.
Первый столбец слово, прошедшее морфопреобразование (для слова "мангалы" сюда кладешь "мангал")
Второе поле, ID-слова.

ВО второй таблице два три поля:
1. словосочетание
2. ID-первого слова (его морфопреобразования)
3. ID-второго слова

Ну а дальше все просто. Получаешь фразу, бьешь на слова.
Для каждого слова получаешь по первой таблице код (в итоге например: code1, code2, code3)
для второй таблицы делаешь условие

where (ID1 in (code1,code2,code3)) and (ID2 in (code1,code2,code3));

maxtat
pda killer

1472
# Дата: 9 Ноя 2007 17:28


Borman
А твой скрипт какие нюансы предусматривает? А то я себе написал чисто самый простой поиск "чтоб было", так он только стопроцентное совпадение ищет...

niko
Участник

293
# Дата: 10 Ноя 2007 08:14


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

Borman
Участник

1040
# Дата: 10 Ноя 2007 08:39 ° Поправил: Borman


Мой скрипт ищет слова целиком. Там не было задачи поиска по части слова. Это интернет - магазин. В основном продажи старых фотиков. Там ключевыми словами являются: "Fed", "Zorki", "Zenit", "35 mm camera" и т.д.

WarGot
Per aspera ad astra

1948
# Дата: 10 Ноя 2007 22:04


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

2 all
А ещё кто скриптами поиска по бд не поделиться. Надо как раз таки под магазин.

Serg
Участник

1812
# Дата: 11 Ноя 2007 16:11


digs
На данный момент мы нашли способ логичнее. Еще думаем прикрутить хеширование и тогда скорость поиска увеличится многократно. Спасибо, твой вариант хорош, но есть способы лучше.
» WarGot
А ещё кто скриптами поиска по бд не поделиться. Надо как раз таки под магазин.

Не наглей Создай отдельную тему.

SpiriTzzz
Темный джедай

1382
# Дата: 11 Ноя 2007 17:56


WarGot наглец! я все заказчику расскажу ))) За что тебе деньги платят? Негодник ))

Ваш ответ

Quote  Bold Style  Italic Style  Underlined Style  URL Link  Email Link  Script AutoTab  Preformatted Text  Отменить *Что это?
... Запретить смайлы


Перед отправкой "нелатинского" текста проверьте кодировку броузера!
 » Логин  » Пароль 
 
Powered by miniBB forum software © 2001-2008
Powered by miniBB-gzipper. Original size:35948, gzipped size:11242

Mp3 Download || Webs Studio™ || Song's Lyrics
eXTReMe Tracker Rambler's Top100 Рейтинг@Mail.ru Форум ТвойWeb [Valid RSS]