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

news2024/11/17 7:24:58

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • 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:
			continue
		line_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.coloradmin.cn/o/853001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式 - 消息队列Kafka:Kafka生产者发送消息流程和3种方式

文章目录 1. Kafka 生产者2. kafaka 命令行操作3. Kafka 生产者发送消息流程4. Kafka 生产者发送消息的3种方式1. 发送即忘记2. 同步发送3. 异步发送 5. Kafka 消息对象 ProducerRecord 1. Kafka 生产者 Kafka 生产者是指使用 Apache Kafka 消息系统的应用程序,它们…

wsl(在windows中使用呢linux系统)适用于windows的linux子系统

步骤可参考微软官方文档https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package 在这里主要列举一些需要注意的点 wsl2的要求 一定要检查下windows版本,版本不对的先升级版本不然无法使用wsl2 wsl支持…

P4381 [IOI2008] Island (求基环树直径)

也许更好的阅读体验 D e s c r i p t i o n \mathcal{Description} Description 给一个基环树森林,求每棵树的直径的和,基环树的直径定义为,从一个点出发只能走到没走过的点(即一个环不能把所有边都选),所经…

史上最细,自动化测试-logging日志采集详细实战(二)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、测试场景 给登…

固态硬盘数据恢复方法有哪些?三种恢复方法助您解忧

近年来固态硬盘比较流行,因为工作的需要我也在使用固态硬盘,它真的给我带来了很多的方便。但是最近,我固态硬盘里的文件有些不知道怎么就丢失了,这给我带来了很大的困扰。有什么方法可以找回来吗? 固态硬盘&#xff08…

Netty客户端同步获取结果

上次服务间通信是异步的&#xff0c;现在想实现客户端同步拿到服务端响应结果。实现如下&#xff1a; 在NettyClientHandler类中增加一个结果缓存器 Map<Long,Protocol<ResponseMsg>> resultMap new ConcurrentHashMap<>();修改方法 Override protected vo…

【文献阅读笔记】深度异常检测模型

文章目录 导读相关关键词及其英文描述记录深度异常检测模型Supervised deep anomaly detection 有监督深度异常检测Semi-Supervised deep anomaly detection 半监督深度异常检测Hybrid deep anomaly detection 混合深度异常检测One-class neural network for anomaly detection…

VR全景的盈利模式你知道吗?VR全景能用在哪些领域?

引言&#xff1a; 随着科技的迅猛发展&#xff0c;虚拟现实技术已经逐渐走进我们的生活。这项令人惊叹的技术让我们能够穿越时间与空间的限制&#xff0c;重新定义人们与世界互动的方式。 一&#xff0e;什么是VR全景&#xff1f; VR全景&#xff0c;是一种通过虚拟现实技术&…

万应低代码受邀参加上海电信“大干一场 科创沙龙”活动

7月28日&#xff0c;由上海市宝山区大场镇政府指导、中国电信上海北区局主办的“大干一场 科创沙龙”系列第九期沙龙活动顺利举办。大场镇“数字化转型”领导小组办公室&#xff08;以下简称“数字办”&#xff09;邀请了来自镇域内外的数十家科创服务企业。万应低代码作为天翼…

D5渲染器有多强大?给你10个选择它的理由

使用此分步指南&#xff0c;可以轻松快速地使用 D5 Render 创建专业视觉效果。使用 D5 Render 创建的视觉效果能够快速有效地传达信息。例如&#xff0c;简单的图形或图表可用于比较不同的数据集或显示变量之间的关系。使用 D5 Render&#xff0c;您可以创建既美观又信息丰富的…

公检系统创新:利用校对软件优化法律文书流程

公检系统可以通过利用校对软件来优化法律文书的流程&#xff0c;从而提高效率和准确性。以下是在创新方面利用校对软件的一些方法&#xff1a; 1.自动校对和修正&#xff1a;校对软件可以与公检系统集成&#xff0c;自动检测文书中的拼写、语法和标点符号错误&#xff0c;并提供…

msvcp120.dll丢失的4种解决方法,教你修复msvcp120.dll文件

当你在使用计算机时&#xff0c;经常会遇到各种各样的错误&#xff0c;最近遇到的应该就是dll文件缺失的错误吧&#xff0c;今天主要来跟大家讲解一下msvcp120.dll这个文件&#xff0c;教大家msvcp120.dll丢失的4种解决方法&#xff0c;好了&#xff0c;废话不多说&#xff0c;…

北京多铁克FPGA笔试题目

1、使用D触发器来实现二分频 2、序列检测器&#xff0c;检测101&#xff0c;输出1&#xff0c;其余情况输出0 module Detect_101(input clk,input rst_n,input data, //输入的序列output reg flag_101 //检测到101序列的输出标志 );parameter S0 2d0;S1 2d1;S2 2d2;S4 …

从金蝶云星空到金蝶云星空通过接口配置打通数据

从金蝶云星空到金蝶云星空通过接口配置打通数据 对接系统金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。K/3Cloud支持的协同应…

【LeetCode】数据结构题解(12)[用栈实现队列]

用栈实现队列 &#x1f609; 1.题目来源&#x1f440;2.题目描述&#x1f914;3.解题思路&#x1f973;4.代码展示 所属专栏&#xff1a;玩转数据结构题型❤️ &#x1f680; >博主首页&#xff1a;初阳785❤️ &#x1f680; >代码托管&#xff1a;chuyang785❤️ &…

flask使用cookie (设置cookie与查看cookie内容)

1.flask包cookie的使用 设置cookie app.route(/set_cookie) def set_cookie():resp make_response(Setting cookie)resp.set_cookie(username, John)return resp查看cookie: app.route(/get_cookie) def get_cookie():username request.cookies.get(username)return Welco…

gazebo 导入从blender导出的dae等文件

背景&#xff1a; gazebo 模型库里的模型在我需要完成的任务中不够用&#xff0c;还是得从 solidworks、3DMax, blender这种建模软件里面在手动画一些&#xff0c;或者去他们的库里面在挖一挖。 目录 1 blender 1-1 blender 相关links 1-2 install 2 gazebo导入模型 2-1 g…

使用imu_tools对imu_raw进行滤波处理

文章目录 1 前言2 安装3 查找自己的IMU话题4 imu_tools滤波 1 前言 imu_filter_madgwick&#xff1a;一种滤波器&#xff0c;可将来自常规IMU设备的角速度&#xff0c;加速度和磁力计读数&#xff08;可选&#xff09;融合到一个方向中。基于工作&#xff1a;http://www.x-io.…

电力系统电流三段式保护MATLAB仿真模型

整体模型如下&#xff1a; Matlab/Simulink搭建的电力系统电流保护模型采用辐射型单电源供电的运行方式 Ⅰ段保护的搭建 Ⅰ段保护为瞬时速断保护&#xff0c;根据Ⅰ段整定原则确定整定值。线路发生短路故障时&#xff0c;短路电流急剧增大&#xff1b;超过设置的整定值时&…

lokibot样本分析

火绒剑行为监控 行为监控 1.主程序在temp文件夹下释放frhdgr.exe 2.并创建进程 参数为 C:\Users\xxx\AppData\Local\Temp\frhdgr.exe C:\Users\xxx \AppData\Local\Temp\vxogkynyop 3.主进程退出 4.frhdgr.exe自我删除 并释放C:\Users\xxx\AppData\Roaming\F503CB\B28854…