2011-05-05 2 views
0

내가 문서, 예를 들어 미리 정의 된 한 부울 검색 에 기지 간단한 검색 엔진을 만들려면 : - doc0을 : 내 이름은 시저 입니다 - DOC1 : 시저가 문자입니다. .. -doc2 .....부울 검색 PHP

다음과 같이 I 용어 - 문서 행렬을 구축 한

: enter image description here

그래서 예를 들어, "내"가 처음으로 문서에 존재하지만 "두 번째와의 황제 "두 문서에 내가 하나의 용어에 대한 검색을 할 때 내가 부울 값을 얻을 따라서 검색 엔진에 "이름"을 입력하면 1 0을 얻게됩니다.

내 문제는 내가 한 학기의 예보다는 MOR 검색 할 것입니다 : "시저 문자" 을 내가 부울 1 1 등 1 0 검색의 결과가 될 것입니다, 따라서 그들의 부울 값 사이 만들고 싶어 = 01 & 0 1 그래서 나는 나를 언급 한 방법을 사용하여 둘 이상의 단어를 검색 할 PHP 함수를 필요로

이 코드입니다 $ 쿼리 = $ _REQUEST [ '키워드']; $ stoplists = array ("i", ".", "a", ""); $ words = array(); $ wordsdoc = array(); $ matrix = array(); $ docs = array ("내 이름은 황제", "황제는 문자"입니다.); $ k = 0;

//looping the docs array 
for ($i=0;$i<sizeof($docs);$i++) 
{ 
    //splitting doc[i] on " " (space) 
    $words_temp=explode(" ",$docs[$i]); 

    //looping the splitted words 
    for ($j=0;$j<sizeof($words_temp);$j++) 
    { 
     //checking if the word is not in stop dictionnary and does not already added in words array 
     if (!in_array($words_temp[$j],$stoplists) && !in_array($words_temp[$j],$words)) 
     { 
      //adding word to words array 
      $words[$k]=$words_temp[$j]; 
      //incrementing counter 
      $k++;  
     } 

    } 
    //print_r($words[1]); 
} 

echo "<b>Words:</b> "; 
for ($j=0;$j<sizeof($words);$j++) 
{ 
    echo $words[$j]." "; 
} 

echo "<br><br>"; 

//looping the docs array 
for($i=0;$i<sizeof($docs);$i++) 
{ 
    //splitting doc[i] on " " (space) 
    $words_temp=explode(" ",$docs[$i]); 
    //initialize counter 
    $l=0; 

    //looping the splitted words 
    for ($j=0;$j<sizeof($words_temp);$j++) 
    { 
     //checking if the word is not in stop dictionnary 
     if (!in_array($words_temp[$j],$stoplists)) 
     { 
      //adding word to 2d array 
      $wordsdoc[$i][$l]=$words_temp[$j]; 
      //incrementing counter 
      $l++;  
     } 

    } 
} 

echo "<b><u>Docs:</u></b><br>"; 
for($i=0;$i<sizeof($wordsdoc);$i++) 
{ 
    echo "doc".$i.": "; 
    for($j=0;$j<sizeof($wordsdoc[$i]);$j++) 
    { 
     echo $wordsdoc[$i][$j]." "; 
    } 
    echo "<br>"; 
} 
echo "<br>"; 

echo "<b>Res Matrix First Col:</b><br>"; 
for($i=0;$i<sizeof($words);$i++) 
{ 
    $matrix[$i][0]=$words[$i]; 
    echo $matrix[$i][0]."<br>"; 
} 

$i1=0; 
$i2=0; 

foreach($wordsdoc as $items) 
{ 
     for($i=0;$i<sizeof($words);$i++) 
     { 
      if(in_array($matrix[$i][0],$items)) 
       $matrix[$i][$i1+1] = 1; 
      else 
       $matrix[$i][$i1+1] =0; 
     } 
    $i1++; 
} 

echo "<table border=1><br>"; 
echo "<tr><td></td>"; 

for($i=0;$i<sizeof($docs);$i++) 
{ 
    echo "<td>doc".($i+1)."</td>"; 
} 
echo "</tr><br>"; 

foreach($matrix as $items) 
{ 
    echo "<tr>"; 
    foreach($items as $item) 
    { 
     echo "<td>".$item."</td>"; 
    } 
    echo "</tr><br>"; 
} 
echo "</table><br>";  

* 나는 그런 긴 질문을 게시 미안 해요,하지만 난 정말 도움이 필요합니다 당신이 검색 쿼리를 폭발하도록해야 사전 : 어쩌면

+0

'매트릭스 '를 구현하는 방법과 쿼리 방법에 대한 자세한 정보를 제공하지 않고 @ Vidor가 유일한 조언입니다. –

+0

코드를 추가하고 있습니다. – Mariya

+0

'search ($ word)'함수를 * 블랙 박스 *로 취급 할 수 있습니다; 모든 결과 배열을 전체 배열로 집계합니다. 나는 아래의 방법을 제안했다. –

답변

1
function search($word) { 
    ... code to query the matrix ... 
    return $result_array; 
} 

사용을 원하는대로 다음 배열의 각 부분에 대한 검색 및 결과를 병합

$search_terms = array('my', 'caesar'); 
$overall_result = array(true, true); 
foreach($search_terms as $st) { 
    $this_result = search($st); 
    $overal_index = 0; 
    foreach($this_result as $b) { 
    $overall_result[$overal_index] = $b && $overall_result[$overal_index]; 
    $overal_index++; 
    } 
} 
+0

고맙습니다 (: – Mariya

2

에서 너희들을 감사 할 S의 *을 여러 단어

+0

thats 맞습니다하지만 배열 또는 부울 값을 반환하는 검색 ($ 단어) 함수가 있다고 가정합니다, 나는 쿼리를 폭발시키고 검색 foreach 단어를 만들지 만, 그 (것)들을 저장하는 방법은 무엇입니까? – Mariya