Кажется, есть две части. Вычисление достойного алгоритма и реализация его в Java. (На данный момент давайте отбросим идею, что, безусловно, «там» кто-то уже реализовал это, и вы, вероятно, найдете некоторые идеи.)
Похоже, мы хотим избежать повторной дорогой работы. но неясно, где будут стоить расходы. Поэтому, я думаю, вам нужно быть готовым оценить несколько кандидатских оценок. Также имейте в виду, что «достаточно хорошо».
Начните с простейшей вещи, о которой вы можете думать, что работает. Измерьте это. Вы можете получить удивительный результат, что он достаточно хорош. Остановись прямо там! Например, это действительно немой:
read text into String (4k, that's not too big)
for each term
use regexp to find matches in text
, но он вполне может дать время ответа второй секунды. Будут ли ваши пользователи действительно заботиться, если вы ответили 200 мс до 100 мс? Сколько бы они заплатили за это?
Другой подход. Интересно, это быстрее?
prepare a collection of terms keyed by first word
tokenize the text
for each token
find terms that match
check for match (using look ahead for multi-word terms)
Что касается реализации на Java. Отдельная проблема задает конкретные вопросы, если вам нужно.
Звучит хорошо. Итак, что вы сделали, чтобы попытаться решить это? – AlbertoPL