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

news2024/9/22 19:26:30

目录

一、内容回顾

1、核心算法

2、算法公式

3、拆分文本

二、再次操作

1、取出每一卷的地址和内容

得到下列结果:(此为DF类型)

2、对每一篇文章进行分词

3、计算TF-IDF值

得到以下数据:

三、总结

1、关键词提取

1)基于频率统计的方法

2)基于文本特征的方法

2、TF-IDF(Term Frequency-Inverse Document Frequency)

1)词频(Term Frequency,TF)

2)逆文档频率(Inverse Document Frequency,IDF)

3)TF-IDF的最终得分为TF和IDF的乘积

3、总结


一、内容回顾

1、核心算法

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

2、算法公式

3、拆分文本

        上节课我们通过以下代码将红楼梦正篇文章分成了120个卷

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 "手机电子书" not in line:
        if '卷 第' in line:   # 判断每一行是否有这个数值
            juan_name = line.strip()+'.txt'   # 去除带有上述数值的一行数据左右两边的空白字符,比如空格、制表、换行等,并增加了一个后缀txt
            path = os.path.join('.\\红楼梦\\分卷\\',juan_name)  # 使用os库中的方法path.join遍历并创建一个文件,文件地址为红楼梦目录下的分卷文件内,文件名为上述增加了txt后缀的字符串
            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文件
    continue
juan_file.close()  # 操作完关闭文件

其处理结果如下所示:(分卷内存放每卷内容)

二、再次操作

1、取出每一卷的地址和内容

import pandas as pd
import os

filePaths = []   # 定义一个空列表用于存放卷内文件的地址
fileContents = []   # 用来存放卷内文件的内容

for root,dirs,files in os.walk(r'.\红楼梦\分卷'):   # 使用os的walk用法,用来遍历文件内的文件地址、文件目录、文件名,返回三个参数
    for name in files:    # 遍历每一个文件名
        filePath = os.path.join(root,name)   # 使用os.path.join遍历文件地址和目录
        filePaths.append(filePath)   # 将带有文件地址和文件名的字符串存入filePaths列表
        f = open(filePath,'r',encoding='utf8')   # 打开前面生成的文件,因为此时已经有了文件地址和文件名
        fileContent = f.read()   # 读取文件内的内容
        fileContents.append(fileContent)   # 将文件内容存在fileContents列表中
        f.close()  # 存放完关闭文件

corpos = pd.DataFrame({'filePath':filePaths,'fileContent':fileContents})  # 将上述带有文件地址和文件内容的两个列表转变成二维数组,并给予列名
print(corpos)
得到下列结果:(此为DF类型)

2、对每一篇文章进行分词

import jieba   # 导入分词库
jieba.load_userdict(r'.\红楼梦\红楼梦词库.txt')   # 传入本地的红楼梦词库,其中存放红楼梦的固定词组
# 使用pd打开停用词,则表明打开后的文件为一个DateFrame类型,index_col表示是否将第一列当做索引列,engine使用python解释器解析
stopwords = pd.read_csv(r'.\红楼梦\StopwordsCN.txt',encoding='utf8',index_col=False,engine='python')
file_to_jieba = open(r'.\红楼梦\分词后汇总.txt','w',encoding='utf8')   # 创建一个文件,用于存放分词后的数据,一行代表一卷内容的分词结果

for index,row in corpos.iterrows():   # 使用iterrows遍历二维数组每一行的内容,返回两个参数,一个表示所有的行索引,一个表示所有行的内容series类型
    juan_ci = ''   # 定义一个空,用来递增每一卷分出来的词组
    filePath = row['filePath']   # 取出返回的每一行数据的地址
    fileContent = row['fileContent']  # 取出每一行的数据内容,表示每一卷的内容
    segs = jieba.cut(fileContent)   # 对取出的每一卷内容进行分词,得到一个列表,
    for seg in segs:   # 遍历每一个分出来的词组
        if seg not in stopwords.stopword.values and len(seg.strip())>0:  # 判断分出来的词组是否是空值,是否是停止词的内容
            juan_ci += seg + ' '   # 将取出的每一个词后面加上一个空格,然后将每一卷的所有的词组连接起来
    file_to_jieba.write(juan_ci+'\n')    # 将每一卷连接好的词组内容写入文件
