Código de PHP - Numero de repeticiones de palabras de un texto o cadena ordenadas de mayor a menor

Imágen de perfil
Val: 2.949
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Numero de repeticiones de palabras de un texto o cadena ordenadas de mayor a menorgráfica de visualizaciones


PHP

estrellaestrellaestrellaestrellaestrella(1)
Publicado el 5 de Diciembre del 2016 por kip
1.703 visualizaciones desde el 5 de Diciembre del 2016
Función que recibe un texto o cadena y retorna un array con elementos cuyo valor de cada uno es el numero de repeticiones de la palabra y como indice la palabra en cuestion, ordenados de mayor a menor, ejemplo:

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

1
print_r(countWords($texto));

Resultado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Array
(
    [y] => 11
    [de] => 11
    [que] => 5
    [me] => 4
    [en] => 4
    [la] => 3
    [una] => 3
    [no] => 3
    [las] => 2
    [estaba] => 2
    [sobre] => 2
    [fraguas] => 2
    [los] => 2
    [tenía] => 2
    [otro] => 2
    [a] => 2
    [lo] => 2
    [saruman] => 2
    ......
    ......

Como podemos ver, trae como resultado las palabras y asi mismo las que muchas veces no se consideran palabras como 'y', 'de'..... Para estos casos es posible enviarle parametros a la funcion para poder aplicar ciertos filtros, la funcion recibe ademas del texto 3 parámetros:

Número de palabras a retornar en el array del resultado
Un entero que indicara que numero de palabras podra retornar la funcion, sirven para retornar un numero especifico de las palabras con mayor numero de repeticiones

1
print_r(countWords($texto, 1));
1
2
3
4
Array
(
    [y] => 11
)

Número de caracteres que deben tener la palabra para poder ser evaluada
Un entero que indicara que numero de caracteres debe tener como mínimo una palabra para ser tomada en cuenta y obtenerla en el resultado

1
print_r(countWords($texto, 1, 2));
1
2
3
4
Array
(
    [de] => 11
)

Cadena o array de subcadenas que no deben ser tomadas en cuenta en el resultado
1
print_r(countWords($texto, 1, 2, 'y de'));
1
2
3
4
Array
(
    [que] => 5
)

1
print_r(countWords($texto, 1, 2, array('y', 'de')));
1
2
3
4
Array
(
    [que] => 5
)

Si deseas ir directamente a un solo parametro, por ejemplo este ultimo, puedes hacer lo siguiente:

1
print_r(countWords($texto, '', '', array('y', 'de')));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array
(
    [que] => 5
    [me] => 4
    [en] => 4
    [la] => 3
    [una] => 3
    [no] => 3
    [las] => 2
    [estaba] => 2
    [sobre] => 2
    [fraguas] => 2
    [los] => 2
    [tenía] => 2
    [otro] => 2
    [a] => 2
    [lo] => 2
    [saruman] => 2
    .....
    .....

Con el array de resultados puedes hacer lo que desees, por ejemplo:

1
2
3
4
5
$array_resultados = countWords($texto, '', '', array('y', 'de'));
foreach ($array_resultados as $palabra => $numero) {
    $pl = $numero > 1 ? 'ces' : 'z' ;
    echo "La palabra '{$palabra}' se repite {$numero} ve{$pl} en el texto\n";
}
1
2
3
4
5
6
7
8
La palabra 'que' se repite 5 veces en el texto
La palabra 'me' se repite 4 veces en el texto
La palabra 'en' se repite 4 veces en el texto
La palabra 'la' se repite 3 veces en el texto
La palabra 'una' se repite 3 veces en el texto
La palabra 'no' se repite 3 veces en el texto
La palabra 'las' se repite 2 veces en el texto
La palabra 'estaba' se repite 2 veces en el texto......

Espero les sirva.

Requerimientos

PHP >= 5.3

1.0
estrellaestrellaestrellaestrellaestrella(1)

Actualizado el 9 de Diciembre del 2016 (Publicado el 5 de Diciembre del 2016)gráfica de visualizaciones de la versión: 1.0
1.704 visualizaciones desde el 5 de Diciembre del 2016
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
function countWords($text, $num_return = FALSE, $num_chars = 0, $not_read = array()) {
    preg_match_all('/[\wáéíóúÁÉÍÓÚñ]+/', $text, $words);
    if (!is_array($not_read)) {
        $not_read = explode(' ', $not_read);
    }
    $words_count = array_count_values(array_filter(array_map('strtolower', $words[0]), function($val) use ($num_chars, $not_read) {
          if (!function_exists('mb_strlen')) {
              return strlen(utf8_decode($val)) >= $num_chars && !in_array($val, $not_read);
          }
          return mb_strlen($val) >= $num_chars && !in_array($val, $not_read);
    }));
    arsort($words_count);
    if (is_numeric($num_return)) return array_slice($words_count, 0, $num_return);
    return $words_count;
}



Comentarios sobre la versión: 1.0 (1)

Imágen de perfil
9 de Diciembre del 2016
estrellaestrellaestrellaestrellaestrella
Muy bueno Kip!!!
Responder

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3788