2012-12-11 2 views
1

안녕하세요 tf-idf에 문제가 있습니다. 이 코드는 나를 보여줍니다tf-idf 오류

$terms = array_count_values(explode(' ', $frase)); 
$total_term = asort($terms); 
$total_array = count($total_term); 

for ($i=1; $i<=$total_array; $i++){ 
$SQL = mysql_query("SELECT webTitulo, webDescripcion, webkeywords, weburl FROM webs WHERE MATCH (webTitulo, webDescripcion, webkeywords, weburl) AGAINST ('$total_term[$i]')", $server_link) or die(mysql_error()); 
$frec_term = mysql_num_rows($SQL); 
} 
$sssql = mysql_query("SELECT uDR.webTitulo, uDR.webDescripcion, uDR.webkeywords, uDR.weburl, SUM(uDR.priority) as SPriority 
FROM (

(SELECT s1.webTitulo, s1.webDescripcion, s1.weburl, s1.webkeywords, 3 as priority FROM webs s1 WHERE MATCH (webTitulo) AGAINST ('$frase')) 

UNION 

(SELECT s2.webTitulo, s2.webDescripcion, s2.weburl, s2.webkeywords, 1 as priority FROM webs s2 WHERE MATCH (webkeywords) AGAINST ('$frase')) 

UNION 

(SELECT s3.webTitulo, s3.webDescripcion, s3.weburl, s3.webkeywords, 2 as priority FROM webs s3 WHERE MATCH (webDescripcion) AGAINST ('$frase'))) uDR 

GROUP BY uDR.webTitulo, uDR.weburl, uDR.webDescripcion, uDR.webkeywords 

ORDER BY SPriority DESC ", $server_link) 
         or die(mysql_error()); 
$totalRows = mysql_num_rows($sssql); 
$tf_idf = $frec_term * log10($totalRows/70); 
echo $tf_idf; 

(70)이 존재하지 않는 변수를 대체 할 수있다 : "0"

이 코드입니다.

인사말

+0

[비추천 프로세스] (http://news.php.net/php.internals/53799)에있는 것처럼 mysql_ * 함수를 사용하지 마십시오. 대신 [MySQLi] (http://php.net/manual/en/book.mysqli.php) 또는 [PDO] (http://php.net/manual/en/book.pdo.php)를 사용하고 [be be 더 나은 PHP 개발자] (http://jason.pureconcepts.net/2012/08/better-php-developer/). –

답변

0

당신의 논리는 잘못된 것입니다 : 당신이 문장 $frase를 교체 할 경우, this example를 참조 $total_term 배열 true로하지와 함께 종료됩니다.

array_count_values 때문에 $total이 배열 인 경우에도 키는 문자열이며 숫자가 아닙니다.

키가 숫자 일지라도 0- 기반이므로 마지막 $frec_term = mysql_num_rows($SQL);0이됩니다.

그래서 $tf_idf0 될 것입니다 많은 이유가 있습니다 그들은 모두 $의 frec_term이 NULL/미정/0는 사실에서 온다.