Самый простой способ сделать это - иметь таблицу известных тегов. Перебирайте каждое слово в сообщении, и, если слово находится в таблице тегов, добавьте его в список. Чтобы сделать это немного более эффективным, вы можете сохранить тег как в его отображаемой, так и в исходной версии (например, алгоритмы и алгоритм). Затем сравнил слова в заголовке с именем тега. См. Алгоритм определения портера для простого способа сделать это (для английских слов).
Более эффективное решение будет использовать что-то вроде TF-IDF и ассоциировать векторы с каждым тегом. Создайте вектор для нового поста и сравните его с каждым вектором тегов, используя косинусное сходство. Какие бы теги не превышали определенный порог, они будут добавлены в сообщение. Я никогда не использовал его для автоматической пометки, но по моему опыту это очень эффективный инструмент сопоставления при работе с несанкционированными данными. (то есть люди не пытаются обмануть или обмануть систему.)
Оба эти метода предполагают, что у вас уже есть какой-то словарь тегов, созданный для начала. Вы можете угадать имена тегов, посмотрев, какие необычные слова (для этого нужна таблица частот) часто используются в посте.