1. Используйте regex и проверяйте на невалидные цепочки слов и знаков препинания внутри текста перед постингом и нормализуйте токены-разделители.
2. Проверяйте сами слова на валидные символы (и их цепочки), на ограничение длины и на содержание в стоп-листе.
источник<?php
$values = array(
'text???',
'???text',
'text???text',
'text ? ? ? ? ? text'
);
foreach ($values as $original_value) {
$value = preg_replace('/([?!.:,;]|\s)\1+/', '$1 ', $original_value);
echo $original_value . "\n" . $value . "\n\n";
}
Результатtext???
text?
???text
? text
text???text
text? text
text ? ? ? ? ? text
text ? text
Вот либа для русского языка:
TypographНа данный момент типограф умеет...Обрабатывать тексты в различных кодировках(требуется iconv).
Заменять кавычки на ёлочки.
Склеивать двойные кавычки.
Заменять знак дефиса или два знака дефиса подряд — на знак длинного тире.
Заменять знак дефиса, ограниченный с обоих сторон цифрами — на знак короткого тире.
Заменять множество пробелов или табуляций на один пробел.
Заменять х в выражениях вроде 10x10 на знак умножения.
Исправлять неправильную расстановку запятых.
Разносить неправильно расставленные кавычки.
Вставлять неразрывный пробел после инициалов, сцеплять инициалы.
Делать неразрывными названия организаций и аббревиатуры форм собственности.
Делать неразрывными имя собственное и относящееся к нему сокращение.
Не разделять 2007 г., ставить пробел, если его нет.
Сцеплять скобки со словами.
Заменять 1/2 1/4 3/4 на спецсимволы.
Следить за тем, чтобы предлоги и союзы не находились в конце строки.
Следить за тем, чтобы частицы бы, ли, же и т.д. не отрывались от предшествующего слова.
Форматировать русские денежные суммы, расставляя пробелы в нужных местах.
Заменять от 3-х до 5-и точек подряд на троеточие.
Притягивать к слову запятые, отделять пробелом от последующего слова.
Притягивать к слову восклицательный знак.
Делать замену для +-.
Обрабатывать вложенные кавычки.
Притягивание чисел к знаку умножения.
Запятые до «а» и «но».
Притягивание «;» к предшествующему слову.
Убирает лишние знаки: «??» в «?», «!!!!» в «!!!».
Правильные апострофы в «LO'Лайт».
Прямая речь.
Неразрывные IP-адреса.
Добавлю ещё, что если есть ограничение на количество символов в объявлении - то сразу лучше ограничить количество слов (2 буквы и более) не несущих смысл (союзы, предлоги и т.д.). Тогда текст объявлений будет
намного качественнее для ЛЮДЕЙ (и для поисковиков, конечно)!
Что такое заспамленность в целом (понятия: водность, тошнота текста и др.):
тут
Онлайн анализ текста:
здесь
Т.е. это должно работать сразу, до принятия объявления системой (т.е., обычно, до его публикации).