基于TF-IDF+TensorFlow+词云+LDA 新闻自动文摘推荐系统—深度学习算法应用(含ipynb源码)+训练数据集

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • Python 环境
    • TensorFlow环境
      • 方法一
      • 方法二
  • 模块实现
    • 1. 数据预处理
      • 1)导入数据
      • 2)数据清洗
      • 3)统计词频
    • 2. 词云构建
    • 3. 关键词提取
    • 4. 语音播报
    • 5. LDA主题模型
    • 6. 模型构建
  • 系统测试
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

本项目运用了TF-IDF关键词提取技术,结合词云数据可视化、LDA (Latent Dirichlet Allocation)模型训练以及语音转换系统,来实现一个基于TensorFlow的文本摘要程序。

首先,我们利用TF-IDF(Term Frequency-Inverse Document Frequency)技术来提取文本中的关键词。这有助于找出文本中最具代表性的词汇,为后续的摘要提取提供了重要的信息。

其次,我们运用词云数据可视化技术,将关键词以视觉化的方式展示出来。这能够帮助用户直观地理解文本的重点和关注点。

接下来,我们使用LDA模型进行训练,这是一种用于主题建模的技术。通过LDA模型,我们能够发现文本中隐藏的主题结构,从而更好地理解文本内容的分布和关联。

最后,我们将这些技术结合在一起,创建了一个基于TensorFlow的文本摘要程序。这个程序可以自动提取文本的关键信息、主题结构,并生成简明扼要的文本摘要。

另外,我们还融合了语音转换系统,使得生成的文本摘要能够通过语音方式呈现,提升了用户的体验和使用便捷性。

通过这个项目,我们能够将多种技术融合在一起,实现一个功能强大的文本摘要程序,为用户提供更便捷、直观的文本理解和获取体验。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述

运行环境

本部分包括 Python 环境和TensorFlow环境。

Python 环境

需要Python 3.6及以上配置,在Windows环境下推荐下载Anaconda完成对Python环境的配置,下载地址为https://www.anaconda.com/。也可下载虚拟机在Linux环境下运行代码。

TensorFlow环境

安装方法如下:

方法一

打开Anaconda Prompt,输入清华仓库镜像。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config -set show_channel_urls yes

创建Python 3.6的环境,名称为TensorFlow,此时Python版本和后面TensorFlow的版本有匹配问题,此步选择Python 3.x。

conda create -n tensorflow python=3.6

有需要确认的地方,都输入y。在Anaconda Prompt中激活TensorFlow环境:

conda activate tensorflow

安装CPU版本的TensorFlow:

pip install -upgrade --ignore -installed tensorflow

测试代码如下:

import tensorflow as tf
hello = tf.constant( 'Hello, TensorFlow! ')
sess = tf.Session()
print sess.run(hello)
# 输出 b'Hello! TensorFlow'

安装完毕。

方法二

打开Anaconda Navigator,进入Environments 单击Create,在弹出的对话框中输入TensorFlow,选择合适的Python版本,创建好TensorFlow环境,然后进入TensorFlow环境,单击Not installed在搜索框内寻找需要用到的包。例如,TensorFlow,在右下方选择apply,测试是否安装成功。在Jupyter Notebook编辑器中输入以下代码:

import tensorflow as tf
hello = tf.constant( 'Hello, TensorFlow! ')
sess = tf.Session()
print sess.run(hello)
# 输出 b'Hello! TensorFlow'

能够输出hello TensorFlow,说明安装成功。

模块实现

本项目包括6个模块:数据预处理、词云构建、关键词提取、语音播报、LDA主题模型、模型构建,下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

在清华大学NLP实验室推出的中文文本数据集THUCNews中下载,下载地址为https://github.com/gaussic/text-classification-cnn-rnn。共包含5000条新闻文本,整合划分出10个候选分类类别:财经、房产、家居、教育、科技、时尚、时政、体育、游戏、娱乐。

1)导入数据

通过jupyter notebook来实现,相关代码如下:

#导入相应数据包
import pandas as pd
import numpy as np
#数据的读入及读出
df_news=pd.read_table("./cnews.val.txt",names=["category","content"])
df_news.head()

从文件夹读出相应的数据,分别表示新闻数据的类别及内容,如图所示。

