Autor | Zpráva | ||
---|---|---|---|
Roman_5 Profil * |
#1 · Zasláno: 5. 4. 2012, 19:15:35
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 * |
#3 · Zasláno: 5. 4. 2012, 19:55:59 · Upravil/a: Roman_5
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 * |
#5 · Zasláno: 5. 4. 2012, 20:28:49
Super, díky!
|
||
Roman_5 Profil * |
#6 · Zasláno: 6. 4. 2012, 13:56:42
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; } ?> |
||
Časová prodleva: 12 let
|
0