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

2024-08-31 01:36

本文主要是介绍《机器学习》数据分析之关键词提取、TF-IDF、项目实现 <下>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、内容回顾

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 osfile = 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'   # 去除带有上述数值的一行数据左右两边的空白字符,比如空格、制表、换行等,并增加了一个后缀txtpath = os.path.join('.\\红楼梦\\分卷\\',juan_name)  # 使用os库中的方法path.join遍历并创建一个文件,文件地址为红楼梦目录下的分卷文件内,文件名为上述增加了txt后缀的字符串print(path)   # 打印这个文件名if flag==0:  # 判断,如果flag=0juan_file = open(path,'w',encoding='utf8')   # 打开并创建写一个文件,文件名为上述生成的文件名flag=1   # 将flag赋值为1else:   # 如果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 osfilePaths = []   # 定义一个空列表用于存放卷内文件的地址
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 pdinfile = 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是一种常用的关键词提取方法,通过计算词语在文本中的词频和逆文档频率来评估词语的重要性。这些方法在文本数据分析中有广泛的应用,可以帮助我们理解和处理大量的文本数据。

这篇关于《机器学习》数据分析之关键词提取、TF-IDF、项目实现 <下>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122513

相关文章

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加