Java-подсчет вхождения слова из огромного текстового файла - PullRequest
3 голосов
/ 09 февраля 2011

У меня есть текстовый файл размером 115 МБ.Он состоит из около 20 миллионов слов.Я должен использовать файл как коллекцию слов и использовать его для поиска вхождения каждого данного пользователем слова из коллекции.Я использую этот процесс как небольшую часть в моем проекте.Мне нужен метод для более быстрого и правильного определения количества вхождений данных слов, поскольку я могу использовать его в итерацияхЯ нуждаюсь в предложении относительно любого API, который я могу использовать или каким-либо другим способом, который выполняет задачу быстрееЛюбые рекомендации приветствуются.

1 Ответ

3 голосов
/ 09 февраля 2011

Подобные вещи обычно реализуются с использованием Lucene , особенно если вы собираетесь многократно перезапускать свое приложение или у вас нет кучи памяти. Lucene поддерживает много других вкусностей .

Однако, если вы хотите «свернуть свой» код и у вас достаточно памяти (вероятно, 1 ГБ), ваше приложение может:

  • разобрать файл в последовательность слов,
  • отфильтровать стоп-слова,
  • создает "обратный индекс" как HashMap<String, List<Integer>>, где значения String являются уникальными словами, а объекты List<Integer> дают смещения вхождений слов в файле.

Это может занять несколько секунд (или минут), чтобы обработать такой большой файл. Но как только вы создали обратный индекс в памяти, вы можете очень быстро выполнить поиск по вхождению. (Может быть, микросекунды за поиск.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...