En primer lugar tengo que comentar que soy un usuario principiante desarrollando aplicaciones con lenguaje Perl, por ello espero que entre todos podáis ayudarme en este problema que se me ha planteado.
Por una parte tengo una pequeña aplicación que lo que me realiza es una búsqueda de aquellas combinaciones de palabras dos a dos, existentes en 140 ficheros de texto a partir de un listado de 1781 palabras.
A continuación os pongo el código:
Using perl Syntax Highlighting
#!perl
# Muestra las combinaciones de palabras del listado de la sección __DATA__ entre las palabras de los textos
# ubicados en la ruta <C:\\Textos\\*.txt>
# Muestra el resultado por fichero
use warnings;
use strict;
#Leemos la lista de palabras keywords
my %keywords;
while ( <DATA> ){
chomp;
$keywords{ lc($_) }=1;
}
#Para cada fichero...
foreach my $nombre_fichero ( <C:\\Textos\\*.txt> ){
#Nos leemos todo el fichero y lo dividimos en palabras
my @palabras;
{
my $fichero=do{ local $/; open FH, "<$nombre_fichero"; <FH> };
@palabras = $fichero =~ /(\b[^\W_\d][\w'-]+\b)/g;
}
#print "Número de palabras del fichero $nombre_fichero: ", scalar @palabras,"\n";
#Para todas las palabras del fichero
my %combinaciones;
my $palabra;
my $palabra_anterior = '';
foreach my $palabra_org ( @palabras ) {
$palabra = lc($palabra_org);
if( $keywords{$palabra} && $keywords{$palabra_anterior} ) {
$combinaciones{"$palabra_anterior|$palabra"}++;
}
$palabra_anterior = $palabra;
}
#Sacamos el resultado, si lo hay
if ( keys %combinaciones ) {
print "Fichero $nombre_fichero:\n";
foreach my $combinacion ( sort { $combinaciones{$b} <=> $combinaciones{$a} } keys %combinaciones ) {
print "\t$combinacion :", $combinaciones{$combinacion},"\n";
}
}
}
__DATA__
CATALYST
REACTION
CATALYSTS
ZEOLITE
BETA
ZEOLITES
…
Ésta es la lista de 1781 palabras
# Muestra las combinaciones de palabras del listado de la sección __DATA__ entre las palabras de los textos
# ubicados en la ruta <C:\\Textos\\*.txt>
# Muestra el resultado por fichero
use warnings;
use strict;
#Leemos la lista de palabras keywords
my %keywords;
while ( <DATA> ){
chomp;
$keywords{ lc($_) }=1;
}
#Para cada fichero...
foreach my $nombre_fichero ( <C:\\Textos\\*.txt> ){
#Nos leemos todo el fichero y lo dividimos en palabras
my @palabras;
{
my $fichero=do{ local $/; open FH, "<$nombre_fichero"; <FH> };
@palabras = $fichero =~ /(\b[^\W_\d][\w'-]+\b)/g;
}
#print "Número de palabras del fichero $nombre_fichero: ", scalar @palabras,"\n";
#Para todas las palabras del fichero
my %combinaciones;
my $palabra;
my $palabra_anterior = '';
foreach my $palabra_org ( @palabras ) {
$palabra = lc($palabra_org);
if( $keywords{$palabra} && $keywords{$palabra_anterior} ) {
$combinaciones{"$palabra_anterior|$palabra"}++;
}
$palabra_anterior = $palabra;
}
#Sacamos el resultado, si lo hay
if ( keys %combinaciones ) {
print "Fichero $nombre_fichero:\n";
foreach my $combinacion ( sort { $combinaciones{$b} <=> $combinaciones{$a} } keys %combinaciones ) {
print "\t$combinacion :", $combinaciones{$combinacion},"\n";
}
}
}
__DATA__
CATALYST
REACTION
CATALYSTS
ZEOLITE
BETA
ZEOLITES
…
Ésta es la lista de 1781 palabras
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
El resultado de este script es el siguiente:
- Código: Seleccionar todo
Fichero C:\Textos\BioTechVol77-2(2001).txt:
data|base :7
organic|wastes :6
solid|organic :4
data|bases :2
particle|size :2
high|quality :2
high|air :1
pore|space :1
Fichero C:\Textos\BioTechVol82-3(2002).txt:
data|base: 5
cation|exchange :4
calcium|magnesium :3
peat|source :3
carbon|nitrogen :2
processing|method :2
nitrogen|calcium :2
nitrogen|ratio :2
material|control :1
…
Ahora viene mi problema, me gustaría representar la salida de ese script en un formato matricial, y no sé si desde un script en Perl puedo depositar el resultado una hoja de cálculo Excel, por ejemplo.
El formato de la matriz debe ser el siguiente:
Mi pregunta es si se puede dirigir la salida del script a un Excel por ejemplo, para que saque la salida en forma de matriz y cuáles deberían ser las modificaciones a realizar.
¡Espero sus aportaciones! ¡Muchas gracias!