Foros del Web » Programando para Internet » PHP »

Contar palabras y frecuencia de un txt

Estas en el tema de Contar palabras y frecuencia de un txt en el foro de PHP en Foros del Web. Hola: Tome uno de los codigos ya escritos aqui ya que me dejaron como proyecto jalar de un txt de un archivo y ver cuantas ...
  #1 (permalink)  
Antiguo 06/10/2009, 14:04
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Contar palabras y frecuencia de un txt

Hola:
Tome uno de los codigos ya escritos aqui ya que me dejaron como proyecto jalar de un txt de un archivo y ver cuantas palabras tengo sin repetir, cuantas veces se repite cada palabra y su frecuencia con la que salen, si me podrias decir con que funcion hacerlo?

<html>

<body>
<?php

$str = file_get_contents('archivo.txt');

texto:
$str = trim($str);

$str = preg_replace("/\s\s+/", ' ', $str);
$str = preg_replace("/,+./", ' ', $str);


$palabras = explode(' ', $str);


$count=count($palabras);
for ($row=0; $row<=$count; $row++)
{
echo $palabras["$row"]."<br>";

}

?>
</body>
</html>
  #2 (permalink)  
Antiguo 06/10/2009, 14:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Contar palabras y frecuencia de un txt

no hay "función" para ello...

debes utilizar toda tu creatividad e ingenio para lograrlo, es cuestión de usar arrays()

un poco de lógica if-then-else, etc..


suerte!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/10/2009, 21:08
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Contar palabras y frecuencia de un txt

Hola
Hay funciones que te ayudan con lo que necesitas, pero no te van a dar una solución completa sino parcial
el resto es aplicar lógica para hacer que funcione como se quiere
suerte con eso
saludos
  #4 (permalink)  
Antiguo 06/10/2009, 21:18
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Contar palabras y frecuencia de un txt

Algo como esto, comprueba q tanto funciona, no lo proble mucho

$texto = 'el texto que quieres evaluar';

$palabras = explode(' ', $texto);
echo count( array_unique( $palabras ) );
  #5 (permalink)  
Antiguo 07/10/2009, 07:03
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contar palabras y frecuencia de un txt

Gracias acoevil, pero no me funciono, estoy intentandolo hacer con logica pero no sale...
  #6 (permalink)  
Antiguo 07/10/2009, 08:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Contar palabras y frecuencia de un txt

- transformas todo en minúsculas
- crea un arreglo adicional: colección
- explotas las palabras por espacios
- itera las palabras explotadas
+ if-then-else: "SI la palabra NO existe en la colección, la agregamos; SI ya existe incrementamos su valor con 1"

al final obtenemos un arreglo colección así:
Código PHP:
$foo strtolower('aBc a b C de df ed abC ab B c a c');
$bar = array();
$test explode(' '$foo);

foreach (
$test as $one)
{
  if ( ! 
array_key_exists($one$bar)) $bar[$one] = 1;
  else 
$bar[$one] += 1;
}

var_dump($bar); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 07/10/2009, 09:18
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contar palabras y frecuencia de un txt

gracias pateketrueke, si funciona solo que me sale este warning

Warning: array_key_exists() expects parameter 2 to be array, null given in
  #8 (permalink)  
Antiguo 07/10/2009, 09:29
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Contar palabras y frecuencia de un txt

Código php:
Ver original 

__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #9 (permalink)  
Antiguo 07/10/2009, 09:45
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contar palabras y frecuencia de un txt

Como le puedo hacer para que el resultado me salga asi:
hola-1
a-2
todos-1
.....
...
o en una tabla.

en vez de:

array(22) { ["hola"]=> int(1) ["a"]=> int(2) ["todos"]=> int(1) ["como"]=> int(1) ["estas"]=> int(1) ["yo"]=> int(1) ["bien"]=> int(1) ["aqui"]=> int(1) ["perdiendo"]=> int(1) ["el"]=> int(1) ["tiempo"]=> int(1) ["ya"]=> int(1) ["estoy"]=> int(1) ["aburrida"]=> int(1) ["y"]=> int(1) ["con"]=> int(1) ["muchas"]=> int(1) ["ilusiones"]=> int(1) ["ja"]=> int(5) ["carolina"]=> int(1) ["no"]=> int(1) ["trabaja"]=> int(1) }
  #10 (permalink)  
Antiguo 07/10/2009, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Contar palabras y frecuencia de un txt

Con un foreach() vas ciclando el resultado y lo vas imprimiendo.

Saludos.
  #11 (permalink)  
Antiguo 07/10/2009, 10:35
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
ya lo trate de hacer con el for y no me sale..

Código PHP:
// Obtienes todas las palabras en una matriz (array)

$test explode(' '$foo);
error_reporting(0);
foreach (
$test as $one)

{
     if ( ! 
array_key_exists($one$bar)) $bar[$one] = 1;
          else 
$bar[$one] += 1;
}

//var_dump($bar);
//print_r($bar);




