Python文本数据分析:新闻分类任务(贝叶斯,TF-IDF词向量)

2023-10-27

基本思路

1.文本分析
2.TF-IDF关键词提取
3.LDA建模
4.基于贝叶斯算法进行新闻分类

1.文本分析

11.查看数据
import pandas as pd
import jieba
df_news = pd.read_table('./data/val.txt',names=['category','theme','URL','content'],encoding='utf-8')
df_news = df_news.dropna()
print(df_news.head())

在这里插入图片描述

1.2转换为llist格式
print(df_news.shape)
content = df_news.content.values.tolist()
print (content[1000])

在这里插入图片描述

1.3使用jieba分词
ontent_S = []
for line in content:
    current_segment = jieba.lcut(line)
    if len(current_segment) > 1 and current_segment != '\r\n': #换行符
        content_S.append(current_segment)
print(content_S[1000]) #(list of list)

在这里插入图片描述

1.4转换为DataFrame格式
df_content=pd.DataFrame({'content_S':content_S})
print(df_content.head())

在这里插入图片描述

1.5使用停用词
stopwords=pd.read_csv("stopwords.txt",index_col=False,sep="\t",quoting=3,names=['stopword'], encoding='utf-8') #list
#print(stopwords.head(20))

def drop_stopwords(contents, stopwords):
    contents_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))
        contents_clean.append(line_clean)
    return contents_clean, all_words
    # print (contents_clean)
contents = df_content.content_S.values.tolist()
stopwords = stopwords.stopword.values.tolist()
contents_clean, all_words = drop_stopwords(contents, stopwords) ###使用停用词
df_content=pd.DataFrame({'contents_clean':contents_clean}) ##每一列的分词
print(df_content.head())
df_all_words=pd.DataFrame({'all_words':all_words})  ###所有词语
print(df_all_words.head())

在这里插入图片描述
在这里插入图片描述

1.6查看词频
import numpy
words_count=df_all_words.groupby(by=['all_words'])['all_words'].agg({"count":numpy.size})##分组大小
print(words_count.head())
words_count=words_count.reset_index()
print(words_count.head())
words_count=words_count.sort_values(by=["count"],ascending=False)##排序
print(words_count.head())

在这里插入图片描述

1.7生成词云
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['figure.figsize'] = (10.0, 5.0)
wordcloud=WordCloud(font_path="./data/simhei.ttf",background_color="white",max_font_size=80)
word_frequence = {x[0]:x[1] for x in words_count.head(100).values}
wordcloud=wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)
plt.show()

在这里插入图片描述

2.TF-IDF关键词提取

2.1 提取关键词
import jieba.analyse
index = 2400
print (df_news['content'][index])
content_S_str = "".join(content_S[index])
print ("  ".join(jieba.analyse.extract_tags(content_S_str, topK=5, withWeight=False)))#3输出前五个关键词

在这里插入图片描述

3.LDA建模

更多参数详情
https://blog.csdn.net/sinat_26917383/article/details/79357700#1__27

3.1建模
from gensim import corpora, models, similarities
import gensim
#做映射,相当于词袋
dictionary = corpora.Dictionary(contents_clean) ##格式要求:list of list形式,分词好的的整个语料
corpus = [dictionary.doc2bow(sentence) for sentence in contents_clean]  #语料
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20) #类似Kmeans自己指定K值
print (lda.print_topic(1, topn=5)) ##第一个主题,关键词5个

在这里插入图片描述

3.2 输出20个主题的的关键词和权重
for topic in lda.print_topics(num_topics=20, num_words=5):
    print (topic[1])

在这里插入图片描述

4.基于贝叶斯算法进行新闻分类

4.1 转换数据
df_train=pd.DataFrame({'contents_clean':contents_clean,'label':df_news['category']})
print(df_train.tail())
print(df_train.label.unique())

在这里插入图片描述
在这里插入图片描述

