Определение схожести тематики текстов по тегам

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

CREATE TABLE IF NOT EXISTS `tags` (
  `tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `content_type` enum('news','article') NOT NULL,
  `tag_name` varchar(120) NOT NULL,
  `tag_counter` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Number of tag in all texts',
  PRIMARY KEY (`tag_id`),
  UNIQUE KEY `content_type` (`content_type`,`tag_name`),
  KEY `tag_counter` (`tag_counter`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


и

CREATE TABLE IF NOT EXISTS `tagstat` (
  `tag_id` int(10) unsigned NOT NULL,
  `content_type` enum('news','article') NOT NULL,
  `content_id` int(10) unsigned NOT NULL,
  `tag_counter` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Number of tag in certain text',
  KEY `content_type` (`content_type`,`content_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


В конце концов у нас есть теги статьи, кол-во вхождений тега в статье, общее кол-во вхождений тега по всем текстам. Как бы теперь получить схожие статьи?
Пробовал метод Jaccard similarity/index, уж очень «долгий» запрос получается
  • Вопрос задан
  • 3718 просмотров
Пригласить эксперта
Ответы на вопрос 1
@moonsly
Странный подход для определения схожести текстов. Записывая только частоту «тегов», вы нарушаете последовательность слов в предложениях, и результат будет скорее отражать схожесть частот слов в статьях, а не их реальную схожесть по тексту. Две разных по контенту статьи, но с одинаковыми частотами слов-тегов в них (например, на одну тематику) — по вашему алгоритму будут «схожи».
Для подобной задачи (определение схожести текстов) чаще применяется и более эффективен алгоритм шинглов: www.codeisart.ru/python-shingles-algorithm/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы