2012-07-04 3 views
0

다음 텍스트를 사용하여 유사한 텍스트를 검색합니다. 그러나 무엇인가의 이유로 그것은 내가 검색 한 것과 상관없이 동일한 값을 반환합니다. 누군가 문제의 원인을 파악할 수 있습니까?비슷한 텍스트 검색

$result = mysql_query("SELECT keyword FROM search"); 
$storeArray = Array(); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
$storeArray[] = $row['keyword']; 
     } 
foreach ($storeArray as $key){ 
    //echo "'".$key."'"; 
} 



$my_word = $_POST['value']; 

$all_words = array(
"'".$key."'" 
); 

$bestMatch = array('word' => $my_word, 'match' => 2); 

foreach($all_words as $word) { 
similar_text($word, $my_word, $percent); 
if($percent > $bestMatch['match']) $bestMatch = array('word' => $word, 'match' =>  $percent); 
} 

if($bestMatch['match'] < 100) echo 'Did you mean: <strong>' . $bestMatch['word'] . '</strong>'; 

답변

1

내가 조금 편집했는데, 이것이 원하는 것인지 알려주세요.

$my_word = $_POST['value']; 
$bestMatch = array('word' => $my_word, 'match' => 2); 
$result = mysql_query("SELECT keyword FROM search"); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
      //run similar text on each row 
     similar_text($row['keyword'], $my_word, $percent); 
      //if row has a better score, overwrite $bestMatch 
     if ($percent > $bestMatch['match']) 
      $bestMatch = array('word' => $row['keyword'], 'match' => $percent); 
} 
if ($bestMatch['match'] < 100) 
    echo 'Did you mean: <strong>' . $bestMatch['word'] . '</strong>'; 

편집 : (주로 길이의 측면에서), 나는 그것이 모두 문자 수를 결합 80 %의 유사 (생각 similar_text 이미 큰 유사성을 가지고 단어 만 좋은 결과를 보여 주었다 잊지 마세요 및 길이). 그래도 100 % 확신 할 수는 없습니다 ...

+0

나는 그것을 뒤로 가져 간다. ... 잘 작동한다. 내가 디버그 코드를 추가 할 때 예상대로 –

+0

아니 하드 감정 =) 난 내 배열을 얻을 –

0

코드에서이 작업을 수행 한 것으로 보이며 결과를 하나만 가져 오는 것으로 나타납니다.

$all_words = array(
    "'".$key."'" 
); 

foreach($all_words as $word) { 
    // ... 
} 

당신이 존재하지 않는 $keyforeach()을 실행, 따라서 항상 같은 일이 될 것이다 .. ''에 가장 가까운을 받고 일을하고 있습니다.

foreach()foreach($storeArray as $word) 또는 이와 비슷한 것으로 변경해보세요.

여기 디버그 전략이 있습니다.이 코드를 if($bestMatch['match'] < 100) 위에 올려주십시오. 당신이 찾고있는 무엇을

echo '<pre>'; 
echo $my_word; 
print_r($storeArray); 
print_r($all_words); 
echo '/<pre>'; 

$all_words 당신이에 similar_text()을 실행해야 할 단어 모두 포함되어 있다는 것입니다.

+0

.... 배열 ( [0] => 일정 관리 [1] => ScanSharp [2] => ResultsCall [ 3] => 필수 필드들 [4] => ReminderCall [5] => 관리자 관리자 –