Herzlich willkommen in der Delphi-PRAXiS, Markus.
Die Zuordnung von Wort und Punktezahl kannst du auch ganz einfach mit der Allzweckwaffe TStringList machen. Die Punktezahl wird dabei einfach im Objects-Array der StringList mitgeführt.
Delphi-Quellcode:
procedure Analyze(const s: String; weight: Integer; words: TStringList);
var
i, iStart, iWord: Integer;
inWord: Boolean;
sWord: String;
begin
iStart := 0;
for i := 1 to Succ(Length(s)) do
begin
inWord := (i <= Length(s))
and (s[i] in ['a'..'z', 'A'..'Z', 'ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß']);
if (iStart = 0) and inWord then iStart := i;
if not inWord and (iStart > 0) then
begin
sWord := Copy(s, iStart, i - iStart);
iStart := 0;
iWord := words.IndexOf(sWord);
if iWord <> -1
then words.Objects[iWord] := Pointer(Integer(words.Objects[iWord]) + weight)
else words.AddObject(sWord, Pointer(weight));
end;
end;
end;
Das Sortieren ist dann auch nicht sooo schwer:
Delphi-Quellcode:
function CompareInteger(i1, i2: Integer): Integer;
begin
if i1 < i2 then Result := -1 else
if i1 > i2 then Result := 1 else
Result := 0;
end;
function CompareItems(list: TStringList; index1, index2: Integer): Integer;
begin
Result := CompareInteger(Integer(list.Objects[index2]), Integer(list.Objects[index1]));
end;
Verwenden kannst du die Routinen dann so:
Delphi-Quellcode:
procedure TMainForm.AnalyzeButtonClick(Sender: TObject);
begin
WordList.Clear;
with WebBrowser.Document as IHTMLDocument2 do
begin
Analyze(title, 5, WordList);
Analyze(body.innerText, 1, WordList);
end;
WordList.CustomSort(CompareItems);
ShowRanking(WordList);
end;
Freundliche Grüße vom marabu