file_to_jieba.close()  # 关闭文件

得到一个分词文件,其内有如下数据:(其中每一行代表一个卷的所有词组,因为文件长度不够,所以自动排列到下一行)

3、计算TF-IDF值

from sklearn.feature_extraction.text import TfidfVectorizer  # 导入计算TF-IDF的库
import pandas as pd

infile = open(r'.\红楼梦\分词后汇总.txt','r',encoding='utf8')   # 打开上述生成的词组文件
corpus = infile.readlines()   # 读取文件所有行的内容

vectorizer = TfidfVectorizer()   # 建立模型
tfidf = vectorizer.fit_transform(corpus)  # 对模型进行训练,返回一个带有所有值坐标和对应TF-IDF值的稀疏矩阵
wordlist = vectorizer.get_feature_names()   # 获取所有的特征值,即所有的词组

df = pd.DataFrame(tfidf.T.todense(),index=wordlist)   # 将上述的稀疏矩阵和特征值合并,转换成二维数组,行代表每个词组在每篇文章的TF-IDF的值,列表示每篇文章的所有词组

for i in range(0,len(corpus)):   # 遍历出来每一卷文章的所有词组
    featurelist = df.iloc[:,i].to_list()  # 将每篇文章所有词组的TF-IDF的值转换成列表形式
    resdict = {}   # 设置一个空字典,用来存放每篇文章的词组和其对应的值
    for j in range(0,len(featurelist)):   # 遍历每一个单词
        resdict[wordlist[j]] = featurelist[j]  # 这里不停地传入字典新的值,键为每个单词,值为单词对应TF-IDF值
    resdict = sorted(resdict.items(),key=lambda x:x[1],reverse=True)  # 对每篇文章的TF-IDF值进行排序

    print(resdict[:10])  # 打印每篇文章的前十TF-IDF值

至此已完成所有内容

得到以下数据:

三、总结

1、关键词提取

        关键词提取是从给定的文本中提取出最具有代表性和重要性的词语。常见的关键词提取方法包括基于频率统计的方法和基于文本特征的方法。

        1)基于频率统计的方法

                通过计算词语在文本中的出现频率,提取出现频率较高的词语作为关键词。常见的方法有词频(TF)和逆文档频率(IDF)。

        2)基于文本特征的方法

                通过考虑词语在上下文中的语义关联性,提取具有语义相关性的词语作为关键词。常见的方法有TextRank算法和LDA主题模型。

2、TF-IDF(Term Frequency-Inverse Document Frequency)

        TF-IDF是一种用于评估文本中词语重要性的统计方法。它是通过计算词语在文本中的词频(TF)和逆文档频率(IDF)来确定一个词语的重要性。具体计算方法如下:

        1)词频(Term Frequency,TF)

                指定词语在文本中出现的频率,计算方法为词语在文本中的出现次数除以文本的总词数。

        2)逆文档频率(Inverse Document Frequency,IDF)

                指定词语在整个文本集合中的重要程度,计算方法为文本集合中文档总数除以包含该词语的文档数量的对数。

        3)TF-IDF的最终得分为TF和IDF的乘积

                用于衡量一个词语在文本中的重要性。较高的TF-IDF得分表示词语在文本中更重要。

3、总结

         关键词提取是从文本中提取最具有代表性和重要性的词语。TF-IDF是一种常用的关键词提取方法,通过计算词语在文本中的词频和逆文档频率来评估词语的重要性。这些方法在文本数据分析中有广泛的应用,可以帮助我们理解和处理大量的文本数据。

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

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

相关文章

【Spring MVC】MVC设计模式的Java Web框架

Spring MVC框架 MVC框架简介:MVC三层架构MVC流行框架MVC框架好处: Spring MVC框架组件分析 处理器开发1. 定义处理器2. 处理请求3. 处理请求参数4. 返回视图或数据5. 异常处理 MVC框架简介: 谈及Spring MVC框架之前,我们先了解一…

C语言基础(二十九)

1、快速排序&#xff1a; #include "date.h" #include <stdio.h> #include <stdlib.h> #include <time.h> // 函数声明 void quickSort(int *arr, int low, int high); void swap(int *xp, int *yp); void printArray(int *arr, int s…

CSRF漏洞的预防

目录 CSRF漏洞预防措施 深入研究 CSRF Token的工作原理是什么&#xff1f; 为什么仅依靠Referer头字段来防范CSRF攻击不是完全可靠&#xff1f; SameSite cookie属性如何防止CSRF攻击&#xff1f; SameSite Cookie属性的作用 如何通过SameSite属性防止CSRF攻击 导图 CS…

JavaWeb JavaScript ⑧ DOM编程

在光芒万丈之前&#xff0c;我们都要欣然接受眼下的难堪和不易&#xff0c;接受一个人的孤独和无助&#xff0c;认真做好眼前的每一件事&#xff0c;你想要的都会有 —— 24.8.29 一、什么是DOM编程 简单来说&#xff1a;DOM(Document obiect Model)编程就是使用document对象的…

Python 如何进行密码学操作(cryptography模块)

Python 的密码学操作可以通过 cryptography 模块来实现&#xff0c;这个模块是一个功能强大的库&#xff0c;它提供了现代密码学的基本工具&#xff0c;包括加密、解密、密钥生成、签名等操作。cryptography 模块易于使用&#xff0c;并且安全性高&#xff0c;适合在各种场景下…

【软件测试】8. 测试分类

目录 1. 为什么要对软件测试进行分类&#xff1f; 2.按照测试目标分类 2.1 界面测试 2.2 功能测试 2.3 性能测试 2.4 可靠性测试 2.5 安全性测试 2.6 易用性测试 3.按照执行方式分类 3.1 静态测试 3.2 动态测试 4. 按照测试方法 4.1 白盒测试 4.2 黑盒测试 4.3灰…

【WiFi协议的发展学习1】

WiFi协议的发展 WiFi协议的发展2. WiFi协议发展3. WiFi协议发展小结3.1. 发展归纳3.2. 未来展望4. WiFi产品的特点/功能WiFi协议的发展 自20世纪90年代以来, WiFi技术得到了迅猛发展,已成为人们日常生活、工作和学习中不可或缺的组成部分。WiFi协议的发展不仅推动了无线通信…

TL-Tomcat 整体架构和处理请求流程解析

我们写一个servlet后&#xff0c;在web.xml里配上我们的路径。然后把项目打包成war包放入webapps目录下 然后这样就返回了 这个war包里面的东西和这个文件夹其实是一样的&#xff1a; 那么最终我们把war包删掉 还有原来文件夹下其他的东西 只剩下这么个.class文件 其实这…

TikTok流量推送逻辑与IP的关系

在探讨TikTok流量推送逻辑时&#xff0c;很多用户都好奇这一机制是否与用户的IP地址紧密相关。TikTok作为全球知名的短视频社交平台&#xff0c;其流量推送算法无疑是平台成功的关键因素之一。那么&#xff0c;TikTok的流量推送逻辑究竟是如何运作的&#xff1f;它与IP地址之间…

C语言 | Leetcode C语言题解之第385题迷你语法分析器

题目&#xff1a; 题解&#xff1a; struct NestedInteger* helper(const char * s, int * index){if (s[*index] [) {(*index);struct NestedInteger * ni NestedIntegerInit();while (s[*index] ! ]) {NestedIntegerAdd(ni, helper(s, index));if (s[*index] ,) {(*index…

