Думаю любой алгоритм будет давать ошибку
Как вариант: Удалить все пробелы и не цифро-буквенные символы, привести к одному регистру и сложить коды символов. Получится слабое подобие хэша. таким образом можно найти все совпадения вне зависимости от перестановки слов. Если в позициях будет "шоколад" и "шоколадка", то этот метод покажет несовпадение. Для учета и этого различия, можно запустить предварительную авто-замену однокоренных слов на какое-то определенное значение.
Ну и дальше можно разные авто-замены придумывать, для приближения к идеалу.
Но вероятность ошибки все равно остается.