Как стать автором
Обновить

Комментарии 10

А как у Вас rss-потоки привязываются? Или это пока только разработки.
Загрузка из rss потоков уже давно в продакшене. А зечем их привязывать, просто запрашивается rss-xml по известному адресу и парсится. Вот, например, адрес rss-xml для Ленты.ру: lenta.ru/rss/news
Где-нибудь это описано? (Я имею ввиду привязку rss-потока к каналу на surfingbird)
Нет, к сожалению, не описано.

Заведите сначала канал surfingbird.ru/publishers, и если он пройдет модерацию, попросите добавлять ссылки через RSS.
Правда, вы должны понимать, мы фильтруем контент довольно строго и модерацию можно и не пройти. Или пройти, но контент может нам все же понравиться недостаточно, чтобы добавить RSS.
Логика тут такова, что каждый RSS — это ручной (полуручной, но все же) труд модератора по простановке категорий.
Причина в том, что алгоритм поиска шинглов более сложный в реализации, чем представленные в статье. Если результаты внедрения более простых алгоритмов нас не устроят, будем двигаться дальше и рассмотривать более сложные алгоритмы определения плагиата (об этом в статье упомяналось)
Если честно, немного удивительно, что Вы используете модель мешка слов, ведь она не учитывает порядок слов.

На самом деле, реализация алгоритма шинглов использует тот же коэффициент Жаккара. Только в данном случае, вместо слов, оперируют шинглами (на практике — хэшами шинглов, но это уже детали...).

Попросту говоря, шинглы — это кортежи из нескольких слов, построенные следующим образом (рисунок схематический):

Чисто иллюстративный пример:

  • слон ест красное яблоко
  • яблоко ест красного слона

(у некоторых слов разные окончания, но будем считать, что в качестве предварительной обработки мы используем лемматизатор).

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

Что на это скажет алгоритм шинглов:

Если использовать в качестве шинглов — кортежы слов, взятых через одно, получим:
  • слон ест красное яблоко -> A = {слон, красный} и {ест, яблоко}
  • яблоко ест красного слона -> B = {яблоко, красный} и {ест, слон}

Множества А и В не содержат одинаковых кортежей. Поэтому, пересечение A и B, даст пустое множество. Таким образом, можно заключить что данные тексты не дубликаты.

Ещё раз обращаю внимание — пример чисто иллюстративный, но, надеюсь, что общую концепцию мне удалось проиллюстрировать :-)

P.S. На самом деле, именно характер данных, их объём и другие особенности предметной области диктуют алгоритм обработки. Так что, если в Вашем случае описанный алгоритм работает хорошо, то, действительно, не стоит усложнять систему.

В данном комментарии, я просто хотел показать, что в общем случае Алгоритм шинглов более эффективный для идентификации дубликатов.
Спасибо за такой развернутый комментарий. Да, действительно у модели мешка слов есть ряд недостатков. Главное же его преимущество — существенное упрощение предварительной обработки и дальнейшего анализа. Мы используем эту модель для обучения LDA, т.к. в тематических вероятностных моделях игнорирование порядка слов не является столь критичным. А выявление двойников — это побочная задача, которою хотелось решить наименьшей кровью… Вообще, мы уже начинали прорабатывать тему выделения ключевых словосочетаний из текста, вместо отдельных слов. Была попытка использовались API различных готовых систем, которые выделют ключевые фразы из текста. Я думаю, в ближайшее время мы продолжим работу в этом направлении, еще раз спасибо за ценный комментарий.
Желаю Вам успехов! :-)
О, математические формулы, здорово.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий