Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Programm zum Auffinden von doppelten Wörtern

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.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 14:22 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.09.2002
    Ort
    Augsburg
    Beiträge
    17
    Find ich klasse die idee!

    Ich kenn momentan keins. Und ich glaub auch emacs hat keine Funktion die das beinhaltet......wenn ich mich irre bitte posten:

    gleich mal testen:-)

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Aha.
    Nach Kernighan/Ritchi (C-Übungsbuch) habe ich noch eine Erweiterung zum Überprüfen des Klammer-Gleichgewichts eingebracht, wobei entscheidend war, zusätzlich die Zeile mit dem ersten Fehler richtig zu bestimmen. Solche ganz simplen Syntax-Überprüfungen, die schon lange bekannt sind, sollte doch eigentlich fast jedes Textverarbeitungsprogramm haben. Gibt es sowas wirklich nicht in Textverarbeitungsprogrammen wie ein aktuelles Microsoft Word (das ich nicht habe, aber bei dem Preis sowas mindestens haben müsste)?
    Geändert von nobody0 (03-12-2002 um 02:33 Uhr)

Lesezeichen

Berechtigungen

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