Foros del Web » Programando para Internet » PHP »

Sacar las palabras que mas se repiten en un texto

Estas en el tema de Sacar las palabras que mas se repiten en un texto en el foro de PHP en Foros del Web. Tengo un texto largo y necesito sacar las palabras que mas se repiten y ordenarlas de mayor a menor relevancia. por ejemplo solo 12 palabras, ...
  #1 (permalink)  
Antiguo 03/12/2016, 08:44
 
Fecha de Ingreso: noviembre-2005
Mensajes: 144
Antigüedad: 18 años, 5 meses
Puntos: 2
Sacar las palabras que mas se repiten en un texto

Tengo un texto largo y necesito sacar las palabras que mas se repiten y ordenarlas de mayor a menor relevancia.

por ejemplo solo 12 palabras, pero a la vez tengo que omitir los articulos (el, la, lo, los, la, las, un, una, uno, unos), proposiciones, etc.

Alguna idea?
  #2 (permalink)  
Antiguo 03/12/2016, 10:27
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: Sacar las palabras que mas se repiten en un texto

bueno yo lo de sacar las palabras comunes que se repiten ya lo había echo hace unos días , para un trabajo, lo hice así :

Código PHP:
Ver original
  1. $cadena  = "el  la  lo  los  la  las un el una  uno  unos";
  2. $palabras_comunes = array("la", "el");
  3.  
  4. $nueva_cadena = str_replace($palabras_comunes, "", $cadena);
  5. echo $nueva_cadena;
  6. echo "<hr>";

lo otro diría que es así :
Código PHP:
Ver original
  1. $palabras = str_word_count($cadena, 1);
  2. $se_repite = array_count_values($words);
  3.  
  4. arsort($se_repite);
  5. print_r($se_repite);

suerte! igual deberías haber intentado hacerlo por ti mismo. D: <
  #3 (permalink)  
Antiguo 03/12/2016, 10:33
 
Fecha de Ingreso: noviembre-2005
Mensajes: 144
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Sacar las palabras que mas se repiten en un texto

Gracias tengo uno pero me dan muchos problemas algunos caracteres... por cierto me olvide como sacar los parentesis. signos, corchetes, barras, etc.

Y solo tomar en cuenta palabras igual o mayores a 5 caracteres
  #4 (permalink)  
Antiguo 03/12/2016, 10:43
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sacar las palabras que mas se repiten en un texto

Talvez esto:

Código PHP:
Ver original
  1. $texto = "texto aquí";
  2. $bannedWords = array("el", "la", "lo", "los", "la", "las", "un", "el", "una", "un", "unos");
  3. $largo = 5;
  4.  
  5. $t = explode(" ", strtolower(preg_replace("[^A-Za-zñÑáéíóúÁÉÍÓÚ' ']", "", $texto)));
  6. $r = array();  
  7. for($k=0;$k<sizeof($t);$k++){
  8. $w = $t[$k];
  9.     if(!in_array($w, $bannedWords) && strlen($w)>=$largo){
  10.         if(array_key_exists($w,$r)){
  11.         $n = intval($r[$w]);
  12.         $r[$w] = ++$n;
  13.         }
  14.         else{
  15.         $r[$w] = 1;
  16.         }  
  17.     }
  18. }
  19. arsort($r);
  20. $repit=$r;

Ahora $repit es un arreglo asociado, en donde las llaves sno las palabras y su valor cuantas veces se repiten y esta ordenado desendiente.

Variables:
$texto, El texto.
$bannedWords: Palabras que quieras que no cuenten
$largo: Tomar en cuenta solo palabras igual o más largas que a esta variable

Debería andar bien

P.S: la expresión regular que puse es una mie... no se de exp. reg.

EDITE!!

Última edición por alvaro_trewhela; 03/12/2016 a las 17:05
  #5 (permalink)  
Antiguo 03/12/2016, 18:12
 
Fecha de Ingreso: noviembre-2005
Mensajes: 144
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Sacar las palabras que mas se repiten en un texto

@alvaro_trewhela

Funciona bastante bien pero todavía hay errores, la forma que seleccionas las palabras hay problemas en cada linea (salto de linea) se fusiona la ultima palabra de una linea y con la primera palabra de la linea siguiente. ejemplo "solluna" en ves de tomar "sol" y "luna" por separado. Otro problemas son los acentos en ves de tomar "rincón" sale como "rincoacuten"
  #6 (permalink)  
Antiguo 03/12/2016, 20:30
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sacar las palabras que mas se repiten en un texto

Lo de los saltos de líne se arreglan con la expresion regular

"[^A-Za-zñÑáéíóúÁÉÍÓÚ]\s"

y para los problemas de acento html_entity_decode

entonces esta linea:
Código PHP:
Ver original
  1. $t = explode(" ", strtolower(preg_replace("[^A-Za-zñÑáéíóúÁÉÍÓÚ' ']", "", $texto)));

debería ser así:

Código PHP:
Ver original
  1. $t = explode(" ", strtolower(html_entity_decode(str_replace("\r\n", " ", preg_replace("[^A-Za-zñÑáéíóúÁÉÍÓÚ' ']", "", $texto)))));

Creo que con eso se arregla

Última edición por alvaro_trewhela; 04/12/2016 a las 15:19
  #7 (permalink)  
Antiguo 04/12/2016, 17:01
Avatar de 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.

Etiquetas: palabras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:49.