У меня возникла проблема при разработке моего веб-приложения, вот описание:
Это веб-приложение (все еще в альфа-версии) основано на пользовательском контенте (обычно это короткие статьи, хотя их длина может быть довольно большой, около четверти экрана), каждый пользователь отправляет не менее 10 таких статей, поэтому их число должно расти довольно быстро. По своей природе около 10% статей будут дублироваться, поэтому мне нужен алгоритм для их извлечения.
Я придумал следующие шаги:
- При отправке извлекает длину текста и сохраняет ее в отдельной таблице (
article_id
,length), проблема заключается в том, что статьи кодируются с помощью функции PHP special_entities(), а пользователи публикуют контент с небольшими изменениями (некоторые можно пропустить запятую, ударение или даже пропустить некоторые слова) - Затем извлеките все записи из базы данных с диапазоном длины =
new_post_length
+/- 5% (должен ли я использовать другой порог, имея в виду человеческий фактор при отправке статей?) - Получите первые 3 ключевых слова и сравните их со статьями, полученными на шаге 2.
- Имея окончательный массив с наиболее вероятными совпадениями, сравните новую запись, используя функцию PHP levenstein().
Этот процесс должен выполняться при отправке статьи, а не с использованием cron. Однако я подозреваю, что это создаст большие нагрузки на сервер.
Не могли бы вы дать какую-нибудь идею, пожалуйста?
Спасибо! Майк