Schau dir mal das
MapReduce Verfahren an, wenn du in Texten nach der Anzahl / Häufigkeit von Wörtern suchen willst.
Auf der Seite einfach mal etwas nach unten Scrollen und die "Beispielhafte Berechnung" angucken.
Ansonsten kannst du auch die folgende Funktion verwenden, die die Position eines gesuchten strings in einem Text ermittelt.
Wenn ein Wort öfters vorkommt, einfach den Text ab der ersten Fundstelle + Wortlänge des gesuchten Wortes abschneiden und weitersuchen.
Delphi-Quellcode:
function ASMstrPos(SubStr: AnsiString; Str: AnsiString;): DWORD;
type
StrRec =
packed record
allocSiz: Longint;
refCnt: Longint;
length: Longint;
end;
const
skew = sizeof(StrRec);
asm
TEST EAX,EAX
JE @@noWork
TEST EDX,EDX
JE @@stringEmpty
PUSH ECX
PUSH EBX
PUSH ESI
PUSH EDI
MOV ESI,EAX
MOV EDI,EDX
MOV EBX,ECX
MOV ECX,[EDI-skew].StrRec.length
SUB ECX,EBX
PUSH EDI
ADD EDI,EBX
MOV EDX,[ESI-skew].StrRec.length
DEC EDX
JS @@fail
MOV AL,[ESI]
INC ESI
SUB ECX,EDX
JLE @@fail
@@loop:
REPNE SCASB
JNE @@fail
MOV EBX,ECX
PUSH ESI
PUSH EDI
MOV ECX,EDX
REPE CMPSB
POP EDI
POP ESI
JE @@found
MOV ECX,EBX
JMP @@loop
@@fail:
POP EDX
XOR EAX,EAX
JMP @@exit
@@stringEmpty:
XOR EAX,EAX
JMP @@noWork
@@found:
POP EDX
MOV EAX,EDI
SUB EAX,EDX
@@exit:
POP EDI
POP ESI
POP EBX
POP ECX
@@noWork:
end;
Edit II: Reguläre Ausdrücke würden sich hier alternativ auch anbieten...