Автозаполнение предложения с Java - PullRequest
3 голосов
/ 08 июня 2011

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

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

trigger для выполнения поиска будет space char и exit from the input field.

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

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

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

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

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

1 голос
/ 10 июня 2011

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

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

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

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

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