《机器学习》文本数据分析之关键词提取、TF-IDF、项目实现 <上>

news2024/9/20 14:37:30

目录

一、如何进行关键词提取

1、关键词提取步骤

        1)数据收集

        2)数据准备

        3)模型建立

        4)模型结果统计

        5)TF-IDF分析

2、什么是语料库

3、如何进行中文分词

        1)导包

        2)导入分词库

        3)导入停用词库

        4)使用jieba库分词

        5)代码实例

二、核心算法

1、TF-IDF分析

2、TF-IDF算法公式

        1)TF词频公式

        2)IDF逆文档频率公式

        3)TF-IDF公式

        4)举例

3、案例

运行结果:

三、处理红楼梦词库

1、导入红楼梦词库

用法示例:

2、对整篇红楼梦文章进行拆分

完整代码:

运行结果:


一、如何进行关键词提取

1、关键词提取步骤

        1)数据收集

                收集研究需要的数据,建立相应的语料库

        2)数据准备

                导入分词库和通用词库

        3)模型建立

                使用 jieba 库,对语料库进行分词处理

        4)模型结果统计

                根据分类结果,进行词频统计,并绘制词云图

        5)TF-IDF分析

                得到加权后分词结果

2、什么是语料库

        语料库是指用于训练和评估模型的文本数据集。语料库通常包含大量的自然语言文本,例如新闻文章、书籍、网页内容等。

        语料库中存放的是在语言的实际使用中真实出现过的语言材料。

3、如何进行中文分词

        1)导包
pip install jieba
        2)导入分词库

                固定词组,jieba库没有内置的词组

        3)导入停用词库

                没有意义的词

        4)使用jieba库分词

                将文章完全分词即可

        5)代码实例
import jieba

str = '我们在学习python办公自动化'   # 导入词组
jieba.add_word('python办公自动化')  # 指定固定词组
a = jieba.lcut(str)  # 对词组进行分词
print(a)

        此时的运行结果为:

        上述如果没有使用固定词组则会有下列运行结果:

二、核心算法

1、TF-IDF分析

        TF-IDF是一种用来评估一个词在文档中的重要性统计方法

        TF指的是某一个给定的词语在该文件中出现的次数,这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。

        IDF指的是逆文档频率。IDF的主要思想是:如果包含词条 t 的文档越少,IDF越大,则说明词条具有很好的类别区分能力

        TF-IDF倾向于过滤掉常见的词语,保留重要的词语,它的值等于一个词的TF乘以它的IDF值,其大小用于衡量一个词在一个文档中的重要性,相当于加权

2、TF-IDF算法公式

        1)TF词频公式

        2)IDF逆文档频率公式

        3)TF-IDF公式

        4)举例

                以《中国的蜜蜂养殖》为例,假定该文长度1000个词,“中国"、"蜜蜂”、养殖"各出现20次,则这三个词的"词频"(TF)都为0.02。然后,搜索Google发现,包含"的"字的网页共有250亿张,假定这就是中文网页总数。包含"中国"的网页共有62.3亿张,包含”蜜蜂”的网页为0.484亿张,包含“养殖”的网页为0.973亿张。则它们的逆文档频率(IDF)和TF-IDF如下:

        “中国”、 “密封”、“养殖”的TF值 = 20/1000 = 0.02

        “中国” IDF值 = log(250/62.3+1) = 0.603

        “中国” TF-IDF值 = TF * IDF = 0.0121

        同理即可得到剩余词组的TF-IDF值

3、案例

文档内容:(五行代表五篇文章)

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

inFile = open('task2_1.txt','r')   # 打开文件
corpus = inFile.readlines()   # 读取所有的文章,此时每篇文章内容存放在一行,返回结果是一个列表类型,每单个元素存放一篇文章

vectorizer = TfidfVectorizer()   # 建立TF-IDF模型,转为TF-IDF的向量转换对象
tfidf = vectorizer.fit_transform(corpus)  # 传入数据,进行训练,返回包含TF-IDF的向量值,其对应为每个词的TF-IDF值,每个词用坐标表示为行列号,列号为全篇文档词组的排序值
print(tfidf)

wordlist = vectorizer.get_feature_names()  # 获取全篇文档的所有的词组,列表形式传出
print(wordlist)

df = pd.DataFrame(tfidf.T.todense(),index=wordlist)  # 将上述转换的包含TF-IDF的数据转换为稀疏矩阵,T为转置,todense是将上述的稀疏矩阵转换成密集矩阵,之后将其转变为二维数组,并设置索引值为所有的单词
print(df)

