Python数据挖掘-基于杰卡德相似系数的相似新闻推荐

使用Jaccard系数计算新闻相似度, 实现相似新闻推荐

  1. 最近想写一个推荐系统的Api, 有个性化推荐, 相似推荐, 热度推荐等, 于是就使用Django写了一个新闻网站当靶场, 目前实现了一个简单相似新闻推荐,记录下来.
先看看效果

在这里插入图片描述
这个是主页面, 我们现在点击一个新闻
在这里插入图片描述
这篇文章是前阵子报道罗老师的一篇文章, 我们看看会给我们推荐什么?
在这里插入图片描述
在这里插入图片描述
系统会推荐和罗老师相关的一些新闻

实现过程

1.后端使用Django
2.爬取新闻后使用jieba分词提取新闻关键字
3.计算新闻之间的杰卡德系数
4.将结果存储到数据库
5.用户点击相关新闻,查询后并渲染到页面上

一、使用jieba进行分词
    def get_key_words(self, data_info, data_id):
        """
        调用jieba分词来处理数据
        :param data_info:数据
        :param data_id:数据索引
        :return: {id: 分词的数据}
        """
        keywords = jieba.cut(data_info, cut_all=False)
        kws = list()
        for kw in keywords:
            if kw not in self.stop_words_list and kw != " " and kw != "  ":
                kws.append(kw)
        _result = (data_id, ",".join(kws))
        return _result

二、计算相关性
    def get_correlation(self, new_data):
        """
        计算相似度
        :param new_data: 新数据 (id, content)
        :return:
        """
        news_cor_list = list()  # 将结果保存到列表
        data = self.load_data()  # 加载数据中已有的数据{id: "分词的数据"}
        print(data)
        new_id, new_tags = new_data
        new_tags = set(new_tags.split(","))
        for data_id in data.keys():
            data_tags = set(data[data_id].split(","))
            cor = (len(new_tags & data_tags)) / len(new_tags | data_tags)
            print(new_tags, data_tags, cor)
            if cor > 0.0:
                news_cor_list.append([new_id, data_id, format(cor, ".2f")])  # [新数据索引, 原数据索引, 相关性数值]
        return news_cor_list

其中关键部分代码:

 cor = (len(new_tags & data_tags)) / len(new_tags | data_tags)

本项目使用django框架实现的,我附上项目链接

新闻推荐网站下载地址

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值