$count count($bar);

        for (
$row=0$row<=$count$row++)
    {
        
        echo 
$bar["$row"]."<br>";
        
//var_dump($bar);
        
    

Si me pudieran decir como imprimo en columnas o tabla xfa!

o como paso lo de mi arreglo $bar a muna matriz x[palabra][numero]??
para asi poderla manipular y sacar la frecuencia de cada palabra..

gracias

Última edición por GatorV; 07/10/2009 a las 12:34
  #12 (permalink)  
Antiguo 07/10/2009, 12:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Contar palabras y frecuencia de un txt

Como te comento usa el foreach:
Código PHP:
Ver original
  1. foreach($palabras as $palabra => $frecuencia) {
  2.       echo "$palabra - $frecuencia";
  3. }

Saludos.
  #13 (permalink)  
Antiguo 08/10/2009, 10:11
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contar palabras y frecuencia de un txt

hola GatorV
Este es mi codigo...
Código PHP:
$test explode(' '$foo);

foreach (
$test as $one)

{
     if ( ! 
array_key_exists($one$bar)) $bar[$one] = 1;
          else 
$num $bar[$one] += 1;
        
}
    echo 
"Hay "$count=count($test). " palabras: "."<br>"
con el

Código PHP:
print_r($bar); 
me sale asi
Array ( [historia] => 21 [del] => 79 [rey] => 56 [schahriar] => 7 [y] => 511 [de] => 435 [su] => 135 [hermano] => 16 [el] => 362 [schahzaman] => 5 [cuéntase] => 1 [-pero] => 1 [alah] => 39 [es] => 47 [más] => 28 [sabio] => 1 [mas] => 7 [prudente] => 1 [poderoso] => 7 [benéfico-] => 1 [que] => 264 [en] => 154 [lo] => 74 , etc....
osea me salen las palabras y el numero de veces que sale

y hago esto del foreach asi:


Código PHP:
foreach($test as $one => $num
 {      echo 
" $num - $one";
 } 
me salen las letras y en que posicion se encuentra...
historia - 0 del - 1 rey - 2 schahriar - 3 y - 4 de - 5 su - 6 hermano - 7 el - 8 rey - 9 schahzaman - 10 cuéntase - 11 -pero - 12 alah - 13 es - 14 más - 15 sabio - 16 mas - 17 prudente - 18 más - 19 poderoso - 20 y - 21 más - 22 benéfico- - 23 que - 24 en - 25 lo - 26 que - 27 transcurrió - 28 en - 29 la - 30 antigüedad - 31 del - 32 tiempo - 33 y - 34 en - 35 lo - 36 pasado - 37 de - 38 la ...etc

y me sale el orden de las palabras con su numero consecutivo.
no se si haya una forma de ponerlo en lineas diferentes

me interesaria sacar informacion de las dos, como el numero de posicion y la palabra
y en otra tabla
la palabra y cuantas veces se repite.

gracias
  #14 (permalink)  
Antiguo 08/10/2009, 10:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Contar palabras y frecuencia de un txt

recuerda que lo que imprimes puede ser HTML...

osea, para tu salto de linea usa <br />

o bien, lee el siguiente tema para hacerlo con tablas
http://www.forosdelweb.com/f18/aport...tablas-618528/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 08/10/2009, 13:32
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contar palabras y frecuencia de un txt

hola paketetrueke, ya lei tu articulo y si lo quiero hacer asi, mi pregunta es que al tener la variabe
Código PHP:
var_dump($bar
que viene de:
Código PHP:
if ( ! array_key_exists($one$bar)) $bar[$one] = 1;
          else 
$num $bar[$one] += 1
me sale una cadena, que tiene los datos que yo quiero que es la palabra y las veces que se repite.

mi pregunta es de como puedo dividir o sacar de esa cadena dos variables, que seria colimnas y filas, para que pueda partir de ahi y hacer mi tabla?

Gracias, y disculpa soy nueva en php...
  #16 (permalink)  
Antiguo 08/10/2009, 16:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Contar palabras y frecuencia de un txt

es sencillo, mira...
Código PHP:
$foo = array(
  
'candy' => 2,
  
'bar' => 3,
  
'does' => 1
);

echo 
'<table><tr><th>palabra</th><th>frecuencia</th></tr>';
foreach (
$foo as $k => $v)
{
  echo 
'<tr><td>' $k '</td>';
  echo 
'<td>' $v '</td></tr>';
}
echo 
'</table>'
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #17 (permalink)  
Antiguo 09/10/2009, 16:17
Avatar de sinderell  
Fecha de Ingreso: octubre-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contar palabras y frecuencia de un txt

hola pateketrueke

Gracias ya lo pude hacer!!!
aunque te confiezo que no le entiendo mucho alo del foreach, si sabes de un articulo que me recomiendes te lo agradeceria!!

  #18 (permalink)  
Antiguo 09/10/2009, 16:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Contar palabras y frecuencia de un txt

La pagina oficial tiene buena informacion y varios ejemplo http://www.php.net/manual/en/control...es.foreach.php Pero si quieres tambien puedes visitar el wiki de aqui que tambien te puede ayudar http://www.forosdelweb.com/wiki/Manual_de_PHP:_Bucles
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 12:07.