Autor Zpráva
Roman_5
Profil *
Ahoj,

potřeboval bych jen trošku nasměrovat, řeším následující problém:

Provozuji menší inzerci a potřebuji zamezit duplicitním inzerátům, tedy než inzerát uložím do db zkontrolovat zda už neexistuje duplicitní nebo jen z X% podobný inzerát, porovnávat by stačilo jen inzerci jednotlivých uživatelů tj. jednotky až menší desítky inzerátů, průměrný inzerát má 500 znaků.

Díky za každou radu!
SeparateSK
Profil
To,či je už v DB je taký inzerát vyriešiš takto:
<?php
$nazov=$_POST[nazov];
 $query=mysql_query("SELECT * FROM tabulka WHERE nazov LIKE '$nazov' ");
 $pocet=mysql_num_rows($query);
 if($pocet>0)echo "Takýto inzerát už existuje";
?>
Roman_5
Profil *
Jde mi o podobnost, ne o přesnou duplicitu.


Resp. duplicitu mi nedělá problém rozeznat, ale chci zamezit i hodně podobné texty, protože první věc co někoho napadne je přidání tečky na konec textu...
SeparateSK
Profil
Toto by malo v každom textovom reťazci nájsť zhodu z nejakého pola(array), a následne, ak je tá zhoda viac ako 90%, tak vráti false - teda niečo tomu podobné už existuje. Hladá to zhody len medzi slovami
<?php
    function zisti($data,array $vsetko){
        if(substr($data,-1,1)==" ")$data=substr($data,0,(strlen($data)-1));     
        $data=strtoupper($data);  
        $nahrad=Array("Á","Č","Ď","É","Í","Ĺ","Ľ","Ň","Ó","Ô","Ŕ","Ř","Š","Ť","Ú","Ů","Ý","Ž");
        $scim=Array("A","C","D","E","I","L","L","N","O","O","R","R","S","T","U","U","Y","Z");
        $data=str_replace($nahrad,$scim,$data);
        $zaloha=$data;
        
        $najviac=0;
        $o=-1;
         $dataex=explode(" ",$data);
         $slov=count($dataex);
         $najdutych=0;
         for($i=0;$i<count($vsetko);$i++){
            $vsetko[$i]=str_replace($nahrad,$scim,strtoupper($vsetko[$i]));
         }
         for($i=0;$i<=count($vsetko);$i++){
            for($s=0;$s<$slov;$s++){
                $slovo=$dataex[$s];
                if(preg_match("/(.*)$slovo(.*)/siu",$vsetko[$i])){
                    $najdutych+=1;
                }                
            }
            if($najdutych>$najviac){
                    $najviac=$najdutych;
                    $o=$i;
            }
            $najdutych=0;
         }
         $pravdepodobnost=100*($najviac/(count(explode(" ",$vsetko[$o]))));
        //echo $pravdepodobnost."%";
         if($pravdepodobnost>90){
            return false;     
         } else return true;
       }
    $vsetko=array();
    $q=mysql_query("SELECT * FROM tabulka");
    while($data=mysql_fetch_array($q)){
        $vsetko[]=$data[nazov];
    }
    if(!zisti($_POST[inzerat],$vsetko))echo "Podobný inzerát už existuje.";
?>
Roman_5
Profil *
Super, díky!
Roman_5
Profil *
Nakonec jsem to napsal takto:

<?php
// Podobnost textů

// !!! dva prázné řatězce = podobnost 0


$co_porovnavam='Toto je pokusný text na provnávaní.';

$s_cim_porovnavam=array('První pokusný text na porovnání.', 'Další pokusný text na porovnání...', 'Třetí pokusný text na porovnání......', '......', 'Toto je pokusný text na porovnání.');

$index_pole=0;

while($s_cim_porovnavam[$index_pole]!=''){

similar_text($co_porovnavam, $s_cim_porovnavam[$index_pole], $podobnost);
echo "<h1>$podobnost</h1>"; 

//pokud je to podobné na 80% a více
if($podobnost>=80){
echo "<h1>Inzerát nevložíme podobnost je moc velká...</h1>"; 
break;
}

++$index_pole;

}

?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: