Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Programm zum Auffinden von doppelten Wörtern

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    22.03.2001
    Beiträge
    650

    Programm zum Auffinden von doppelten Wörtern

    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:


    Code:
    // 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 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include      // 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?
    Geändert von nobody0 (01-12-2002 um 13:22 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •