文章推荐系统(三) | 构建离线文章画像

前面我们已经计算得到tfidf的结果‘tfidf_keywords_values’和textrank的结果‘textrank_keywords_values’。
下面要计算基于tfidftextrank计算离线文章画像

所谓文章画像,就是给文章定义一些主题词和关键词,用来代表这篇文章。
关键词和主题词最大的区别在于

  • 主题词是经过规范化处理的。
  • 关键词是文章中权重较高的词。

这个项目中,我们采用tfidf和textrank两种方式得到了每篇文章两组权重前20的词组,对于如何确定主题词和关键词,我们处理的方式是:
1) 关键词:textrank处理的topN个词,其权重乘以对应词的逆文档频率(较少个别意义不大的词在多个文档中出现导致权重过高)
2) 主题词:textrank和tfidf计算结果的共同出现的词

一、文章关键词

因为我们是将每篇文章的textrank处理得到的topN个词乘以idf,消除在多篇文章出现的词带来的权重影响,所以要分别加载textrank_keywords_values和idf_keywords_values

# 加载idf逆文档频率
idf = ktt.spark.sql("select * from idf_keywords_values") # 
# 加载textrank_keywords_values
textrank_keywords_df = ktt.spark.sql("select * from textrank_keywords_values")
# 重命名idf的keyword列为keyword1
idf = idf.withColumnRenamed("keyword", "keyword1")   

# 按照keyword关键词作连接,相当于在textrank结果右边补充对应词的逆文档频率
result = textrank_keywords_df.join(idf,textrank_keywords_df.keyword==idf.keyword1)

# 利用withcolumn方法新增‘weights’列,数据=textrank词权重X该词的idf,最后只选择需要的列
keywords_res = result.withColumn("weights", result.textrank * result.idf).select(["article_id", "channel_id", "keyword", "weights"])

在这里插入图片描述
以上计算已经得到最终的结果,但是每篇文章的每个关键词和权重都是单独一列,因此利用文章id进行聚合,将关键词结果放在一起,让结果以字典形式展现

# spark sql的dataframe注册临时表temptable,方便用sql语句操作
keywords_res.registerTempTable("temptable")  

# 根据文章id进行分组,一篇文章的所有textrank关键词用collect_list聚合成list,weights同理
merge_keywords = ktt.spark.
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值