Как найти дубликаты новостей, полученных из разных источников?

Ссылка скопирована
1 ответ

Добрый день.
Есть источники информации, публикующие одну и ту же новость, но в разное время и с разным описанием.
Есть база данных/кэш, содержащих только уникальные новости.
Необходимо распознавать дубликаты новостей, т.е. если данная новость (её контекст) уже есть в БД, то новость игнорируем. Если нет - добавляем в БД/кэш.

Например, источник А опубликовал новость.
Необходимо её сравнить по контексту (смыслу) с новостями из БД/кэша (предполагаем, что надо сравнивать не со всеми новостями, а с публикациями за последние несколько суток).
Как это сделать?

Дополнительно:

Ответы:

Так-же как и в индексировании документов. Строится некое векторное представление документа.
И потом похожие векторы - указывают на одинаковые (99.9%) документы. Методик векторизации
много. В основном это токенизация слов и свертывание их к хешу.

  • Не могли бы Вы порекомендовать ресурсы (книги, сайты, документацию) для детального изучения данного варианта решения проблемы?
    Заранее спасибо.
  • Dahock, я не помню чтоб я читал какую-то книгу про это. Поищи по ключевым словам vector database,
    text search, word2vec, tf-idf, HNSW
    .

    Из программных продуктов. Postgres, Redis, Apache Spark, Apache Lucene, Sphinx . Они могут поддерживать
    какие-то алгоритмы или принципы поиска документов по подобию.

в таких ситуациях разумно использовать метод косинусного сходства

from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity  # Пример вычисления косинусного сходства для двух текстов text1 = "какая-то новость и ее описание" text2 = "какая-то новость и ее описание (дубль)"  # Создаем объект CountVectorizer для преобразования текстов в векторы vectorizer = CountVectorizer().fit([text1, text2]) vectorized_text = vectorizer.transform([text1, text2])  # Вычисляем косинусное сходство между векторами cosine_sim = cosine_similarity(vectorized_text)

from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity # Пример вычисления косинусного сходства для двух текстов text1 = "какая-то новость и ее описание" text2 = "какая-то новость и ее описание (дубль)" # Создаем объект CountVectorizer для преобразования текстов в векторы vectorizer = CountVectorizer().fit([text1, text2]) vectorized_text = vectorizer.transform([text1, text2]) # Вычисляем косинусное сходство между векторами cosine_sim = cosine_similarity(vectorized_text)

после просто ставишь if cosine_sim > 95(%) и удаляешь дубликат

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Елена Вебер Ответ

Для поиска дубликатов новостей, полученных из разных источников, можно воспользоваться алгоритмом сравнения текстов на сходство. Вот примерный алгоритм, который можно реализовать на языке программирования PHP:

```php
function findDuplicateNews($news1, $news2) {
similar_text($news1, $news2, $percent);

if ($percent > 80) { // Задаем порог сходства, например, 80%
return true; // Новости считаются дубликатами
} else {
return false; // Новости не являются дубликатами
}
}

$news1 = "Новость 1...";
$news2 = "Новость 2...";

if (findDuplicateNews($news1, $news2)) {
echo "Новости являются дубликатами";
} else {
echo "Новости не являются дубликатами";
}
```

Этот код использует функцию `similar_text`, которая сравнивает две строки и возвращает процент сходства между ними. Затем устанавливается порог сходства (например, 80%), при котором новости считаются дубликатами.

Если процент сходства превышает установленный порог, то новости считаются дубликатами. В противном случае, они не являются дубликатами.

Этот алгоритм можно расширить, добавив обработку большего количества новостей и использование других методов сравнения текстов, таких как хэширование или анализ семантики предложений.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно