Не пытайтесь накатить собственное решение для этого, оно намного сложнее, чем вы ожидаете.Это действительно одна из тех вещей, как шифрование, где гораздо выгоднее передать это кому-то / чему-то, что действительно хорошо в этом работает.Вот некоторая предыстория для вас.
Расстояние Левенштейна, безусловно, полезно знать (вы никогда не знаете, когда метрика подобия пригодится), но это не то, что нужно использовать для этого конкретногопроблема.
Байесовский классификатор гораздо ближе к тому, что вы ищете.Фактическое обнаружение спама является в значительной степени каноническим примером того, как наивный байесовский классификатор может сделать огромную работу.Сказав, что вам нужно будет найти большую коллекцию данных (сообщений), которые были классифицированы как спам и не спам, и это похоже на типы сообщений, которые вы получаете на своем сайте.Затем вам необходимо обучить ваш классификатор и измерить его эффективность.Вам нужно настроить его и убедиться, что вы не переопределяете его и т. Д. Хотя Classifier :: Bayes - достойная базовая реализация, он не окажет вам большой поддержки.Infact Ruby страдает от недостатка хороших библиотек обработки естественного языка.В Ruby нет ничего, что можно было бы сравнить с NLTK в Python.
Сказав все это, такие службы, как akismet, безусловно, будут иметь байесовский классификатор в качестве одного из инструментов, которые они используют, чтобы определить, является ли то, что вы отправляете им, спамом или нет.,Этот классификатор, вероятно, будет гораздо более сложным, чем то, что вы можете построить самостоятельно, если только по той причине, что они также имеют доступ к такому количеству данных.У них, вероятно, также есть другие типы классификаторов / алгоритмов, которые они будут использовать, в конце концов, это их основной бизнес.
Короче говоря, на вашем месте я бы посмотрел что-то вроде Акисмета.Если вы создадите на своем сайте средство, где вы или ваши пользователи смогут помечать сообщения как спам (например, с помощью метода spam!
rakismet), вы сможете отправить эти данные в akismet, и служба должна довольно быстро узнать, что конкретныйТакое сообщение является спамом.Поэтому, если ваши пользователи отправляют много похожих сообщений со спамом, даже если akismet не сразу их забирает, после того, как вы отметите пару из них, все остальные должны быть подобраны автоматически.Если бы я был тобой, я бы сосредоточил свои усилия на экспериментировании в этом направлении, а не пытался найти собственное решение.