label_mapping = {"汽车": 1, "财经": 2, "科技": 3, "健康": 4, "体育":5, "教育": 6,"文化": 7,"军事": 8,"娱乐": 9,"时尚": 0}
df_train['label'] = df_train['label'].map(label_mapping) ##变换label
print(df_train.head())

在这里插入图片描述

4.2 创建训练、测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(df_train['contents_clean'].values, df_train['label'].values, random_state=1)
#print(x_train)
#print(x_train[0])
#x_train = x_train.flatten()
words = []
for line_index in range(len(x_train)):  
    try:
        #x_train[line_index][word_index] = str(x_train[line_index][word_index])
        words.append(' '.join(x_train[line_index]))
    except:
        print (line_index)
print(words[0])
print (len(words))

在这里插入图片描述

4.3 构建贝叶斯模型
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(analyzer='word', max_features=4000,  lowercase = False)
vec.fit(words)
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(vec.transform(words), y_train)
test_words = []
for line_index in range(len(x_test)):
    try:
        #x_train[line_index][word_index] = str(x_train[line_index][word_index])
        test_words.append(' '.join(x_test[line_index]))
    except:
         print (line_index)
print('test_words[0]',test_words[0])
print('test_words_sorce',classifier.score(vec.transform(test_words), y_test))

在这里插入图片描述

4.4 TF-IDF模型
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(analyzer='word', max_features=4000,  lowercase = False)
vectorizer.fit(words)

from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(vectorizer.transform(words), y_train)
print(classifier.score(vectorizer.transform(test_words), y_test))

在这里插入图片描述
不同的模型预测结果也不同

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python文本数据分析:新闻分类任务(贝叶斯,TF-IDF词向量) 的相关文章

