поиск в списке десятков или нескольких сотен коротких текстовых строк, сортировка по релевантности - PullRequest
0 голосов
/ 26 августа 2010

У меня есть список людей, которых я хотел бы найти.Мне нужно знать, «насколько» каждый элемент соответствует строке, с которой он тестируется.

Список довольно мал, в настоящее время более 100 имен, и в ближайшее время он, вероятно, не достигнет 1000.
Поэтому я предположил, что было бы хорошо сохранить весь список в памяти и выполнить поиск, используя что-то, что предлагает Java из коробки, или используя небольшую библиотеку, которая просто реализует один или два алгоритма тестирования.(Другими словами, без привлечения какого-либо сложного / избыточного решения, которое хранит индексы или опирается на базу данных.)

Что бы вы выбрали в таком случае, пожалуйста?

РЕДАКТИРОВАТЬ: Похоже, Левенштейнближе всего к тому, что мне нужно из того, что было рекомендовано.Только это легко обмануть, если поисковый запрос «Джон» и имена в списке значительно длиннее.

Ответы [ 4 ]

1 голос
/ 16 ноября 2011

По моему мнению, алгоритм Jaro-Winkler будет лучше всего соответствовать вашим требованиям. Вот краткое изложение расстояния Яро-Винклера Один из PDF, который сравнивает различные алгоритмы -> Ссылка на PDF

1 голос
/ 26 августа 2010
1 голос
/ 27 августа 2010

Вы должны взглянуть на различные алгоритмы сравнения строк и посмотреть, какой из них лучше всего подходит для ваших данных.Возможные варианты: Джаро-Винклер, Смит-Уотерман и т. Д. Посмотрите SimMetrics - библиотека F / OSS, которая предлагает очень полный набор алгоритмов сравнения строк.

1 голос
/ 26 августа 2010

Если вы ищете совпадение «сколько», вы должны использовать Soundex . Здесь - реализация этого алгоритма на Java.

...