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

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

目录

一、如何进行关键词提取

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 jiebastr = '我们在学习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 pdinFile = 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 osfile = 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'   # 去除带有上述数值的一行数据左右两边的空白字符,比如空格、制表、换行等,并增加了一个后缀txtpath = os.path.join('.\\红楼梦\\分卷\\',juan_name)  # 将文件名和路径拼接起来,得到新文件的完整路径。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文件
juan_file.close()  # 操作完关闭文件
运行结果:

        共120卷

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



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

相关文章

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如