2010-10-12 30 views
0

besoin de faire deux choses, d'abord, trouver un texte donné qui sont le mot le plus utilisé et des séquences de mots (limité à n). exemplecomment remplacer et compter la fréquence d'une séquence de mots ou d'un mot? 1

lorem * * très intelligentscarottes, une meilleure expérience de premier cycle. Maintenant, l'auteur d'un grand nombre de nec enim Lorem magna ullamcorper Urna sed Urna. Malheureusement, vous eros lorem, id rhoncus nisl. Les membres actuels lorem lorem week-end et les combinaisons sapien bande dessinée.Proin lectus elit, ut cursus volutpat languette, sit ametla grille d'un lion. Demain est NISL, aliquet quis lobortis sit amet, l'attraction était pas. Avant premier goût du deuil et de basket-ball mis leurs soins cliniques; Performance en chocolat et les bananes à l'ensemble nibh. Seddéveloppeur ne peut pas. Même les joueurs antioxydants pour commencer le deuil le week-end libre de recettes. Sed auteur, prend juste un chiffon doux, était trèssoin dans l'exécution du ce très laid. Les développeurs du chocolat Bureau.

(certains ont été mes paroles entendue rectifier, mais il est un exemple).

comme à 1'd résultat avec les carottes et non le film est et

Toutes les idées sur la façon de commencer?

En second lieu, 1 besoin d'envelopper tous les mots ou de mots assortis d'une liste donnée pour un fichier donné.

Pour cela, 1 pense à commander le résultat par desceding longueur, puis traiter chaque chaîne pour remplacer la fonction, il est important d'éviter d'avoir enveloppées si elle 1 ont un autre mot dans ma liste. Est-ce une bonne façon de le faire?!

Merci

+0

http://php.net/manual/en/function.strstr.php vérifier les fonctions de chaîne en php http://php.net/manual /fr/function.str-word-count.php http://www.phpclasses.org/package/4701-PHP-Find-the-word-that-appears-more-times-in-a-string.html http : //youropensource.com/projects/105-Word-Count-in-PHP – zod

Répondre

0

1 essayé de résoudre la première partie il y a quelque temps, voir ici:

http://corexii.com/freqwordseq/

Exemple sur lorem ipsum (pas le vôtre, mais un d'entre eux):

http://corexii.com/freqwordseq/?file=loremipsum&minfreq=2&minseq=1&maxseq=4

il est assez lent, mais il est un début. Qu'est-ce que vous voulez faire est peser le match pour que les mots plus dans le match, le poids plus élevé, de faire des séquences plus importantes que les mots qui composent ces séquences. Et alors vous voudrez probablement pour optimiser la routine.

+0

Fonctionne comme un charme, merci beaucoup de fournir votre script. – John

0

Ceci est une solution fonctionnelle qui pourrait encore utiliser un peu de nettoyage. Mon algorithme général est le suivant:

  1. Explode tous les mots dans une liste w, décapage excès des espaces et la ponctuation
  2. Trouvez le tableau de tous les n -length morceaux de w à partir de décalage 0
  3. Trouver la matrice de tous n -longueur blocs de w startin g à l'offset 1
    • ... continuer jusqu'à ce que vous avez trouvé le tableau de n morceaux -Longueur à partir de offset n -1
    • Note: si le dernier morceau de w n'est pas n -length, ne comprennent pas dans le cadre du tableau de morceau
  4. Concatenate tous les tableaux de gros morceau comme c
  5. Trouvez la fréquence o f chaque valeur c

$sample = 'Lorem *ipsum* dolor sit amet, consectetur adipiscing elit. Nunc auctor urna sed urna mattis nec interdum magna ullamcorper. Donec ut lorem eros, id rhoncus nisl. Praesent sodales lorem vitae sapien volutpat et accumsan lorem viverra. Proin lectus elit, cursus ut feugiat ut, porta sit amet leo. Cras est nisl, aliquet quis lobortis sit amet, viverra non erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer euismod scelerisque quam, et aliquet nibh dignissim at. Pellentesque ut elit neque. Etiam facilisis nisl eu mauris luctus in consequat libero volutpat. Pellentesque auctor, justo in suscipit mollis, erat justo sollicitudin ipsum, in cursus erat ipsum id turpis. In tincidunt hendrerit scelerisque.'; 

function buildPhrases($string, $length) { 

    $onlyWords = preg_replace('/\p{P}/', '', $string); 
    $wordArray = preg_split('/\s+/s', $onlyWords); 

    function buildPhraseChunks($wordArray, $length, $offset = 0)  
    { 
     if ($offset >= $length) { 
      return array(); 
     } else { 
      $offsetWordArray = array_slice($wordArray, $offset); 
      return array_merge(
       array_chunk($offsetWordArray, $length),    
       buildPhraseChunks(
        $wordArray, $length, $offset + 1 
       ) 
      ); 
     } 
    } 

    $onlyLengthN = function ($n) { 
     return function($a) use ($n) { 
      return count($a) == $n; 
     }; 
    }; 

    $concatWords = function ($a, $b) { 
     return $a . ' ' . $b; 
    }; 

    $reduce = function ($a) use ($concatWords) { 
     return array_reduce($a, $concatWords); 
    }; 

    $format = function ($a) { 
     return strtolower(trim($a)); 
    }; 

    $chunks = array_filter(
     buildPhraseChunks($wordArray, $length), 
     $onlyLengthN($length) 
    ); 
    $phrases = array_map($reduce, $chunks); 
    $formattedPhrases = array_map($format, $phrases); 

    return $formattedPhrases; 

} 

$phrases = buildPhrases($sample, 1); 
$dropOnes = function($a) { 
    return $a != 1; 
}; 
$freqCount = array_filter(
    array_count_values($phrases), 
    $dropOnes 
); 

arsort($freqCount); 

print_r($freqCount);