for j in range(0,len(corpus)):   # 遍历次数为文档内的文章数量
    featurelist = df.iloc[:,j].to_list()  # 通过索引号获取每一列的内容,并转换为列表
    resdict = {}   # 排序以及看输出结果对不对
    for i in range(0,len(wordlist)):  # 遍历的次数为词组的总数
        if df.iloc[i,j]!=0:    # 首先对每一列进行处理,对每一列分别取出每一个单词对应的值,判断如果不等于0的情况该怎么办
            resdict[wordlist[i]] = featurelist[i]  # 对每一列数据取出其TF-IDF的值,将其存入字典,键的值为相对应的词组

    resdict = sorted(resdict.items(),key=lambda x:x[1],reverse=True)  #使用items将字典转换成包含键值对的元组列表,sortes对可迭代对象进行排序,使用匿名函数指定排序的依据,x[1]表示元组对应的值,reverse=True表示降序
    
    print(resdict)
运行结果:

三、处理红楼梦词库

1、导入红楼梦词库

  词库内有如下内容:

用法示例:
jieba.load_userdict(r'.\红楼梦词库.txt')   # 导入本地词库
str = "螯封嫩玉双双满傲世也因同气味把笔悲伤说世途把芳魂消耗把芳魂消耗望家乡"   # 任意设置一个字符串,内容是词云内的数据,用于测试
a = jieba.lcut(sentence=str)   # 字符串进行切分
print(a)

运行结果为:

2、对整篇红楼梦文章进行拆分

红楼梦.txt 文件内容:(其中包含整篇文章)

现需将其中的每一卷内容保存为一个新的文本文件,并且文件命名也是相应卷名

完整代码:
import os

file = open(r'.\红楼梦.txt','r',encoding='utf8')  # 打开红楼梦数据文件
flag = 0   # 设置一个变量为0
juan_file = open(r'.\红楼梦\红楼梦卷开头.txt','w',encoding='utf8')  # 创建写模式,创建一个名为红楼梦卷开头的txt文件,文件放在红楼梦目录下

for line in file:    # 遍历每一行内容
    if '卷 第' in line:   # 判断每一行是否有这个数值
        juan_name = line.strip()+'.txt'   # 去除带有上述数值的一行数据左右两边的空白字符,比如空格、制表、换行等,并增加了一个后缀txt
        path = os.path.join('.\\红楼梦\\分卷\\',juan_name)  # 将文件名和路径拼接起来,得到新文件的完整路径。
        print(path)   # 打印这个文件名
        if flag==0:  # 判断,如果flag=0
            juan_file = open(path,'w',encoding='utf8')   # 打开并创建写一个文件,文件名为上述生成的文件名
            flag=1   # 将flag赋值为1
        else:   # 如果flag不等于0,说明已经在生成文件名的操作内了,此时打开上述创建的文件
            juan_file.close()
            juan_file = open(path,'w',encoding='utf8')
        continue   # 这里的语句和上述if同级别,在上上个if下,即执行完上述内容后跳出这一整个循环,继续进行下一次循环
    juan_file.write(line)  # 此段和第一个if同级别,相当于if的else语句,如果字符串不在当前行内,那么就将这一行内容写入juan_file文件
juan_file.close()  # 操作完关闭文件
运行结果:

        共120卷

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

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

相关文章

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(SVM分类器)

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(SVM分类器) 文章目录 一、基本原理鲸鱼智能优化特征选择(WOA)结合SVM分类器的详细原理和流程原理流程 二、实验结果三、核心代码四、代码获取五、总结 智能优化…

js | XMLHttpRequest