随机推荐

  • 计算机专业专硕,2018厦门大学计算机专硕考研经验贴(专业课干货!!)

    我在这里和迷茫的学弟学妹们交流一下 厦大计算机系和智能系的区别 2018年 计算机系报名专硕的400 人 智能系的200 人 招生人数差不多 并且 计算机系的复试科目比智能系的复试科目多了一门离散数学 所以这就要求在寒假里需要看的书也更多
  • 这5个AI工具会让你拥有超能力!!

    各位开发者大家好 Nomadev来了 人工智能 AI 彻底改变了我们与技术互动的方式 人工智能工具已经改变了我们生活的许多方面 从我们的工作方式到我们保持联系的方式 AI 工具可以帮助我们更有效地完成任务 保持井井有条 甚至保证我们的安全
  • Redis常用面试题

    什么是缓存穿透 怎么解决 缓存穿透是指大量查询不存在的数据 当每次请求都在redis缓存查询不到信息 则这些大量的查询操作每次都会去查询数据库 则会导致数据库崩溃 解决方法一 缓存空数据 查询返回的数据为空 仍把这个空结果进行缓存 优点 简
  • Linux Centos 7 设置打开终端快捷键

    为什么要写这个呢 因为看到所有的答案都是千篇一律 都是同一个答案 Ctrl C Ctrl V 的回答 着实浪费时间 1 查看Terminal所在路径 点击计算机名称 进入bin 找到gnome terminal 步骤如图 如若路径不同 请自
  • CSP认证历年真题题解 (Python)

    文章目录 此篇文章是小菜本菜使用Python做CCF CSP的一些记录 希望能够以此帮助到正在为题目苦苦思考 但还没有找到解决思路的朋友们 诚然 这里的代码还有很多值得改进之处 希望各位码友不吝赐教 目前已完成历年的第一题 第二题 第三题正
  • 二分

    林大oj981 vd的电话簿 table width 100 border 0 tbody tr style height 1 td h1 style color rgb 0 51 255 description h1 td tr tr s
  • bom 与 dom

    1 什么是bom bom 是 Borwer Object Model 的缩写 中文是浏览器对象模型 作用 用来包含所有的浏览器信息 它有7个对象 window 当新打开一个新的窗口就会产生一个window对象 alert 警告框 var b
  • 一位程序员生了 3 个孩子......

    程序猿要了3个孩子 分别取名叫Ctrl Alt 和Delete 如果他们不听话 程序猿就只要同时敲他们一下就会好的 假如你是喜欢看程序员的趣闻 假如你有程序员的沙雕图无人分享 假如你是被编程耽误的段子手 欢迎扫描下方二维码给程序人生投稿 每
  • 网络协议号大全

    1 ICMP Internet Control Message RFC792 2 IGMP Internet Group Management RFC1112 3 GGP Gateway to Gateway RFC823 4 IP IP
  • Docker入门——实战图像分类

    一 背景 思考 在一个项目的部署阶段 往往需要部署到云服务器或者是终端设备上 而环境的搭建往往是最费时间和精力的 特别是需要保证运行环境一致性 有什么办法可以批量部署相同环境呢 Docker本质 打包环境 将本机的环境和代码一同打包在doc
  • Jenkins设置默用户为root

    最近在需要在jenkins执行shell脚本 由于Jenkins之前是默认在线安装的 这样jenkins设置了默认用户jenkins权限 如果要执行root用户命令 则报权限错误 image png 所以要更换jenkins为root用户
  • 线程池与数据库连接池

    自己感觉线程池与数据库连接池是另个相似的概念 于是简单写一下自己的思考巩固复习 线程池 1 线程池的作用 在java中 如果每个请求到达就创建一个新线程 开销是相当大的 在实际使用中 服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当
  • 《C++ Primer Plus》学习笔记——第5章 循环和文本输入

    1 概述 C 中支持三种循环 for循环 while循环和do while循环 2 for循环 for循环遍历字符串输出 int main using namespace std string str cin gt gt str for i
  • QVector、QList、QLinkedList 类 用法区别

    QVector Qlist QlinkedList 类 用法比较 1 QVector 是提供动态数组的一个模板类 QList 是提供列表的一个模板类 QLinkedList 是提供链表的一个模板类 2 QVector
  • 剪辑必备神器,视频片段搜索工具!

    随着社交媒体和视频分享平台的不断发展 视频制作正在变得越来越普及和流行 随之而来的是 视频剪辑也变得越来越重要 在制作一个完整的视频时 大部分时间都是花费在剪辑和编辑上 然而 在海量的视频片段中寻找想要的素材是一项非常繁琐的任务 因此 针对
  • 贪心算法——n行m列的正整数矩阵中,每行选一个数使得总共n个数的和最大。

    6 1 n行m列的正整数矩阵中 每行选一个数使得总共n个数的和最大 采用贪心算法 include using namespace std int a 100 100 int n m int main cin gt gt n gt gt m
  • 基于 RT-Thread 的 RoboMaster 电控框架(三)

    基于 RT Thread 的 RoboMaster 电控框架 三 由于 RT Thread 稳定高效的内核 丰富的文档教程 积极活跃的社区氛围 以及设备驱动框架 Kconfig Scons 日志系统 海量的软件包 很难不选择 RT Thre
  • 开发一个飞书机器人

    开发一个飞书机器人需要以下步骤 首先 您需要确定机器人的功能和目标 飞书机器人是用来做什么的 它是用来传送物品 送快递还是其他用途 确定了这些之后 就可以开始设计机器人的外观和功能 其次 您需要选择适合的机器人平台 机器人平台包括机器人的硬
  • 时序约束理论与实践

    前言 基础概念整理 更多内容参考文后的链接 1 input delay input delay定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input
  • Python文本数据分析:新闻分类任务(贝叶斯,TF-IDF词向量)

    文章目录 基本思路 1 文本分析 11 查看数据 1 2转换为llist格式 1 3使用jieba分词 1 4转换为DataFrame格式 1 5使用停用词 1 6查看词频 1 7生成词云 2 TF IDF关键词提取 2 1 提取关键词 3