使用InternLM实现谁是卧底游戏

环境 # 创建虚拟环境 conda create -n spy python3.10 -y conda activate spy pip install streamlit1.37.0 openai1.37.1 git clone https://github.com/sci-m-wang/Spy-Game.git cd Spy-Game 修改脚本who_is_the_spy.py中的client 部分 if "client" not in …

pdf转cad软件,5款快速上手转换软件分享

在当今快节奏的工作环境中&#xff0c;图纸文件的格式转换成为设计师、工程师等职业群体日常工作中不可或缺的一环。尤其是将PDF文件转换为CAD格式&#xff0c;不仅能够提升工作效率&#xff0c;还能确保设计数据的准确性和可编辑性。下面给大家分享5款能够快速上手转换软件&am…

快蜗牛OZON数据分析工具,快蜗牛OZON选品工具

现在电商行业蓬勃发展的时代&#xff0c;OZON是俄罗斯及东欧边相当重要的电商平台&#xff0c;它背后的数据里藏着超多商业机会。快蜗牛数据专门针对 OZON 平台搞数据分析的&#xff0c;能帮咱们卖家看透市场&#xff0c;还能指导商家怎么做生意。接下来看快蜗牛对 OZON 的数据…

物理机安装Centos后无法连接网络(网线网络)怎么办?-呕心沥血总结版-超简单

问题情境 高高兴兴的在物理机上装了个centos7,打开一看,哇,网卡没有我的局域网IP,怎么办,已经插上网线了呀,灯也在闪烁,怎么没有网络呀? 其实,是缺少网卡驱动! 问题解决: 1.查询网卡版本 在服务器上输入命令: lspci | grep Ethernet可以看到,我的网卡是RTL8…

Python Excel 操作全面总结

Excel 是我们日常生活中经常使用的数据处理工具&#xff0c;而 Python 作为一种强大的编程语言&#xff0c;在处理 Excel 文件方面也有着广泛的应用。本文将全面总结 Python Excel 操作&#xff0c;包括如何使用 Python 来读取、写入、修改 Excel 文件&#xff0c;以及如何使用…

2024全国大学生数学建模国赛,成员如何分工协作?

文末获取2024国赛数学建模思路代码&#xff0c;9.5开赛后第一时间更新 大家知道&#xff0c;数学建模竞赛是需要一个团队的三个人在三天或四天的时间内&#xff0c;完成模型建立&#xff0c;编程实现和论文写作的任务&#xff0c;对许多第一次参加建模或者建模经验比较欠缺的团…

电饭煲语音应用方案:工业级性能、简单易用,NRK3301语音识别ic

随着人们对电器的需求不断增大&#xff0c;家用电饭煲经过不断地改革和创新&#xff0c;拥有了更多使用的功能&#xff0c;以往电饭煲只用于煮米饭。如今&#xff0c;还增加了煲汤、煮粥、无水焗、收汁入味等十多种功能。 除此之外&#xff0c;如今的电饭煲越来越人性化&#x…

AI周报(8.25-8.30)

AI应用-Beyond Math 的“数字风洞”应用于 F1 赛车 Beyond Math 的首批市场之一是一级方程式赛车&#xff0c;一些车队正在探索使用该软件来加快他们的空气动力学和车辆设计过程。 BeyondMath 的联合创始人达伦加维&#xff08;Darren Garvey&#xff09;告诉TechCrunch&#…

【MySQL-24】万字全面解析<索引>——【介绍&语法&性能分析&使用规则】

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

一文打通前端环境搭建

目录 nvm管理安装nvm 管理node配置nvm环境变量切换nvm国内镜像 安装nodenpm 镜像切换打包工具yarn安装yarnyarn切换淘宝镜像 安装vue脚手架开发工具vscode安装(傻瓜式安装) 启动项目vue插件配置 关于yarmyarm常用命令 nvm管理 安装nvm 管理node 访问github地址&#xff1a;ht…