У меня есть такой текстовый файл:
tom
and
jerry
went
to
america
and
england
Я хочу получить частоту каждого слова, включая частичные совпадения.то есть слово to
присутствует в слове tom
.Таким образом, мое ожидаемое количество слов to
равно 2.
1 america
3 and
1 england
1 jerry
2 to
1 tom
1 went
Текстовый файл, который у меня есть, составляет 30 ГБ , поэтому невозможно загрузить весь контент в память.Итак, что я сейчас делаю:
- чтение входного файла, используя
scanner
для каждого слова, находящего частоту, используя этот код:
Long wordsCount = Files.lines(Paths.get(allWordsFile))
.filter(s->s.contains(word)).count();
т. Е. Для каждого слова я зацикливаю все содержимое файла.Хотя я использую threadpool executor
, производительность этого подхода очень низкая.Есть ли лучший способ сделать это?Любые инструменты доступны, чтобы найти частоту слов из большого файла?