Я использую Delphi 7. Хотелось бы подсчитать количество повторений каждого слова в большом тексте (500 слов). Как я мог это сделать?Статистика слов в тексте с Delphi
ответ
вот что-то вроде грубой силы. он использует список строк и сохраняет количество каждого слова, отлитого как объект в элемент списка.
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]);
, если это отсортированный список строк, вы можете использовать «s.find» вместо «s.indexof». Кроме того, вам может потребоваться установить чувствительность к регистру списка строк, подходящую для вашей реализации. –
Спасибо Дон: Это именно то, что я хочу сделать! Есть ли способ использовать другой разделитель (помимо пространства '')? –
убедитесь, что просто измените строку: , если someText [i] = '', тогда начните , чтобы проверить, нет ли каких-либо разделителей (-ей) –
Я не помню никаких встроенных функций Delphi, которые непосредственно это делают. Но простой метод O (n * Log (n)) заключается в сортировке слов, а затем их сканировании и подсчете.
Привет, Марк: не могли бы вы привести мне пример реализации? –
@ mo3ez: Извините - у меня нет свободного времени прямо сейчас. Тем не менее, подсчет слов Марко является хорошим началом для разбора слов. Поместите отдельные слова в массив и отсортируйте их. Для хорошего примера сортировки см. Сообщение SO http://stackoverflow.com/questions/41733/best-way-to-sort-an-array-in-delphi. –
Если мы говорим о количестве слов в текстовой строке, то что вы могли бы сделать, это разобрать строку и определить слова. Добавьте слова на карту, где идентификатором является слово it self, а значение - число. Это число увеличивается, если слово, которое вы найдете в строке, уже существует на карте.
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, что хорошо, я попытался предоставить вам пример псевдокода.
От ФФК 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 (тест, [ ' '!? '','', '', '', # 10, # 13]); будет хорошей первой попыткой. Он предназначен для простых вычислений по величине, поскольку он, например, не заботится о сокращенных словах.
Конечно, если вы передадите это как домашнее задание, вас, вероятно, попросят объяснить его работу.
Хотя этот пример будет подсчитывать количество слов в строке, он не будет подсчитывать количество вхождений, каждое слово которого имеет, как просил автор. Он должен быть способен на это, хотя и дает несколько незначительных корректировок. –
Спасибо, Марко. Для чего нужен второй параметр? Как я могу перечислить все «уникальные» слова текста, а затем передать их один за другим в функцию, чтобы получить необходимую мне статистику (вхождения в слово). –
a TSTringList также может использоваться для «списка слов». Пропустите все ваши слова и добавьте всех и каждого в tStringlist в качестве нового элемента. Когда вы закончите, у вас есть счет TOTAL, чтобы определить уникальные слова, отсортировать список и в цикле увидеть, отличается ли текущее слово от предыдущего ... если это так, то увеличивайте количество уникальных слов.
- 1. Статистика количества слов, например, в MS Word на Delphi
- 2. Сводная статистика Список слов
- 3. обновление помеченных слов в тексте
- 4. Текст в тексте после слов
- 5. Выделение ключевых слов в тексте
- 6. Обнаружение английских слов в тексте
- 7. Подсчитайте частоту слов в тексте?
- 8. Создание словаря слов в тексте
- 9. Const Количество слов в тексте
- 10. статистика ключевых слов Facebook в более подробной
- 11. Описательная статистика в Stata - Частоты слов
- 12. Статистика частоты слов в C (не C++)
- 13. Статистика количества слов на веб-странице
- 14. PHP - извлечение слов из списка в тексте
- 15. Разделение слов в тексте, использующем Python?
- 16. Как получить частоту слов в тексте
- 17. Подсчитайте строки в тексте без пустых слов
- 18. Как найти индекс повторяющихся слов в тексте?
- 19. Алгоритм поиска списка слов в тексте
- 20. Сопоставление нескольких ключевых слов в тексте (Javascript)
- 21. Предотвращение переноса слов в тексте GUI
- 22. набор жирных слов в тексте из xml
- 23. Автоматическая проверка орфографии слов в тексте
- 24. Определение положительных и отрицательных слов в тексте
- 25. LaTeX и текстовая статистика
- 26. Java, Число n-слов в тексте
- 27. Найти 5 лучших длины слов в тексте
- 28. Замена слов в тексте из массива
- 29. Число нижних слов в тексте. Python
- 30. Поиск 5 наиболее распространенных слов в тексте
Звучит как домашнее задание для меня. – mj2008
слишком старый для этого: p –