我正在使用 Delphi 7。我想计算大文本(500 个单词)中每个单词的重复次数。我怎么能做到?
问问题
1588 次
5 回答
2
这是一种蛮力的做法。它使用字符串列表并将每个单词的计数存储为列表项的对象。
var
i : integer;
iCount : integer;
idxFound : integer;
someText : string;
s : TStringList;
oneWord : string;
begin
someText := 'this that theother and again this that theother this is not that';
oneWord := '';
s := TStringList.Create;
for i := 1 to length(someText) do begin
if someText[i] = ' ' then begin
idxFound := s.indexof(oneWord);
if idxFound >= 0 then begin
iCount := integer(s.objects[idxFound]);
s.Objects[idxFound] := TObject(iCount + 1);
end
else begin
s.AddObject(oneWord, TObject(1));
end;
oneWord := '';
end
else begin
oneWord := oneWord + someText[i];
end;
end;
if oneWord <> '' then
if idxFound >= 0 then begin
iCount := integer(s.objects[idxFound]);
s.Objects[idxFound] := TObject(iCount + 1);
end
else begin
s.AddObject(oneWord, TObject(1));
end;
// put the results on the screen in a text box.
memo1.Text := '';
for i := 0 to s.Count - 1 do
memo1.Lines.Add(intToStr(integer(s.Objects[i])) + ' ' + s[i]);
于 2010-01-28T15:09:14.990 回答
0
我不记得有任何直接执行此操作的内置 Delphi 函数。但是一个简单的 O(n*Log(n)) 方法是对单词进行排序,然后对其进行扫描和计数。
于 2010-01-28T14:37:19.430 回答
0
如果我们谈论文本字符串中的单词数,您可以做的是解析字符串并识别单词。将单词添加到地图中,其中标识符是它自己的单词,值是一个数字。如果您在字符串中找到的单词已经存在于地图中,则此数字会增加。
map<string, int>
foreach word in string
if word is in map
map[word] = map[word] + 1
else
map[word] = 1
end if
end for
由于我不太了解 delphi,因此我试图为您提供一个伪代码示例。
于 2010-01-28T14:39:40.160 回答
0
TSTringList 也可用于“单词列表”。遍历您的所有单词,并将每个人作为新项目添加到 tStringlist。完成后,您将获得一个 TOTAL 计数,以确定唯一单词,对列表进行排序,并在循环中查看当前单词是否与前一个单词不同......如果是,则增加您的唯一单词计数。
于 2010-01-28T17:57:43.940 回答
-1
来自 FPC strutils 库:
function WordCount(const S: string; const WordDelims: TSysCharSet): Integer;
var
P,PE : PChar;
begin
Result:=0;
P:=Pchar(pointer(S));
PE:=P+Length(S);
while (P<PE) do
begin
while (P<PE) and (P^ in WordDelims) do
Inc(P);
if (P<PE) then
inc(Result);
while (P<PE) and not (P^ in WordDelims) do
inc(P);
end;
end;
wordcount (test,[',','.',' ','!','?',#10,#13]); 将是一个很好的第一次尝试。它用于简单的幅度计算,因为它不处理缩写词。
当然,如果你把它作为家庭作业提交,你可能会被要求解释它的工作原理。
于 2010-01-28T14:46:37.833 回答