nobody0
01-12-2002, 14:13
Weil mir aufgefallen ist, das doppelte Wörter wie z. B.
... hier zu sehen ist ist, besteht ...
auch von Korrekturlesern selten gefunden werden, habe ich deshalb mal ein C-Programm geschrieben:
// extractdouble.c:
// Extrahiert die doppelten benachbarten Wörter einer Datei.
// Nebenbei wird noch die Anzahl der Wörter (incl. Steuer-Wörter u. a.), die Zeilen-Anzahl und
// Zeichen-Anzahl ausgegeben.
#include <assert.h>
#include <math.h>
#include <string.h>
#include <setjmp.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <vga.h>
#include <signal.h> // signals
void
sig_handler(int sig) // signal handler
{
printf ("\a\a\a\a\a\a\aSignal %d - program exiting... \r\n\a\a\a", sig);
exit(0);
}
int main(int argc, char *argv[])
{
int nc=0, nl=0, nw=0, wf=0, cc=0; // number of chars, number of lines, number of words, word-flag, (word-)char-counter
FILE *ifp=NULL; /* Eingabe-File */
char c='\0', word[2][999999]={{'\0'}};
signal(SIGHUP, sig_handler);
signal(SIGINT, sig_handler);
signal(SIGQUIT, sig_handler);
signal(SIGILL, sig_handler);
signal(SIGTRAP, sig_handler);
signal(SIGIOT, sig_handler);
// signal(SIGEMT, sig_handler);
signal(SIGFPE, sig_handler);
signal(SIGKILL, sig_handler);
signal(SIGBUS, sig_handler);
signal(SIGSEGV, sig_handler);
signal(SIGSYS, sig_handler);
signal(SIGPIPE, sig_handler);
signal(SIGALRM, sig_handler);
signal(SIGTERM, sig_handler);
signal(SIGABRT, sig_handler);
ifp=fopen(argv[1],"r");
while ( (c=getc(ifp)) != EOF ) /* zeichenweises Einlesen bis Dateiende */
{
++nc;
if ( c == '\n' ) // line end
++nl;
if ( ( c == ' ' ) || ( c == '\n' ) || ( c == '\t' ) ) // word end
{
wf=0;
}
else // inside a word
{
if ( wf == 0 ) // Der Anfang eines neuen Wortes wurde erreicht.
{
word[nw%2][cc++]='\0'; // end of the last word
cc=0;
wf=1;
++nw;
if ( ( nc > 1 ) && ( strcmp(word[0], word[1]) == 0 ) ) // two equal words after the first character
{
printf("Double words in line %d: %s %s\n",nl+1,word[0],word[1]);
}
}
word[nw%2][cc++]=c; // write the first word to word[0][..., the second to word[1], the third to word[0][...
}
}
printf("%d Lines, %d Words, %d Characters\n",nl,nw,nc);
return(0);
}
Damit habe ich in meiner Doktorarbeit auch nach (teilweise mehrfachem) Korrekturlesen von 3 Fachleuten noch über 10 Fehler beseitigen können!
Hier ist mal ein typisches Beispiel mit dem Programm:
> extractdouble doctple.tex
Double words in line 796: der der
Double words in line 884: eine eine
1007 Lines, 6476 Words, 51162 Characters
Gibt es außer ispell eigentlich auch andere Programme zum automatischen "Korrekturlesen", so wie dieses extractdouble? :confused:
... hier zu sehen ist ist, besteht ...
auch von Korrekturlesern selten gefunden werden, habe ich deshalb mal ein C-Programm geschrieben:
// extractdouble.c:
// Extrahiert die doppelten benachbarten Wörter einer Datei.
// Nebenbei wird noch die Anzahl der Wörter (incl. Steuer-Wörter u. a.), die Zeilen-Anzahl und
// Zeichen-Anzahl ausgegeben.
#include <assert.h>
#include <math.h>
#include <string.h>
#include <setjmp.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <vga.h>
#include <signal.h> // signals
void
sig_handler(int sig) // signal handler
{
printf ("\a\a\a\a\a\a\aSignal %d - program exiting... \r\n\a\a\a", sig);
exit(0);
}
int main(int argc, char *argv[])
{
int nc=0, nl=0, nw=0, wf=0, cc=0; // number of chars, number of lines, number of words, word-flag, (word-)char-counter
FILE *ifp=NULL; /* Eingabe-File */
char c='\0', word[2][999999]={{'\0'}};
signal(SIGHUP, sig_handler);
signal(SIGINT, sig_handler);
signal(SIGQUIT, sig_handler);
signal(SIGILL, sig_handler);
signal(SIGTRAP, sig_handler);
signal(SIGIOT, sig_handler);
// signal(SIGEMT, sig_handler);
signal(SIGFPE, sig_handler);
signal(SIGKILL, sig_handler);
signal(SIGBUS, sig_handler);
signal(SIGSEGV, sig_handler);
signal(SIGSYS, sig_handler);
signal(SIGPIPE, sig_handler);
signal(SIGALRM, sig_handler);
signal(SIGTERM, sig_handler);
signal(SIGABRT, sig_handler);
ifp=fopen(argv[1],"r");
while ( (c=getc(ifp)) != EOF ) /* zeichenweises Einlesen bis Dateiende */
{
++nc;
if ( c == '\n' ) // line end
++nl;
if ( ( c == ' ' ) || ( c == '\n' ) || ( c == '\t' ) ) // word end
{
wf=0;
}
else // inside a word
{
if ( wf == 0 ) // Der Anfang eines neuen Wortes wurde erreicht.
{
word[nw%2][cc++]='\0'; // end of the last word
cc=0;
wf=1;
++nw;
if ( ( nc > 1 ) && ( strcmp(word[0], word[1]) == 0 ) ) // two equal words after the first character
{
printf("Double words in line %d: %s %s\n",nl+1,word[0],word[1]);
}
}
word[nw%2][cc++]=c; // write the first word to word[0][..., the second to word[1], the third to word[0][...
}
}
printf("%d Lines, %d Words, %d Characters\n",nl,nw,nc);
return(0);
}
Damit habe ich in meiner Doktorarbeit auch nach (teilweise mehrfachem) Korrekturlesen von 3 Fachleuten noch über 10 Fehler beseitigen können!
Hier ist mal ein typisches Beispiel mit dem Programm:
> extractdouble doctple.tex
Double words in line 796: der der
Double words in line 884: eine eine
1007 Lines, 6476 Words, 51162 Characters
Gibt es außer ispell eigentlich auch andere Programme zum automatischen "Korrekturlesen", so wie dieses extractdouble? :confused: