Автоматическое заполнение предложения с помощью Java

#java #autocomplete #sentence

#java #автозаполнение #предложение

Вопрос:

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

Я думал о запуске lucene in memory search , а затем о передаче результатов в suggestions set .

trigger Для запуска поиска будут space char и exit from the input field .

Я намерен использовать это с GWT , чтобы клиент с просто получал результаты с сервера.

Я не хочу делать то, что делает Google; где они дополняют каждое слово, а затем вносят предложения по каждому набору ключевых слов. Я просто хочу проверить ключевые слова и сделать предложения на основе этого. Вроде как когда я набираю заголовок для вопроса здесь, в stackoverflow.

Кто-нибудь делал что-то подобное раньше? Есть ли уже библиотека, которую я мог бы использовать?

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

1. Я хотел бы уточнить, что вы не имеете в виду поведение SuggestBox , вместо этого предложения представлены в отдельном элементе пользовательского интерфейса? Я мог бы посмотреть, как вы могли бы определить SuggestOracle, который предоставляет предложения, и настроить поле предлагать, чтобы предлагать только тогда, когда последнее изменение было символом пробела.

Ответ №1:

Я работал над аналогичным решением. Эта статья под названием «Эффективное предсказание фразы» была для меня весьма полезной. Вам также нужно будет расставить приоритеты для предложений

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

1. есть ли у этого Java-реализация, или вы можете предложить какой-нибудь открытый исходный код

Ответ №2:

Если у вас всего 1000 предложений, вам, вероятно, не нужен такой мощный индексатор, как lucene. Я не уверен, хотите ли вы выполнять предложения «завершить предложение» или «предложить другие запросы с теми же ключевыми словами». Предложения. Вот решения для обоих:

Предполагая, что вы хотите завершить предложение, введенное пользователем, тогда вы могли бы поместить все свои строки в SortedSet и использовать tailSet метод для получения списка строк, которые «больше», чем входная строка (поскольку компаратор строк считает более длинную строку, A которая начинается со string B , «больше», чем B ). Затем выполните итерацию по нескольким верхним элементам набора, возвращаемого tailSet , чтобы создать набор строк, в которых первые inputString.length() символы соответствуют входной строке. Вы можете остановить итерацию, как только первые inputString.length() символы не совпадут с входной строкой.

Если вы хотите использовать предложения по ключевым словам вместо предложений «завершить предложение», то накладные расходы зависят от длины ваших предложений и количества уникальных слов в предложениях. Если этот набор достаточно мал, вам сойдет с рук HashMap<String,Set<String>> , где вы сопоставили ключевые слова с предложениями, которые их содержали. Тогда вы могли бы обрабатывать многословные запросы, пересекая наборы.

В обоих случаях я бы, вероятно, сначала преобразовал все строки в нижний регистр (при условии, что это уместно в вашем приложении). Я также не думаю, что какое-либо из решений будет масштабироваться до сотен тысяч предложений. Делает ли любой из них то, что вы хотите? Рад предоставить код, если он вам понравится.