Ищете статьи на тему, как работает рифма, создаёте набор правил, присваиваете им ранг, ищете по этим правилам слова в словаре и выдаёте пользователю, отсортировав по рангу.
Первое, что приходит в голову: берём словарь ударений отрезаем от слова из запроса всё окончание, начиная с ударной гласной, ищем по словарю слова с таким же окончанием и той же ударной гласной. "красивый" — "сивый". Это будет первый ранг
Второй ранг будет немного изменённое окончание. Например, если пользователь ввёл слово "кратный", можно заменить "а" на "я" и найти, например "приятный". "у" на "ю" — "подруга", "вьюга".
Третий ранг можно сделать ещё более мягким, например, в окончании может присутствовать одна дополнительная согласная, или порядок согласных может различаться.
Это только что пришло сходу в голову. База данных со словарём, RegEx в руки и вперёд
***
UPD: В сервисе у вас по ссылке вообще всё примитивно. Они выводят сначала то, что я описал выше как первый ранг, а потом отрезают от окончания по одной букве и ищут такие же окончания. Бред, это уже не рифмы