python根据词向量计算相似度_文章推荐系统 | 五、计算文章相似度

在上篇文章中,我们已经完成了离线文章画像的构建,接下来,我们要为相似文章推荐做准备,那就是计算文章之间的相似度。首先,我们要计算出文章的词向量,然后利用文章的词向量来计算文章的相似度。计算文章词向量我们可以通过大量的历史文章数据,训练文章中每个词的词向量,由于文章数据过多,通常是分频道进行词向量训练,即每个频道训练一个词向量模型,我们包括的频道如下所示channel_info = {1: "htm...
摘要由CSDN通过智能技术生成

在上篇文章中,我们已经完成了离线文章画像的构建,接下来,我们要为相似文章推荐做准备,那就是计算文章之间的相似度。首先,我们要计算出文章的词向量,然后利用文章的词向量来计算文章的相似度。

计算文章词向量

我们可以通过大量的历史文章数据,训练文章中每个词的词向量,由于文章数据过多,通常是分频道进行词向量训练,即每个频道训练一个词向量模型,我们包括的频道如下所示

channel_info = {

1: "html",

2: "开发者资讯",

3: "ios",

4: "c++",

5: "android",

6: "css",

7: "数据库",

8: "区块链",

9: "go",

10: "产品",

11: "后端",

12: "linux",

13: "人工智能",

14: "php",

15: "javascript",

16: "架构",

17: "前端",

18: "python",

19: "java",

20: "算法",

21: "面试",

22: "科技动态",

23: "js",

24: "设计",

25: "数码产品",

}

接下来,分别对各自频道内的文章进行分词处理,这里先选取 18 号频道内的所有文章,进行分词处理

spark.sql("use article")

article_data = spark.sql("select * from article_data where channel_id=18")

words_df = article_data.rdd.mapPartitions(segmentation).toDF(['article_id', 'channel_id', 'words'])

def segmentation(partition):

import os

import re

import jieba

import jieba.analyse

import jieba.posseg as pseg

import codecs

abspath = "/root/words"

# 结巴加载用户词典

userDict_path = os.path.join(abspath, "ITKeywords.txt")

jieba.load_userdict(userDict_path)

# 停用词文本

stopwords_path = os.path.join(abspath, "stopwords.txt")

def get_stopwords_list():

"""返回stopwords列表"""

stopwords_list = [i.strip() for i in codecs.open(stopwords_path).readlines()]

return stopwords_list

# 所有的停用词列表

stopwords_list = get_stopwords_list()

# 分词

def cut_sentence(sentence):

"""对切割之后的词语进行过滤,去除停用词,保留名词,英文和自定义词库中的词,长度大于2的词"""

# eg:[pair('今天', 't'), pair('有', 'd'), pair('雾', 'n'), pair('霾', 'g'

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值