Задать вопрос

Программа для подсчета относительной частоты встречаемости слова в тексте. Как она должна выглядеть?

Здравствуйте, сразу хочу сказать что писать за меня ничего не надо, я просто за консультацией. Дали написать программу:

Подсчитывается относительная частота встречаемости каждого слова в тексте, границами слов являются символы: точка, запятая двоеточие, точка с запятой, пробел, скобки, тире, вопросительный и восклицательные знаки.
Текст вводится с клавиатуры, должна быть возможность записи его в файл; вывод результатов на экран, а по желанию пользователя на принтер или в файл.

Как вы её видите, и как по вашему должен выглядеть результат выполнения программы?
Программа должна быть на Делфи.

Я представляю программу так:
Есть текстовое поле (Memo), в него вставляется текст, нажимается кнопочка - подсчитать.
Результат будет выглядеть так:
1. Я - 2 раза.
2. и - 3 раза.
3. машина - 1 раз.
... //И так все слова в тексте


Как я понял - реализовать лучше при помощи двух динамических массивов. Один - строковый, другой числовой. Программа проходит по тексту, встречает слово, проверяет есть ли оно в первом массиве, если нет то добавляет его в первый массив, а если есть, то в элемент второго массива с индексом элемента первого массива в котором содержится слово добавить 1.
На выходе получим два одинаковых по размерности массива, в первом слова, а во втором массиве(числовом) с тем же индексом - сколько раз в тексте они встречались.

Или я слишком сложно мыслю?
  • Вопрос задан
  • 4728 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@zedxxx
Если абстрагироваться от языка программирования и языка текста, то вот пример: Частотный анализатор английских слов, написаный на.... Посмотрите в код, может почерпните для себя какие-то идеи.
Ответ написан
Комментировать
fornit1917
@fornit1917
Вы в целом мыслите верно, но вместо обычных массивов лучше использовать структуру данных типа HashMap. Это похоже на массив, но ключом может быть не число, а строка. Т.е. ключ - слово, значение - частота. Тогда получить и изменить частоту по слову будет быстрее, чем обходить обычный массив.
Не знаю, есть ли в Делфи свой мэп, но по-моему под это дело можно приспособить TStringList: www.delphibasics.ru/TStringList.php

Можете поискать еще какие-нить варианты, но HashMap это в принципе то, что вам нужно. Удачи.
Ответ написан
@luis
Массив не нужен:)
Сделай объект
MyRec = object
  MyWord:string;
  MyFreq:integer;
end;


И добавляй его в коллекцию TList или создай свою коллекцию на основе дженериков
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы