[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Primer intento de script para detección de errores



Ricardo Javier Cardenes Medina wrote:

El script es muy sencillo. Ejecuto ispell mediante un pipe con
-h -a -f algún_sitio, y voy alimentándolo con con las líneas de la página
que quiero comprobar. Esto lo hago línea a línea, y voy eliminando algunas
que no me interesa que analice, porque fijo que va a encontrar errores,
como las del tipo:

  #use .....
  #include .....

Le he echado un vistazo, pero la verdad es que no uso python, aunque me ha dado ideas. He estado tonteando con un script perl para algo parecido y creo que algunas de las cosas de allí te pueden servir. Este script simplemente envía línea a línea a ispell (más lento que como tú lo haces) y devuelve por línea una lista de palabras que han fallado con información de la línea y el archivo. La mayor parte de las veces es suficiente para pillar gazapos.

El diccionario personal está metido a capón en el script y he añadido a la lista de "otherchars" el guión y la è por probar (curiosamente acabo de escribir èrsonal al teclear mal). Quizás debiera incluirle otros errores habituales de tecleado que dan letras no válidas en castellano, pero para una primera prueba vale.

De momento es muy preliminar, no le he metido opciones y lo he probado sólo con páginas man, pero espero que funcione bien con otras cosas.

Te lo adjunto al mensaje. Se usa como

./mass_ispell <archivos>

Saludos,

--
=====================================================================
Agustin Martin Domingo, Dpto. de Fisica, ETS Arquitectura Madrid,
(U. Politecnica de Madrid)  tel: +34 91-336-6536, Fax: +34 91-336-6554,
email:agmartin@aq.upm.es, http://corbu.aq.upm.es/~agmartin/welcome.html
#!/usr/bin/perl -w

$personal_dict="/tmp/borrame_de_verdad.$$";
$personal_dict_contents="copyright
Debian
dpkg
dselect
override
Packages
dpkg-scanpackages
dpkg-scansources";

open(PERSONAL,"> $personal_dict") || die "No pude crear el diccionario personal";
print PERSONAL "$personal_dict_contents\n";
close PERSONAL;

$ispellcall="ispell -w [-è] -h -l -p $personal_dict -d spanish";

sub ispell_check_file {
    $error='';
    $inputfile='';
    
    $inputfile=shift;
    
    open (INPUTFILE,"$inputfile") || die "No abro la entrada";
    
    $basename=$inputfile;
    $basename=~s/^.*\///;

    while (<INPUTFILE>){
	my $currentline=$.;
	my $inputline=$_;

	# No chequees comentarios groff
	$inputline=~s/^[\.]?\s*\\\".*//g;
	$inputline=~s/\\\".*//g;
	# Ignorar órdenes de groff en el texto
	$inputline=~s/^\.[a-zA-Z]*//g;
	# No chequees líneas que comienzan con un sostenido
	$inputline=~s/^\s*\#.*//g;
	# No verificar parámetros de órdenes
	$inputline=~s/[\ \"\\]+\-[a-zA-Z\-]*/\ /g; 
	$inputline=~s/\-\-[a-zA-Z\-]*/ /g; 
	# Nos aseguramos de pasar a ispell al menos un espacio en blanco
	$inputline=" $inputline";  
	# Mandamos la línea a ispell y la procesamos
	$error=`echo '$inputline' | $ispellcall`;
	$error=~s/\n/ /g;

	if ( $error ){
	    print "$basename\[$currentline\]: $error\n";
	}
	$error='';
    }

    unlink $personal_dict;
}

foreach $file ( @ARGV ){
    ispell_check_file $file;
}

Reply to: