2012-02-06 2 views
0

아래 코드는 구두점과 숫자를 지운 문자열 $commentstring에서 가장 자주 발생하는 단어 목록을 반환합니다. 그것은 환상적으로 작동합니다.문자열의 특정 어구 유지

그러나 구어와 구는 개별 단어로 나뉩니다. 나는 그들을 결합하고 싶다.

그래서 "french"가 "fries"직전에 나타나면 "french fries"라는 단어로 결합하고 싶습니다. "초콜릿 칩", "코카콜라", "옛 학교"등과 같은 문구 목록을 작성하고 싶습니다. 어떻게해야합니까?

$commentstring = str_replace(array('/', '*', ')', '(', '!', '.', ',', ':'), '', $commentstring); 

    $words = explode(" ", $commentstring); 


    $result = array(); 

    arsort($words); 







foreach($words as $word) { 

    if(!is_numeric($word)){ 
     $result[$word]++; 
     arsort($result); 
    } 

} 




    echo "<table>"; 


     $blacklist = array($submission, 'DESPITE', 'FARE', 'DECENT', 'AMAZING', 'WOULD', 'DISLIKE', 'HATE', 'OKAY', 'JUST', 'NOTHING', 'CURRENTLY', 'BASICALLY', 'BIT', 'COME', 'WANT', 'TOO', 'HERE', 'EATING', 'EAT', 'WAS', 'TRIED', 'TRY', 'MAKES', 'HAS', 'EVEN', 'THINK', 'BETTER', 'YET', 'MORE', 'LOVE', 'WHILE', 'WHERE', 'WRONG', 'FIND', 'EVER', 'RIGHT', 'BEST', 'HAVE', 'WE', 'WAY', 'GREAT', 'NICE', 'HOW', 'RESTAURANTS', 'RESTAURANT', 'EXCELLENT', 'FORGET', 'THEY', 'REALLY', 'MISS', 'VERY', 'LOOKING', 'YOU\'LL', 'CAN\'T', 'WON\'T', 'PLACE', 'ABOUT', 'FOR', 'MOST', 'GOOD', 'CAN', 'GET', 'THING', 'DON\'T', 'BY', 'YOUR', 'BE', 'YOU', 'BRING', 'THAT\'S', 'LITTLE', 'OTHER', 'MANAGES', 'ATE', 'ATE', 'EAT', 'SO', 'SOMEHOW', 'MAKE', 'ALL', 'UP', 'THEM', 'AS', 'THEM', 'YOU\'RE', 'WILL', 'ONLY', 'IF', 'GO', 'DO', 'I\'VE', 'HAD', 'TO', 'SOME', 'FOOD', 'THIS','DOES', 'NOT', 'IT.', 'IT,', 'SEEM', 'END', 'THERE\'S', 'WHETHER', 'DOUBT', 'WHAT', 'WHICH', 'RECOMMEND', 'THE', 'IS', 'A', 'IT\'S', 'OUT', 'JAN', 'IT', 'IT', 'IT', 'LIKE', 'THAN', 'WITH', 'SEEMS', 'WHICH', 'THAT', 'SAY', 'AT', 'ON', 'AN', 'BUT', 'APART', 'STILL', 'ARE', 'OR', 'TEST', 'IN', 'IT', 'AND', 'SET', 'TO', 'NO', 'OF', '', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'BB', 'CC', 'DD', 'EE', 'FF', 'GG', 'HH', 'II', 'JJ', 'KK', 'LL', 'MM', 'NN', 'OO', 'PP', 'QQ', 'RR', 'SS', 'TT', 'UU', 'VV', 'WW', 'XX', 'YY', 'ZZ'); 


foreach($result as $word => $count1) 
{ 
    if (in_array($word, $blacklist)) continue; 


    echo '<tr>';  
    echo '<td>'; 
    echo "$word"; 
    echo '</td>'; 

    echo '<td>'; 
    echo "$count1 "; 
    echo '</td>'; 

    echo '</tr>'; 

    } 

    echo "</table>"; 
+0

당신은 더 나은 명시 적 목록 또는 필요합니다

$doublewords = array( 'french fries'=>0, 'french toast'=>0, ); foreach ($words as $i=>$word) { if (!isset($words[$i+1])) continue; $combined = strtolower($word." ".$words[$i+1]); if (!isset($doublewords[$combined])) continue; $doublewords[$combined]++; } 

(추신뿐만 아니라 strtolower을 추가했습니다.) :

갱신는 특정 목록 작동 확인합니다. 그것은 다른 수준입니다 ... –

+0

@ Idiqual 나는 목록을 작성하는 것보다 더 기쁩니다. – John

+0

그건 불가능합니다. 무한한 조합이 있습니다. 제대로하고 싶다면 언어 분석을 사용해야합니다. 이것은 큰 망치이기 때문에 아마도 당신의 필요에 맞지 않을 것입니다. –

답변

0

하여 한 단어 foreach 루프 후 다음을 수행하십시오

$doublewords = array(); 
foreach ($words as $i=>$word) 
{ 
    if (!isset($words[$i+1])) continue; 
    $combined = strtolower($word." ".$words[$i+1]); 
    if (!isset($doublewords[$combined])) $doublewords[$combined] = 0; 
    $doublewords[$combined]++; 
} 

은 다음 $doublewords는 더블 워드의 조합을 포함한다. "감자 튀김"과 같은 것들은 "this such"와 같은 무작위 조합보다 더 자주 발생하므로 결국 더 많은 계산을하게 될 것입니다. 의미 규칙 :

+0

얼마나 자주 나타나는 지에 관계없이 특정 프레이즈 목록을 사용하고 싶습니다. – John

+0

당신은 단지 * 작은 * 이니셔티브를 표시 할 수 있습니다 ... – mvds

+0

하지만 난 당신을 위해 미리 채워진 버전을 추가했습니다 – mvds