Нечеткий поиск подстроки в строке

429
07 февраля 2017, 19:49

Здравствуйте. Необходимо реализовать на Java поиск подстроки в строке. Т.е. строка "Разница между родившимися и умершими" должна быть найдена в строке "Разность между числом родившихся и числом умерших за определенное время (например, за один год) называют естественным приростом населения."

А строка "Ивановыми" должна быть найдена в строке "Иванов - древнейший житель города"

Необходим лишь ответ - есть ли что-то похожее в строке. Посоветуйте что-нибудь, желательно уже реализованное на Java.

Answer 1

Грубо говоря это делается в 3 шага:

  1. Разбиваем строку на лексемы/слова
  2. Полученные лексемы прогоняем через Apache Lucene c русской морфологией - в итоге получаем список лексем очищенный от падежных/родовых и прочих морфологичечких признаков характерных для великого могучего, то есть вместо:

Разность между числом родившихся и числом умерших за определенное время

получим

Разница между число родить и число умереть за определенный время

  1. Далее для этих лексем вычисляем хэш функцию умеющую выдавать близкие значения хэша для похожих слов - например SimHash или что-то вроде упомянутого Левенштейна

Остальное надеюсь объяснять не надо.

READ ALSO
Активировать код на нажатие клавиши

Активировать код на нажатие клавиши

То есть надо сделать так, чтоб вместо ожидания 15 секунд, было ожидание нажатия определенной клавишиНапример я запускаю программу, наживаю...

388
RecyclerView - айтемы, не имеющие позиции

RecyclerView - айтемы, не имеющие позиции

Сделал сетку 10*10 с помощью RecyclerView + GridLayoutManagerВ разметку хочу добавить буквы от А до К над сеткой и цифры от 1 до 10 слева от сетки

472
mysql в java,как получить значение из столбца [требует правки]

mysql в java,как получить значение из столбца [требует правки]

доброго времени суток!есть такая проблема:я хочу присоединится с бд?И получить значения допустим строку,и если можно-посоветуйте книгу для...

458
Как правильно работать с классами, не имеющимися в Android SDK?

Как правильно работать с классами, не имеющимися в Android SDK?

Например мне нужно выдвинуть строку состояния (статусбар)Для этого есть метод expand в классе StatusBarManager

355