Wörter zählen
-
Moin Leute...
bin neu hier und bräuchte mal eure Hilfe.
Und zwar muss ich etwas programmieren. Die Lösung muss in ANSI-C implementiert werden.Ich soll Wörter von TXT und HTML Dateien zählen. Die Datenstruktur sollte wiefolgt aufgebaut sein:
Liste aller Dokumente die sich im Index befinden (Implementiert als doppelt verkettete Liste). Dann 2 Dynamische Arrays wo jeweils alle wörter und alle positionen vorkommen.
Die genaue Beschriebung hierzu ist:
Der Index verwaltet mehrere (Anzahl größer gleich null) Dokumente. Für jedes Dokument werden der Dateiname und alle (Anzahl größer gleich null) darin enthaltenen Wörter verwaltet. Für jedes Wort werden das Wort in Kleinbuchstaben und mindestens eine Position verwaltet. Eine Position besteht aus einer Zeile (beginnend bei 1) und Spalte (beginnend bei 1), in der das erste Zeichen des Wortes im Dokument steht.
Bei der Implementierung des Index sollen mindestens eine verkettete Liste und mindestens ein dynamisches Array eingesetzt werden. Macht Euch Gedanken, welche dynamische Datenstruktur für welchen Teil des Index besser geeignet ist.Habe mir das wie folgt gedacht:
[cpp] struct posinfo { int x; int y; }; struct positionen { struct posinfo info; }; struct wortliste { char* wort; int positionen; struct positionen* positions; }; typedef struct element t_element; struct element { char* docname; struct wortliste* woerter; int anzwoerter; }; typedef struct node *List; struct node { List next; List back; struct element info; }; [/cpp]
Weiß aber nicht so ganz wie ich dies jetzt implementieren soll... Kann mir da jemand helfen?
MfG RayMan
-
Also so etwas wie ein Index für eine Volltextrecherche.
Na dann mal viel Spaß mit den doch etwas abgehobenen verketteten Listen und
den tollen Konzepten. In der Paxis mußt Du erstmal überlegen, was in so einen
Index aufzunehmen ist: Kommas ? Was separiert die Woprte ? Schmeißt man
Satzzeichen gleich raus ? Ist zB ein '-' ein Worttrenner ? Sollte man uU
nur Worte > 3 Zeichen in den Index aufnehmen ?Im Grunde ist das banal:
Nach Dateien mit opendir() etc scannen und jede gefundene Datei laden, die
Satzzeichen rauswerfen und dann mit sscanf() die Worte isolieren. Dann
entscheiden ob sie speicherwürdig sind und bei Bedarf in die Liste aufnehmen.Nach Begriffen die länger wie 16 Zeichen sind sucht kein Mensch, also nehme
ich da eine Dateiliste, die laufende Nummer der DAtei speichere ich zusammen
mit dem Suchbegriff und der Position (da wo's herkommt) in einem Binärfile.
-
Hallo, RayMan wie du bereit bestimmt erraten hast, ist hier dein Informatiklehrer, und hier noch ma langsam zum mit schreiben: DU SOLLST DEINE HAUSAUFGABEN SELBERN MACHEN!
-
Das mit dem Informatiklehrer ist ja jetzt mal hundsgemein ...
Informationsbeschaffung muß man auch lernen.Da bin ich ja jetzt mal auf des Lehrers Lösung gespannt.
-
@Scheppertreiber ich weiss die Lösung doch auch nicht, deshalb hab ich die Aufgabe ja gestellt in der Hoffnung daß mir einer die Lösung präsentiert
-
RayMan's Informatiklehrer schrieb:
@Scheppertreiber ich weiss die Lösung doch auch nicht, deshalb hab ich die Aufgabe ja gestellt in der Hoffnung daß mir einer die Lösung präsentiert
Das nenne ich eine ehrliche Antwort *grins*
Das Thema ist trotzdem nicht so trivial wie es sich auf den ersten Blick
"anfühlt". Ein nettes kleines Minenfeld - der Anwender soll damit ja auch etwas
anfangen können. Pragmatisch vorgehen ... Die reine Lehre versagt bei solchen
Themen (oder man hat 'ne Serverfarm wie Google).