#数据的类别及总量
df_news.category.unique()
df_news.content.shape
#为方便后续对数据的处理,将原始表格型据结构转换成列表格式
content_list=df_news.content.values.tolist()

在这里插入图片描述
数据类别处理代码编译成功,如图所示。

在这里插入图片描述

2)数据清洗

新闻文本数据中不仅包括了中文字符,还包括了数字、英文字符、标点等,分词是中文文本分析的重要内容,正确的分词可以更好地构建模型。中文语料中词与词之间是紧密相连的,这一点不同于英文或者其他语种的语料,因此,不能像英文使用空格分词,而是使用jieba库中的分割方法。

#jieba分词
content_fenci = [] #建立一个空的
for line in content_list:text = jieba.lcut(line) #给每一条都分词if len(text) > 1 and text != '\r': #换行content_fenci.append(text)  #将分词后的结果放入
#content_fenci[0]   #分词后的一个样本     
df_content=pd.DataFrame({'content':content_fenci})
df_content.head()

分词后结果如图所示。

在这里插入图片描述

#导入停用词
def drop_stopwords(contents,stopwords):content_clean = [] #放清理后的分词all_words = []for line in contents:line_clean=[]for word in line:if word in stopwords:continueline_clean.append(word)all_words.append(str(word))content_clean.append(line_clean)return content_clean,all_words
content_clean,all_words = drop_stopwords(content_fenci,stopwords_list,)
df_clean= pd.DataFrame({'contents_clean':content_clean})
df_clean.head()

清洗后结果如图所示。

在这里插入图片描述

3)统计词频

统计文本中每个单词出现的次数,对该统计按单词频次进行排序。如图所示。

在这里插入图片描述

相关代码如下:

tf= Counter(all_words)

2. 词云构建

词云是对文本中出现频率较高的关键词予以视觉化的展现,词云过滤掉大量低频低质的文本信息,使浏览者快速阅读文本就可领略文本的主旨。

#导入背景图片后的词云
mask = imread('4.png')#读入图片
wc=wordcloud.WordCloud(font_path=font,mask=mask,background_color='white',scale=2)
#scale:按照比例进行放大画布,如设置为2,则长和宽都是原来画布的2倍
wc.generate_from_frequencies(tf)
plt.imshow(wc)  #显示词云
plt.axis('off') #关闭坐标轴
plt.show()
wc.to_file('ciyun.jpg') #保存词云

3. 关键词提取

TF-IDF是一种统计方法,字词的重要性随着它在文件中出现的次数成正比增加,但同时也会在语料库中出现的频率成反比下降,接下来通过TF-IDF算法的运用实现关键词提取。

import jieba.analyse
index = 2
#print(df_clean['contents_clean'][index])
#词之间相连
content_S_str = "".join(content_clean[index])
print(content_list[index])
print('关键词:')
print(" ".join(jieba.analyse.extract_tags(content_S_str, topK=10, withWeight=False)))

4. 语音播报

将上述提取成功的关键词通过pyttsx3转换成语音进行播报。

import pyttsx3
voice=pyttsx3.init()
voice.say(" ".join(jieba.analyse.extract_tags(content_S_str, topK=10, withWeight=False)))
print("准备语音播报.....")
voice.runAndWait()

5. LDA主题模型

LDA是一种文档主题生成模型,也称为三层贝叶斯概率模型,模型中包含词语(W)、主题(Z)和文档(theta)三层结构。文档到主题、主题到词服从多项式分布,得出每个主题都有哪些关键词组成。在实际运行中,因为单词数量多,而一篇文档的单词数是有限的,如果采用密集矩阵表示,会造成内存浪费,所以gensim内部是用稀疏矩阵的形式来表示。首先,将分词清洗后的文档,使用dictionary = corpora.Dictionary (texts) 生成词典;其次,将生成的词典转化成稀疏向量。

def create_LDA(content_clean):#基于文本集建立(词典),并获得特征数dictionary = corpora.Dictionary(content_clean)#基于词典,将分词列表集转换成稀疏向量集,称作语料库dic = len(dictionary.token2id)print('词典特征数:%d' % dic)corpus = [dictionary.doc2bow(sentence) for sentence in content_clean]#模型训练lda = gensim.models.LdaModel(corpus=corpus, id2word = dictionary,num_topics = 10,passes=10)#passes 训练几轮print(lda.print_topic(1,topn=5))print('-----------')for topic in lda.print_topics(num_topics=10, num_words = 5):print(topic[1])
create_LDA(content_clean)

