Lade dir von hier
http://www.michael-puff.de/Developer...agen_Reddmann/ die Datei Dawg.zip.
Ein DAWG -> Directed Acyclic Word Graph ist eine Wörterdatenbank. Normalerweise benutzt man sie eher um Suchen in großen Wörterdatenbanken sehr effizient durchzuführen zb. Rechtschreibprüfungen, Scrabble Engine, Kreuzworträtsel Solver/Generatoren. Man kann damit auch einen langen Text in dessen Wörter zerlegen. Das geht enorm effizient und ich habe dieses DAWG auch schon für sogenannte Mail-Scanner die in parallel mehrere Text nach Schlagwörtern durchsuchen eingesetzt.
Benutzen kannst du dieses DAWG so:
Delphi-Quellcode:
procedure Test(const Text: String; Strings: TStrings);
procedure DoPrint(Strings: TStrings; Word: PChar; WordLength: Integer): Boolean; register;
begin
Strings.Add(Word);
Result := False;
end;
var
Dawg: TDawg;
begin
Dawg := TDawg.Create;
try
Dawg.Insert(PChar(Text), Length(Text)); // erzeuge Wörterliste aus String als Text
// Alternativen
Dawg.LoadWordsFromFile('MyFile.txt'); // erzeuge Wörterliste aus Text Datei
Dawg.LoadWordsFromStream(MyStream); // erzeuge Wörterliste aus TStream
Dawg.InsertSrings(MyStringList); // erzeuge Wörterliste aus TStrings
// Anzeige der gefundenen Wörter, alphabethisch, in einem TString Object
Dwag.Enum(@DoPrint, Strings);
finally
Dawg.Free;
end;
end;
Dieses DAWG ist enorm schnell, probier es aus. Eine Textdatei mit 200.000 verschiedenen deutschen Wörtern die 2.54Mb groß ist wird als DWAG, also in alle Wörter zerlegt, in 127ms auf einem P4 1.5Ghz 512Mb Prozessor geladen. Das DWAG enthält danach diese 200.000 Wörter und benötigt 811Kb im Speicher.
Gruß Hagen