2013-06-08 2 views
5

У меня есть секретный сайт (в PHP и Mysql), где пользователи могут размещать свои объявления бесплатно. Но пользователи часто публикуют повторяющиеся объявления. Сценарий не позволяет им размещать точное дублирующее содержимое, поэтому они делают это, изменяя один или два символа.Как удалить дублирующее содержимое?

Есть ли способ найти дублирующее объявление и предупредить пользователя (даже если они изменили часть текста)?

Мой сайт находится в PHP и Mysql. Я использую sphix для поиска. Думая об изменении этого на mongodb и apache solr.

+0

Как далеко вы хотите проверить, не дублируется ли содержимое? Сколько персонажей? Вы можете работать с ограничением, которое люди могут размещать только один раз в неделю или около того. –

+0

Ваши пользователи добавляют поддельные параметры, т. Е. Http://foo.com/image.png?fakeparam=1? В этом случае вы можете отключить все параметры и учитывать только URL без параметров. Однако это не остановит людей от повторного загрузки одного и того же файла с другим именем ... –

+0

@ Alexander Cogneau Я буду рассматривать рекламу как дубликат, если содержание на 80% аналогично (за исключением стоп-слов, таких как is, the, was, там и т. д.). Нет, мы не можем ограничивать публикацию нескольких объявлений в тот же день. Мы можем вручную узнать дублирующее содержимое, отправленное в тот же день, но не можем выполнить поиск на одной неделе старых сообщений –

ответ

0

Вы можете написать функцию, которая разбивает предложение на слова, а затем сопоставляет каждое слово с таблицей, а затем находит процент соответствия в базе данных. На основе процента вы можете принять решение. Для более низкой проверки базы данных вы можете удалить общие слова и глаголы, которые вы можете сохранить в массиве. Это мое личное мнение, может быть, есть и другие лучшие методы. Но я должен сказать, что это хороший вопрос.

0

Levenstein расстояние, jarowinkler, алгоритмы плагиат .. Посмотрите их их на SO

Я хотел бы начать с простого Левенштеину расстояния

+0

Похоже, потребуется какой-то ручной контроль качества. Например, два разных пользователя могут опубликовать объявление о вакантных квартирах на одной и той же улице: '25 Lake Ave' и' 26 Lake Ave' - если вы используете расстояние Левенштейна, то это может означать одно дублирование. Однако дублирующиеся посты могут быть похожими на «25 Lake Ave' и« 25 Lake Avenue », у которых более высокое расстояние Левенштейна! – arun

Смежные вопросы