Насчет корней не знаю. Есть алгоритм
Snowball https://snowballstem.org/demo.html#Russian
Он делает примерно то что нужно. Например сводит облако-облак. Сводит разные слова к основе.
А то что не смог свести ты можешь попробовать сам дописать в справочник или добавить свои суффиксы.
И у него есть несколько готовых реализаций на C#/Java. Я думаю что кто-то уже делал реализацию для PHP.