Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/12/2016, 17:01
Avatar de kip13
kip13
 
Fecha de Ingreso: agosto-2011
Mensajes: 167
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Sacar las palabras que mas se repiten en un texto

Hola, prueba con esta función:

Código PHP:
Ver original
  1. function countLetters($text, $num_return = FALSE, $num_chars = 0, $not_read = array()) {
  2.     preg_match_all('/\b[A-Za-záéíóúÁÉÍÓÚñ]+\b/', $text, $words);
  3.     if (!is_array($not_read)) {
  4.         $not_read = explode(' ', $not_read);
  5.     }
  6.     $words_count = array_count_values(array_filter(array_map('strtolower', $words[0]), function($val) use ($num_chars, $not_read) {
  7.           if (!function_exists('mb_strlen')) {
  8.             return strlen(utf8_decode($val)) >= $num_chars && !in_array($val, $not_read);
  9.           }
  10.           return mb_strlen($val) >= $num_chars && !in_array($val, $not_read);
  11.     }));
  12.     arsort($words_count);
  13.     if ($num_return !== FALSE) return array_slice($words_count, 0, $num_return);
  14.     return $words_count;
  15. }

Para usarla debes hacerlo de esta forma, por ejemplo:

Código PHP:
Ver original
  1. $texto = "-Me tomaron y me encerraron solo en lo más alto de Orthanc, en el sitio
  2. donde Saruman acostumbraba mirar las estrellas. No hay otro modo de
  3. descender que por una estrecha escalera de muchos miles de escalones y
  4. parece que el valle estuviera muy lejos allá abajo. Lo miré y vi que la hierba y
  5. la hermosura de otro tiempo habían desaparecido y que ahora había allí pozos
  6. y fraguas. Lobos y orcos habitaban en Isengard, pues Saruman estaba
  7. alistando una gran fuerza y emulando a Sauron, aún no a su servicio. Sobre
  8. todas aquellas fraguas flotaba un humo oscuro que se apretaba contra los
  9. flancos de Orthanc. Yo estaba solo en una isla rodeada de nubes; no tenía
  10. ninguna posibilidad de escapar y mis días eran de amargura. Me sentía
  11. traspasado de frío y tenía poco espacio para moverme y me pasaba las horas
  12. cavilando sobre la llegada de los Jinetes del Norte.";
  13.  
  14. print_r(countLetters($texto));

De aquella forma vas a tener un array del conteo de todas las palabras del texto sin ningun tipo de filtro ordenadas de mayor a menor, algo asi:

Código PHP:
Ver original
  1. (
  2.     [y] => 11
  3.     [de] => 11
  4.     [que] => 5
  5.     [me] => 4
  6.     [en] => 4
  7.     [no] => 3
  8.     [la] => 3
  9.     [una] => 3
  10.     [los] => 2
  11.     [a] => 2
  12.     [otro] => 2
  13.     [fraguas] => 2
  14.     [all] => 2
  15.     [las] => 2...........................

La funcion recibe tres filtros que son:

Código PHP:
Ver original
  1. countLetters(Texto o cadena, Limite de palabras a obtener, Numero de letras que deben superar cada palabra, Cadena o array de las subcadenas que no desees mostrar en el resultado)

Ejemplo:

Código PHP:
Ver original
  1. print_r(countLetters($texto, 1, 0));
  2. //resultado
  3. (
  4.     [y] => 11
  5. )

Código PHP:
Ver original
  1. print_r(countLetters($texto, 1, 0, 'y'));
  2. //resultado
  3. (
  4.     [de] => 11
  5. )

Código PHP:
Ver original
  1. print_r(countLetters($texto, 3, 5));
  2. //resultado
  3. (
  4.     [tenía] => 2
  5.     [orthanc] => 2
  6.     [estaba] => 2
  7. )

Espero sea lo que buscas.