Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Java автодополнение в консоли используя статистику списка слов

#java #сортировка #поиск #консоль

                    
Цель - создание консольного Линукс/Win приложения с автодополнением текста используя
файл статистики слов. 

Пример файла статистики:

бумага 223
утро 114
утюг 513
уран 22
тепло 144


Всего около 100000+ слов

Какой наилучший алгоритм для поиска и как лучше отсортировать считанные с файла слова
с их статистикой?

Я думаю записать слова для каждой первой буквы в отдельный список List типа ключ-значение
(SortedMap-TreeMap?) с сортировкой по значению, и разместить те списки в ArrayList.
Когда пользователь начинает писать слово, список с его соответственный его первой букве
сканируется на подходящие слова и они выдаются с сортировкой по значению. Это хороший
способ? как практически лучше это написать, используя что из коллекций и какой алгоритм?
    


Ответы

Ответ 1



Собственно есть два быстрых пути. Можно реализовать, перенеся твой справочник в таблицу БД create table dictonary (word Varchar(30) primary key, cost integer not null) Тогда поиск будет сводиться к select word from dictonary where word like 'начало_твоего_слова%' order by cost desc Встроенные базы довольно шустрые (H2, HSQLDB) Но если тебе надо использовать только java, то используй TreeMap. Только для начала оговоримся, что все твои слова должны содержать только русские буквы (привет кэп), и желательно только нижнего регистра. Далее остается использовать метод subMap, но с одной хитростью. Если ты ищешь слова начинающиеся с бу, то тебе надо передавать параметры в submap в виде бу\u040f (в конце символ, код которого меньше кода первой буквы алфавита) и бу\u0450 (в конце символ, код которого больше кода последней буквы алфавита). Хитрость, но работает. Плюс тебе придётся сортировать результат, согласно статистике повторений слова.

Комментариев нет:

Отправить комментарий