|
|
|
| Вот такая вот задача. Я вожу слово "участие" на поиск. Как мне сделать так, чтобы "ие" на конце убралось? В том числе и:
(у|ы|а|о|я|е|и) и (ие|ия|ем|им|ию|ий|ии|ой|ов|ам|их|ый|ых|ая|ай|ае|ую). Код моего поисковика (где вкляпать фильтр?):
<?
include("conf/conf.php");
include("design/site_guest-1.tpl");?>
<table cellpadding=0 cellspacing=0 border=0 width=100%>
<tr>
<td height=50 width=20
style="border-bottom: rgb(51,51,51) 1pt solid"> </td>
<td height=50 width=300
style="border-bottom: rgb(51,51,51) 1pt solid">
<img src="images/result.gif"></td>
<td height=50 width=83><img src="images/a3.gif"></td>
<td> </td></tr></table><br><?
global $action, $search, $dir, $logic, $page;
if($action=="search")
{
if($search=="" or strlen($search)<3)
{
print "<div align=center>Запросы меньше 3 символов не обрабатываются</div>";
}
else
{
if($dir=="0")
{
print "<div align=center>"._NOSEARCH2_."</div>";
}
else
{
switch($dir)
{
case "news":
$table="ks_news";
$pole="arch_news";
$by="daten";
$sort="desc";
break;
}
switch($logic)
{
case 1:
$lgics="AND";
break;
default:
$lgics="OR";
}
$search=substr($search, 0, 64);
$search=preg_replace("/[^\w\x7F-\xFF\s]/", " ", $search);
$good=trim(preg_replace("/\s(\S{1,2})\s/", " ", ereg_replace(" +", " "," $search ")));
$good=ereg_replace(" +", " ", $good);
if(($logic!="1") && ($logic!="2"))
{
$logic="2";
}
switch($logic)
{
case "2":
$word=explode(" ",$search);
while(list($k, $v) = each($word))
{
if(strlen($v)>2)
{
$result=mysql_query("select id from $table where $pole like '%$v%'");
$vva=mysql_numrows($result);
$stat[]="<b>$v</b>. Всего найдено: $vva<br>";
}
}
$word_stats="<span class=new> Вы искали: ";
$word_stats.=implode("", $stat). "</span><br>";
unset($stat);
break;
case "1":
$sql_stats="select id from $table where $pole like '%". str_replace(" ", "%' and $pole like '%", $good). "%'";
$colsearchand=mysql_numrows(mysql_query($sql_stats));
$word_stats="<span class=new> Вы искали: ";
$word_stats.=":<br><b>$search:</b>Найдено: $colsearchand</span>";
break;
}
print "$word_stats";
$sql_sq="select * from $table where $pole like '%". str_replace(" ", "%' $lgics $pole like '%", $good). "%'";
$nub=mysql_num_rows(mysql_query($sql_sq));
$pages=ceil(mysql_num_rows(mysql_query($sql_sq))/10);
if($page=="" or $page=="0")
{
$list="0";
}
else
{
$list=($page-1)*10;
}
$sql_sq.=" order by $by $sort ";
$sql_sq.="limit $list, 10";
$sql_sqls=mysql_query($sql_sq);
print "<center><span class=date>";
if($nub>10)
{
if(!isset($page))
{
$page="1";
}
print "Страницы: ";
for($i=1;$i<=$pages;$i++)
{
if($i != $page)
{
print ' <a href="search.php?action=search&logic='.$logic.'&dir='.$dir.'&page='.$i.'&search='.urlencode($search).'">'.$i.'</a>';
}
else
{
print ' <b>'.$i. '</b>';
}
}
}
print "</span></center><br>";
while($row=mysql_fetch_array($sql_sqls))
{
if(ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$row['daten'],$reg))
{
$persearch1="<a href=index.php?sec=news&file=archive&year=$reg[1]&month=$reg[2]";
$reg[2]=eregi_replace("01",января,$reg[2]);
$reg[2]=eregi_replace("02",февраля,$reg[2]);
$reg[2]=eregi_replace("03",марта,$reg[2]);
$reg[2]=eregi_replace("04",апреля,$reg[2]);
$reg[2]=eregi_replace("05",мая,$reg[2]);
$reg[2]=eregi_replace("06",июня,$reg[2]);
$reg[2]=eregi_replace("07",июля,$reg[2]);
$reg[2]=eregi_replace("08",августа,$reg[2]);
$reg[2]=eregi_replace("09",сентября,$reg[2]);
$reg[2]=eregi_replace("10",октября,$reg[2]);
$reg[2]=eregi_replace("11",ноября,$reg[2]);
$reg[2]=eregi_replace("12",декабря,$reg[2]);
if(bcdiv($reg[3],10)==0)
{
$reg[3]=eregi_replace("0","",$reg[3]);
}
}
$persearch1.=" target=_blank>";
$persearch1.=$row['title'];
$persearch1.="</a> (добавлена: $reg[3] $reg[2] $reg[1] года)";
$persearch3=$row['news'];
$persearch3=eregi_replace("$search","<font color=red><b>$search</b></font>",$persearch3);?>
<table cellpadding=5 cellspacing=0 width=100% border=0>
<tr>
<td><li><?print "<p align=justify><span class=new><b>$persearch1</b></span></p>";?></td>
</tr>
<tr>
<td><?print "<span class=textosn>$persearch3</span>";?></td>
</tr>
</table><hr size=1 width=80% color=#000000><?
}
}
}
}
else
{
print "<center><span class=date>Запроса на поиск не поступало</span></center>";
}
include("design/site_guest-2.tpl");
?>
|
Сюда же: как мне сделать так, чтобы вырезались любые тэги? чтобы отображался один текст без картинок и без <>?
И напоследок: как мне сделать так, чтобы отображалось лишь ближайшие слова, находящиес рядос с найденным (как енто делают поисковики обычно, выдают не всё, а лишь то, что нужно, а не полный документ).
PS: структура таблицы ks_news
id daten title news arch_news
Извените, не туда вкляпал тему... хотел в PHP.
[модератор: прикрепите код к своему сообщению в виде файла - в такой форме работать с темой невозможно] | |
|
|
|
|
|
|
|
для: BAHO
(27.01.2005 в 16:35)
| | меня проигнорировали? | |
|
|
|
|
|
|
|
для: BAHO
(05.02.2005 в 19:01)
| | Хм... да как-то забыли все про тему.
1) Убрать окончания можно следующим образом
<?php
$patern = "#^([\d]+)(у|ы|а|о|я|е|и|ие|ия|ем|им|ию|ий|ии|ой|ов|ам|их|ый|ых|ая|ай|ае|ую)$#i";
preg_match($patern, $search, $out);
$search = $out[2];
?>
|
2) Вырезать все HTML-тэги можно при помощи скрипта, описание которого приводится по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1562 | |
|
|
|
|
|
|
|
для: cheops
(05.02.2005 в 23:11)
| | И напоследок: как мне сделать так, чтобы отображалось лишь ближайшие слова, находящиес рядос с найденным (как енто делают поисковики обычно, выдают не всё, а лишь то, что нужно, а не полный документ). | |
|
|
|
|
|
|
|
для: BAHO
(06.02.2005 в 07:24)
| | Хм... можно харахнуться в право и в лево на n-е число символов и искать ближайший пробел - примерно так (тут помоему ещё единицу где прибавить или отнять нужно):
<?php
$pos = 1034; // Позиция найденного слова
$begin = strpos ($text, " ", 1034 - 80);
$end = strpos ($text, " ", 1034 + 80);
$part = substr($text, $begin, $end - $begin);
?>
|
| |
|
|
|
|