2012-06-26 4 views
0

텍스트 파일에서 키워드를 찾으려고 할 때 키워드를 찾을 때 매치마다 점수가 1이됩니다. 아래의 프로그램은 점수를 효율적으로 계산하지만 높은 점수에서 낮은 점수로 점수를 분류하지 않습니다. 이 문제에 대한 해결책을 제공해주십시오.PHP가 예상대로 정렬되지 않습니다.

  <?php 
       $lines = file("Abstract.txt"); 
       $Result = array(); 
       $index = 0; 
       $search_term1= "Tamoxifen"; 
       $search_term2="Doxorubicin"; 
       $search_term3="Synergistic"; 
       $search_term4="MCF-7"; 
       $search_term5="Inhibition"; 


     $keywords = array($search_term1, $search_term2, $search_term3); 
     $replace_keyword = array("<b>".$search_term1."</b>", "<b>".$search_term2."</b>", "<b>".$search_term3."</b>"); 

     foreach ($lines as $line_num => $line) 
     { 
      if($line_num > 1) 
       { 
       $arr = explode("\t", $line); //Reads tab separated file 
       $Pubmed = trim((string)$arr[0]); //first column is Pubmed 
       $title = trim((string)$arr[1]); //second column is title 
       $abstract = trim((string)$arr[2]); //third column is abstract 
       $score = substr_count(strtoupper($title), strtoupper($search_term1)) + substr_count(strtoupper($abstract), strtoupper($search_term1)); //counts occurrence of 1st string in title & abstract 
       $score += (substr_count(strtoupper($title), strtoupper($search_term2)) + substr_count(strtoupper($abstract), strtoupper($search_term2))); //counts occurrence of 2nd string in title & abstract 
       $score += (substr_count(strtoupper($title),strtoupper($search_term3)) + substr_count(strtoupper($abstract), strtoupper($search_term3))); //counts occurrence of 3rd string in title & abstract 


       //store the result as well as data into array 
        $Result[$index]["Pubmed"] = $Pubmed; 
        $Result[$index]["<BR>score"] = $score; 
        $Result[$index]["<BR>title"] = str_ireplace($keywords, $replace_keyword, $title); 
        $Result[$index]["<BR>abstract"] = str_ireplace($keywords, $replace_keyword, $abstract); 
        $index++; 
       } 
     } 


      //sort the array by score 
      $sorter=array(); 
      $ret=array(); 
      reset($Result); 
      $key = "score"; 
      foreach ($Result as $ii => $va) { 
      $sorter[$ii]=$va[$key]; 
     } 
      arsort($sorter); 
      foreach ($sorter as $ii => $va) { 
      $ret[$ii]=$Result[$ii]; 
     } 
      $Result=$ret; 

      foreach($Result as $instance) 
     { 
      $keys = array_keys($instance); 
       foreach($keys as $key) 
       { 
        if(!strcmp($key,"abstract")) 
        echo "\n<b>".$key."</b> : ".$instance[$key]."\n"; 
       else 
       echo "<b>".$key."</b> : ".$instance[$key]."\n"; 
     } 
       echo "\n\n_________________________________________________________________________________________________________________________________________________________________________________________________\n\n"; 

     } 



     ?> 
+9

하시기 바랍니다 여기

코드입니다 최소한 * 충분한 * 코드를 제공한다. 문제를 재현 할 수 있습니다. –

+1

결과는 어떻게 생겼으며 어떻게 보이고 싶습니까? – jeroen

+0

@ 제로 엔 : 약 400 개의 기사에 각각 ID, 제목 및 초록이 게시되었습니다. 기사에서 키워드를 검색하고 각 경기의 점수를 계산하려고합니다. 아래의 프로그램은 점수를 계산 하나 그것을 분류하지는 않습니다. 결과는 $ Pubmed와 같아야합니다.
$ 점수
$ 제목
$ 초록, 이제는 더 높은 점수를 가진 기사가 더 낮은 점수에 이어지는 것을 원하는 모든 400 개의 기사에 해당됩니다. – Mary

답변

4

나쁜 행은 다음과 같습니다 : 당신의 점수를 저장 $key = "score";

: $Result[$index]["&lt;BR>score"] = $score;

그것은해야한다 : $key = "<BR>score";

+1

와우. 이 사람은 코드를 스캔 할 수 있습니다. – Smandoli

+0

@Puggan Se : 당신은 생명의 은인입니다. 대단히 감사합니다 – Mary

관련 문제