Я пытаюсь найти частоты каждого слова, встречающиеся в разделе файла, и общее количество слов этого раздела. Например, если есть файл: file.txt:Эффективный алгоритм для поиска частоты слов, максимальной частоты слов и общего количества слов
Это раздел файла, который является частью файла.
# Это еще один раздел файла, который является частью того же файла, разделенного хэшем.
Я хочу найти частоту каждого слова, слово которого имеет максимальную частоту и общее количество слов в каждом разделе эффективным образом. Такие, что:
В разделе 1: This-1; это-2; а-1; файл-2; секция 1; который 1; часть-1; из-1; -1 | Всего слов: 11 | Слово с максимальной частотой: есть, файл
В разделе 2: This-1; это-2; другое-1; файл-2; секция 1; который 1; часть-1; из-1; заместитель 1; же-1; по-1; Хэш-1; | Всего слов: 15 | Слова, имеющие максимальную частоту: есть, файл
До сих пор я придумал цикл, который проходит через каждое слово, увеличивает общее количество слов, а затем помещает каждое слово в пару с ключом/значением, имеющее частоту каждого слово. Я не знаю о максимальной частоте. Есть ли эффективный алгоритм, который я мог бы использовать?
Я хочу сделать это на Java. Итак, я думал об использовании HashMaps, но любой лучший подход приветствуется.
Спасибо :)
Звучит как идеальный сценарий для применения MapReduce: https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html; для частоты вы можете просто использовать 'wordCountOfWorkxyz/totalWords'. – LordAnomander
Это кажется хорошим. Есть ли способ найти ключ с максимальной частотой в MapReduce? Всего слов, я полагаю, я мог бы найти обычную итеративную переменную. – Dvorak
Вам не нужно использовать MapReduce для этой задачи, я просто предложил это, потому что это обычный сценарий, и иногда людям нравится изучать новые вещи. Вы можете просто придерживаться своего алгоритма, пока файлы не огромны. Интересно то, что максимальная частота даже не имеет значения, если она рассчитана по всему разделу. Слово, которое произошло в большинстве случаев, также будет иметь самую высокую частоту. – LordAnomander