是什么? 和serve交互数据的对象;能够达到页面部分刷新的效果,也就是获取数据之后,不会使得整个页面都刷新;虽然名字是XML,但不限于XML数据。 怎么用? function reqListener() {console.log(thi…

理解数据库系统的内部结构

数据库系统在我们的数字世界中扮演着关键角色。本文将介绍数据库系统的内部结构,帮助初学者了解其基本概念。 数据库系统的三级模式 数据库系统内部采用三级模式二级映像结构,包括外模式、模式和内模式。这种结构确保了数据的逻辑独立性和物理独立性。…

全能型AI vs 专业型AI:未来是草莓味的AI吗?

草莓:全能型AI的新宠儿? 根据最近的消息,OpenAI的“草莓”模型据说是一个全能型AI,无论是解数学题还是搞定主观营销策略,它都能轻松驾驭。这个AI不仅仅是能解决问题,更是能够跨越多个领域,展现出…

C++学习/复习补充记录 --- 图论(深搜,广搜)

数据结构与算法 | 深搜(DFS)与广搜(BFS)_深搜广搜算法-CSDN博客 深度优先搜索理论基础 深搜和广搜的区别: (通俗版) dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了…

消费电子钛时代到来!天工股份抢占发展高地,业绩爆发式增长、前景广阔

消费电子“钛时代”正加速到来。 27日凌晨,苹果正式定档iPhone 16系列新品的发布会日期。据悉,本次iPhone 16 Pro系列将全系标配钛金属中框,继续沿用并升级此前在iPhone 15 Pro系列上应用的钛金属材质。 回看去年9月秋季新品发布会&#xf…

三秒学会--百度网盘下载提速10倍的小tip

开启优化速率 从2mb-->20mb 纵享新丝滑~

PHP安装扩展包时忽略依赖强制安装

正常安装时会检查依赖包,比如是否安装了reids扩展,是否安装了gd库等,卖到依赖包安装失败。 如下提示: 这样会导致你的包安装不上。 使用下面命令,强制安装,如下: 加上 --ignore-platform-req…

常见概念 -- dBm, mW,dB之间的关系

dBm与mW dBm(毫瓦分贝)与mW(毫瓦)都是光功率的单位。 两者之间的换算关系:dBm10xlgP。其中P为功率,单位为mW。 如:1mW可换算为0dBm。 dBm与dB dBm为光功率的单位,d…

GraphPad Prism下载安装教程怎样中文汉化

GraphPad Prism下载安装教程怎样中文汉化: GraphPad Prism 是一款集生物统计、曲线拟合和科技绘图于一体的软件,主要用于医学和生物科学领域的数据分析和绘图,具有高效、简便、多功能和高质量的特点,被广泛应用于科研、教育和业界…

告别繁琐,拥抱简单!用户好评如潮的录屏软件

不论你是有游戏过程录制的需求,还是教学片段录制的需求肯定都需要电脑屏幕录制工具吧。除了小巧便捷的ocam录屏之外还有不少类似工具可供我们选择。这次我就给你介绍几款我用过的录屏工具吧。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这款录屏…

智慧猪场实训中心解决方案

一、引言 随着科技的飞速发展,传统养猪业正经历着前所未有的变革。为了提高养猪效率、降低生产成本并保障猪只健康,智慧养猪场的概念应运而生。唯众特此推出《智慧猪场实训中心解决方案》,旨在通过先进的技术与管理手段,为养猪业培…

MQ专题:延迟消息的通用方案

一、主要内容 本文将实现一个MQ延迟消息的通用方案。 方案不依赖于MQ中间件,依靠MySQL和DelayQueue解决,不管大家用的是什么MQ,具体是RocketMQ、RabbitMQ还是kafka,本文这个方案你都可以拿去直接使用,可以轻松实现任…

【安规电容】

安规电容(Safety Capacitors)是一种专门设计用于电气设备中的电容器,主要用于确保电气安全,特别是用于交流电路中的滤波、降噪以及跨接隔离等功能。它们必须符合特定的安全标准,以确保电气设备在各种运行条件下都能保持…

MySQL:简述数据库的主从复制

MySQL主从复制是指数据可以从一个MySQL数据库主节点复制到一个或多个从节点。 MySQL默认采用异步复制方式,这样从节点不用一直访问主节点来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主节点中的所有数据库或者特定的数据…

FastJson序列化驼峰-下划线转换问题踩坑记录

背景 问题描述 在MySQL数据表中,存在一个JSON结构的扩展字段,通过updateById进行更新写入操作。更新写入的同一个字段名出现了混合使用了驼峰命名和下划线命名两种格式。 ps: FastJson版本是1.2.83 问题影响 数仓同学离线统计数据时发现字段名有两种…

【生命之树】

题目 思路 求联通区域中的最大和值 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M N << 1; const int null -0x3f3f3f3f; long long w[N]; int h[N], e[M], ne[M], idx; void add(int a, int b) // 添加一条边a->b {e[idx] b,…

虚幻5|(1)技能栏快捷格子的制作|(2)如何在游戏进行的时候显示鼠标,使用鼠标操作UI||(3)改进技能释放

一.创建技能栏格子UI 1.创建一个UI控件蓝图&#xff0c;命名为技能栏格子&#xff08;如何创建我就不多说了&#xff0c;学到这了基础知识应该有所掌握了&#xff09; 2.添加一个边界和垂直框 3.选中边界&#xff0c;右侧细节栏更改如下 4.再拖入一个文本块&#xff0c;做垂直…

java同步概念

同步&#xff08;Synchronization&#xff09;在Java多线程编程中是一个既重要又复杂的概念。它涉及到如何确保多个线程在访问共享资源时能够保持数据的一致性和完整性&#xff0c;避免出现竞态条件&#xff08;Race Condition&#xff09;等问题。 同步的基本概念 同步的主要目…

视频结构化从入门到精通——视频结构化主要技术介绍

视频结构化主要技术 1 视频接入 “视频接入”是视频结构化管道的起点&#xff08;SRC Point&#xff09;视频接入是视频结构化处理的第一步&#xff0c;它涉及将视频数据从各种采集源获取到系统中进行进一步处理。视频接入的质量和稳定性对后续的数据处理、分析和应用至关重要…