Hallo knolli,
deine Routinen zur Wortzerlegung sind sehr ungewöhnlich. Camel-Case Wörter werden zerissen - warum?
Bei mir und vielen anderen besteht ein Text aus Wörtern, die durch bestimmte Zeichen voneinander getrennt sind:
Delphi-Quellcode:
procedure ExtractWords(const Text: string; const breakChars: TSysCharSet; s: TStrings);
var
iFirst, iLast: Integer;
begin
s.BeginUpdate;
try
iFirst := 0;
while iFirst < Length(Text) do
begin
repeat
Inc(iFirst);
until (iFirst > Length(Text))
or not (Text[iFirst] in breakChars);
iLast := iFirst;
while (iLast <= Length(Text))
and not (Text[iLast] in breakChars) do
Inc(iLast);
s.Add(Copy(Text, iFirst, iLast - iFirst));
iFirst := iLast;
end;
finally
s.EndUpdate;
end;
end;
Als BreakChars kannst du alles verwenden, was kein Buchstabe ist. Auf der Suche nach einem Palindrom interessiert dich die Groß-Kleinschreibung überhaupt nicht:
Delphi-Quellcode:
procedure TDemoForm.WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
begin
with pDisp
as IWebBrowser2
do
with Document
as IHTMLDocument2
do
ExtractWords(AnsiLowerCase(body.innerText),
[#1..#255] - ['
a'..'
z', '
ä', '
ö', '
ü', '
ß'],
Memo.Lines
);
end;
ExtractWords() arbeitet kummulativ, also löschst du die Liste besser vorher:
Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
begin
Memo.Clear;
WebBrowser.Navigate(Edit.Text);
end;
Grüße vom marabu