智能文章系统实战-人工智能机器学习之内容推荐(12)
admin 发布于:2018-7-1 10:49 有 1903 人浏览,获得评论 0 条
1. 安装环境
#pip3 install pymysql #pip3 install jieba #pip3 install numpy #pip3 install scipy #pip3 install sklearn #pip3 install pandas
2.内容推荐代码代码
#!/usr/bin/env python #-*- coding:utf-8 -*- #安装环境 #pip3 install pymysql #pip3 install jieba #pip3 install numpy #pip3 install scipy #pip3 install sklearn #pip3 install pandas #引入库 import pandas as pd #分词 import pymysql.cursors #数据库 import re #正则过滤 import jieba #分词 from sklearn.feature_extraction.text import TfidfVectorizer #结构化表示--向量空间模型 from sklearn.metrics.pairwise import linear_kernel #初始化内容和分类的列表 dataList=[] #定义函数,HTML转化为分词后用空格分离的字符串 def htmlToWords(html): reObject = re.compile(r'<[^>]+>',re.S) #过滤HTML text = reObject.sub('',html) #过滤\r\n text = re.sub('\t|\n|\r','',text) #分词 words=jieba.cut(text) #把分词数组组成字符串返回 return " ".join(words) # 连接MySQL数据库 connection = pymysql.connect(host='localhost', port=3306, user='root', password='', db='article', charset='utf8', cursorclass=pymysql.cursors.DictCursor) # 通过cursor创建游标 cursor = connection.cursor() # 执行数据查询 sql = "SELECT `id`, `title`,`content` FROM `article` order by id desc limit 200" cursor.execute(sql) #查询数据库多条数据 result = cursor.fetchall() for data in result: #HTML转化为分词后用空格分离的字符串赋值给words,此处以 标题title 进行相似度计算,也可以 文章内容content 进行相似度计算. item={'id':data['id'],'words':htmlToWords(data['title'])} dataList.append(item) #创建数据集 ds = pd.DataFrame(dataList) #将文本数据转化成特征向量 tf = TfidfVectorizer(analyzer='word', min_df=0, stop_words='english') tfidf_matrix = tf.fit_transform(ds['words']) #人工智能进行相似度计算 cosine_similarities = linear_kernel(tfidf_matrix, tfidf_matrix) #print(cosine_similarities) #相似结果列表 resultList={} #每篇文章和其他文章的相似度 for idx, row in ds.iterrows(): #排序倒序,取前 5 篇文章相似的 similar_indices = cosine_similarities[idx].argsort()[:-6:-1] #输出每篇文章相似的文章ID和文章相似度 similar_items = [(cosine_similarities[idx][i], ds['id'][i]) for i in similar_indices] #用字典存储每篇文章ID对应的相似度结果 resultList[row['id']]=similar_items #输出每篇文章ID对应的相似度结果 #print(resultList) #数据和文章ID=14 标题相似的 文章标题 resultDs=resultList[14] print("标题相似的结果: ",resultDs) for row in resultDs: #输出相似度>0的文章 if row[0]>0: # 执行数据查询 sql = "SELECT `id`, `title` FROM `article` WHERE id='%d' LIMIT 1"%(row[1]) cursor.execute(sql) data = cursor.fetchone() #打印结果 print(data) print("相似度=",row[0]) # 关闭数据连接 connection.close()
3. 结果输出
[root@bogon python]# python3 recommend.py Building prefix dict from the default dictionary ... Loading model from cache /tmp/jieba.cache Loading model cost 1.564 seconds. Prefix dict has been built succesfully. 标题相似的结果: [(1.0, 14), (0.23201380925542303, 67), (0.215961061528388, 11), (0.09344442103258274, 29), (0.0, 1)] {'id': 14, 'title': '个税大利好!起征点调至每年6万 增加专项扣除'} 相似度= 1.0 {'id': 67, 'title': '个税起征点拟上调至每年6万 第7次修正百姓获益几何?'} 相似度= 0.23201380925542303 {'id': 11, 'title': '个税起征点提高利好买房?月供1万个税可降2000多元'} 相似度= 0.215961061528388 {'id': 29, 'title': '个税起征点拟提至每月5000元 月薪万元能省多少?'} 相似度= 0.09344442103258274 [root@bogon python]#