6. 模型构建

贝叶斯分类器的原理是通过某对象的先验概率,利用贝叶斯公式计算出后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为所属类。一个mapping对象将可哈希的值映射为任意对象,映射是可变对象。目前Python中只有一种标准映射类型一字典, 用花括号表示,但是花括号中的每个元素都是一个键值对(key: value),字典中的键值对也是无序的。

df_train=pd.DataFrame({"content":content_clean,"label":df_news['category']})
#为了方便计算,把对应的标签字符类型转换为数字
#映射类型(mapping)
#非空字典
label_mapping = {"体育": 0, "娱乐": 1, "家居": 2, "房产": 3, "教育":4, "时尚": 5,"时政": 6,"游戏": 7,"科技": 8,"财经": 9}
df_train['label'] = df_train['label'].map(label_mapping)
#df_train.head()
#将每个新闻信息转换成字符串形式,CountVectorizer和TfidfVectorizer的输入为字符串
def create_words(data):words = []for index in range(len(data)):try:words.append( ' '.join(data[index]))except Exception:print(index)return words
#把数据分成测试集和训练集
x_train,x_test,y_train,y_test =train_test_split(df_train['content'].values,df_train['label'].values,random_state=0)   
train_words = create_words(x_train)
test_words = create_words(x_test)
#模型训练
#第一种
#CountVectorizer属于常见的特征数值计算类,是一个文本特征提取方法
#对于每个训练文本,只考虑每种词汇在该训练文本中出现的频率
vec = CountVectorizer(analyzer = 'word',max_features=4000,lowercase=False)
vec.fit(train_words)
classifier = MultinomialNB()
classifier.fit(vec.transform(train_words),y_train)
print("模型准确率:",classifier.score(vec.transform(test_words), y_test))
#第二种,TfidfVectorizer除了考量某一词汇在当前训练文本中出现的频率之外
#关注包含这个词汇的其它训练文本数目的倒数,训练文本的数量越多特征化的方法就越有优势
vectorizer = TfidfVectorizer(analyzer='word',max_features = 40000,
lowercase=False)
vectorizer.fit(train_words)
classifier.fit(vectorizer.transform(train_words),y_train)
print("模型准确率为:",classifier.score(vectorizer.transform(test_words),y_test))

系统测试

词云如图1所示,关键词提取如图2所示,LDA测试结果如图3所示,贝叶斯结果如图4所示。

在这里插入图片描述

图1 词云

在这里插入图片描述

图2 关键词提取

在这里插入图片描述

图3 LDA结果

在这里插入图片描述

图4 贝叶斯结果

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/83129.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十九、docker学习-Dockerfile

Dockerfile 官网地址 https://docs.docker.com/engine/reference/builder/Dockerfile其实就是我们用来构建Docker镜像的源码,当然这不是所谓的编程源码,而是一些命令的集合,只要理解它的逻辑和语法格式,就可以很容易的编写Docke…

Android 面试重点之Framework (Handler篇)

近期在网上看到不少Android 开发分享的面试经验,我发现基本每个面经中多多少少都有Framework 底层原理的影子。它也是Android 开发中最重要的一个部分,面试官一般会通过 Framework底层中的一些逻辑原理由浅入深进行提问,来评估应聘者的真实水…

对强缓存和协商缓存的理解

浏览器缓存的定义: 浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。 浏览器缓存分为强缓存和协商缓存。 浏览器是如何使用缓存的: 浏览器缓存…

HarmonyOS应用开发者基础认证考试题库

此博文为HarmonyOS应用开发者基础认证考试的最后的大考,要求100分取得90分方可获取证书、现将考试的题库进行分享,希望能帮到大家。但是需要注意的是,题库会不定时的进行题目删减,但是大概的内容是不会进行改变的。真心希望这篇博…

MongoDB 使用总结

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)

