《机器学习》数据分析之关键词提取、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

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

PyQt6/PySide6中QTableView类的实现

《PyQt6/PySide6中QTableView类的实现》本文主要介绍了PyQt6/PySide6中QTableView类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录1. 基本概念2. 创建 QTableView 实例3. QTableView 的常用属性和方法

PyQt6/PySide6中QTreeView类的实现

《PyQt6/PySide6中QTreeView类的实现》QTreeView是PyQt6或PySide6库中用于显示分层数据的控件,本文主要介绍了PyQt6/PySide6中QTreeView类的实现... 目录1. 基本概念2. 创建 QTreeView 实例3. QTreeView 的常用属性和方法属性

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映