Я использую векторизацию. Через популярные библиотеки получаю вектора текстов, фраз. А далее условно попарно сравниваю вектора, находя их скалярное произведение. Если оно становится больше некоторого заданного значения (в ряде случаев 0,4 вполне достаточно), то эти вектора уже образуют некоторый сгусток векторов, объединяю эти фразы, убирая из общей массы и продолжа дальше сравнивать с другими фразами в исходном массиве. Если опять больше 0,4, то и эту фразу добавляю в текущий сгусток. А далее уже с новыми фразами оставшимися. В итоге формируется несколько сгустков близких фраз.