目录 开放地址法(Open Addressing) 线性探测(Linear Probing) 散列表查找性能分析 平方探测(Quadratic Probing) 定理 平方探测法的查找与插入 双散列探测法(Double Hashing&#xff09…

爬虫011_元组高级操作_以及字符串的切片操作---python工作笔记030

获取元组的下标对应的值 注意元组是不可以修改值的,只能获取不能修改 但是列表是可以修改值的对吧

界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!

DevExpress WPF Chart组件拥有超大的可视化数据集,并提供交互式仪表板与高性能WPF图表库。DevExpress Charts提供了全面的2D / 3D图形集合,包括数十个UI定制和数据分析/数据挖掘选项。 PS:DevExpress WPF拥有120个控件和库,将帮助…

亚马逊对AIGC的定义

大家好,这里是Doker,最近AIGC非常火,这里我们聊一下什么是AIGC. 一、 AIGC 介绍与典型行业应用场景 ​AIGC 又称生成式 AI (Generative AI),是继专业生产内容(PGC, Professional-generated Content)、用户…

人脸识别场景下Faiss大规模向量检测性能测试评估分析

在前面的两篇博文中,主要是考虑基于之前以往的人脸识别项目经历结合最近使用到的faiss来构建更加高效的检索系统,感兴趣的话可以自行移步阅读即可: 《基于facenetfaiss开发构建人脸识别系统》 Facenet算法的优点:高准确率&#…

DoIP学习笔记系列:(三)用CAPL脚本过“安全认证”,$27服务实现

文章目录 1. 如何调用接口通过安全认证?如何新建CAPL工程,在此不再赘述,本章主要分享一下如何在CAPL中调用DoIP接口、diag接口进行DoIP和诊断的测试。 注意:CANoe工具本身的使用没什么难的,所谓会者不难难者不会,各位小伙伴有疑问要多问,多交流,往往难事都只是一层窗户…

ElasticSearch:环境搭建步骤

1、拉取镜像 docker pull elasticsearch:7.4.0 2、创建容器 docker run -id --name elasticsearch -d --restartalways -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.typesingle-node" elasti…

图的拓扑排序算法

拓扑排序 什么是拓扑排序? 比如说,我们平时工作过程中一定听过一个词叫做—不能循环依赖。什么意思? A依赖BCD,B依赖CD,C依赖D,D依赖EF,想要获得A的话,首先就要先有EF,有…

webpack基础知识五:说说Loader和Plugin的区别?编写Loader,Plugin的思路?

一、区别 前面两节我们有提到Loader与Plugin对应的概念,先来回顾下 loader 是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文件中plugin 赋予了 webpack 各种灵活的…

二分法的应用

文章目录 什么是二分法🎮二分查找的优先级二分查找的步骤💥图解演示🧩 代码演示🫕python程序实现🐈‍⬛C程序实现🐕‍🦺C程序实现🐯Java程序实现🐳 非常规类二分查找&…

电源控制--条件稳定

控制系统的条件稳定是指系统在一定条件下能够保持稳定性的特性。稳定性是控制系统设计中非常重要的概念,它涉及系统的输出在时间上是否趋向于有限值或者周期性变化,而不是无限增长或发散。 在控制系统中,条件稳定的要求通常涉及到以下几个方…

Sentieon|应用教程:利用Sentieon Python API引擎为自研算法加速

背景 Sentieon套装中所有模块的速度都远超对应开源软件的数倍至数十倍,用户在使用这些模块的同时,有时也希望Sentieon团队可以帮助加速自己开发的定制化软件。为了帮助这些用户能在自研软件上享受到Sentieon模块的速度,我们开发了Python API…

【深度学习MOT】SMILEtrack SiMIlarity LEarning for Multiple Object Tracking,论文

论文:https://arxiv.org/abs/2211.08824 文章目录 AbstractIntroduction2. 相关工作2.1 基于检测的跟踪2.1.1 检测方法2.1.2 数据关联方法 2.2 基于注意力的跟踪 3. 方法3.1 架构概述3.2 用于重新识别的相似性学习模块(SLM) Experimental Res…

【Python机器学习】实验08 决策树

文章目录 决策树1 创建数据2 定义香农信息熵3 条件熵4 信息增益5 计算所有特征的信息增益,选择最优最大信息增益的特征返回6 利用ID3算法生成决策树7 利用数据构造一颗决策树Scikit-learn实例决策树分类决策树回归Scikit-learn 的决策树参数决策树调参 实验1 通过sk…

【C++】string的使用

1、string的使用 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;void Test1() {string s1;string s2("hello");cin >> s1;cout << s1 << endl;//strcat【字符串拼接】string ret1 s…