2012-02-06 2 views
0

Le code ci-dessous renvoie une liste de mots apparaissant le plus fréquemment dans la chaîne $commentstring, nettoyée de la ponctuation et des nombres. Cela fonctionne fantastique.Conserver certaines phrases dans une chaîne

Cependant, les expressions familières et les noms de marque sont divisés en mots individuels. Je voudrais les combiner. Donc, si le mot «français» apparaît immédiatement avant «frites», je voudrais les garder combinées avec le mot «frites». Je voudrais arriver à une liste de phrases comme celle-ci comme «pépites de chocolat», «coca cola», «old school», etc. Comment pourrais-je faire cela?

$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

Vous aurez besoin d'une liste explicite, ou mieux encore: règles sémantiques. C'est un autre niveau ... –

+0

@ Idiqual Je suis plus que disposé à faire une liste. – John

+0

C'est juste impossible, il y a des combinaisons infinies. Si vous voulez le faire correctement, vous devrez utiliser l'analyse de la langue. C'est un gros marteau, alors ça ne répondra peut-être pas à vos besoins. –

Répondre

0

après votre boucle foreach seul mot, faites ceci:

$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]++; 
} 

Ensuite $doublewords contient une combinaison double mot. Des choses comme "frites" se produiront plus souvent que des combinaisons aléatoires comme "ceci", de sorte qu'ils finiront par avoir un nombre plus élevé.

mise à jour pour le faire fonctionner pour une liste spécifique:

$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]++; 
} 

(ps ajouté strtolower aussi bien.)

+0

Je souhaite utiliser une liste de phrases spécifique, quelle que soit la fréquence à laquelle elles apparaissent. – John

+0

vous pouvez montrer juste une * petite * initiative ... – mvds

+0

mais j'ai ajouté une version prepopulated pour vous – mvds

Questions connexes