H>Я бы взял whitelist слов с морфологией и т.д. и т.п. (например здесь) и blacklist корней. Если слово содержит корень и не из белого списка, то это мат.
Точно так же делал свой. Вот мысли у умных людей сходятся! Однако загвоздка была с базой whitelist слов с
морфологией. Не так то просто её сделать.