jorcaes escribiste:Tengo que adaptar el anterior código para que las secciones se ajusten a un quinto del total de palabras del texto. Tengo el $numero_total_de_palabras, pero no sé cómo generar la división de las secciones.
Si lo entiendo... que por un lado necesitamos saber el $numero_total_de_palabras, y, como hay cinco secciones, hacer que cada sección tenga como máximo un quinto de esas palabras. No hay problema con las secciones que tengan más de un quinto del total, pero, ¿qué hacemos con las secciones que tengan menos palabras?.
Un ejemplo. En un texto hay 500 palabras, que se reparten en las 5 secciones así: 100, 150, 50, 180 y 20. ¿Qué hacemos?
Si, suponemos, que no nos importan las secciones que tienen menos de 100 palabras, entonces las secciones quedan así: 100, 100, 50, 100 y 20. ¿Es correcto?
jorcaes escribiste:Tengo el siguiente código:
$#palabras; no es el número de palabras. Es el número del índice del último valor del array
@palabras. Si
@palabras tiene 20 elementos,
$#palabras vale 19.
Es mejor que escribas la línea así:
$numero_total_de_palabras = @palabras; . Un array en contexto escalar devuelve el número de sus elementos.
jorcaes escribiste:
Using perl Syntax Highlighting
#supongo que AQUÍ se deberá hacer la división entre las cinco secciones y almacenarlas en $secciones[0] - $secciones[4]
local $/ = '<s>';
open TEXTO
, $fichero;
@secciones = <TEXTO>;
close TEXTO
;Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En este momento tienes las secciones leídas. Debes recorrerlas. En cada una, sacar las palabras y meterlas en un array. Y luego limitar a un máximo de un quinto del total.
Todo este trabajo de leer el fichero, que realmente lo haces dos veces, se podría hacer solo una: leer las secciones y sacando sus palabras, guardarlas en una estructura de un array de arrays:
Using perl Syntax Highlighting
@secciones = (
[ # sección 0
"palabra1",
"palabra2",
"palabra3",
# ...
"palabraN",
],
[ # sección 1
"palabra1",
"palabra2",
"palabra3",
# ...
"palabraN",
],
# resto de secciones ...
);Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Así, solo es necesario leer el $fichero una vez (todo a memoria, en esa estructura). Es fácil saber el número total de palabras (sumando las palabras de todas las secciones). Ajustar a un quinto cada conjunto de palabras se puede hacer con splice(). Recorrer y probar la búsqueda de keywords es hacer un doble bucle (por sección y por cada palabra de sección). La expresión regular cambia y en vez de decirnos el $numero_de_veces, nos vale si coincide o no con la palabra buscada. En cada coincidencia, sumamos uno en otra 'matriz' de datos (puede ser escribir el resultado directamente en el Excel o en otro array de arrays).
jorcaes escribiste:Using perl Syntax Highlighting
seek DATA
, $data_pos ,0;Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En lugar de leer de DATA constantemente, es mucho mejor leer las
keywords una sola vez, al principio del programa, y meterlas en un array, por ejemplo,
@keywords.
No sé si te he liado más... solo he intentado simplificar la solución al máximo. Además, como estamos con Perl, son perfectamente válidas cualquiera de las otras 9 posibles soluciones...