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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今年读过最绝的大模型神书死磕这本大模型神书!看完直接脱胎换骨!!

书名📖:《大语言模型:基础与前沿》 该书深入阐述了大语言模型(Large Language Model, LLM)的基本概念和算法、研究前沿以及应用,内容全面且系统性强,适合👨🏻‍&#x1…

Prometheus + Grafana + nVisual 实现运维监控全面可视化

Prometheus主要实现采集、存储、查询设备数据指标、告警等功能;Grafana通过Prometheus的API以仪表板的形展示数据,同时在线提供了大量监测数据展示模版。然而,实际运维中我们不仅需要实时监测数据,还需要了解设备的物理位置、拓扑…

3.js - modelPosition.z = sin((modelPosition.x+uTime)*10.0)*0.05;

哈 1、完整的动态波纹效果吧 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 顶点着色器 import basicVertexShader from ./shader/11-01/raw/vertex.glsl?raw // 片元着色器 import basicFragmentShad…

使用docker安装jenkins,然后使用jenkins本地发版和远程发版

使用docker安装jenkins,然后使用jenkins本地发版和远程发版 1、安装docker 1.安装必要的一些系统工具 sudo yum install docker-ce 2.添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.更新…

内推|京东|后端开发|运维|算法...|北京 更多岗位扫内推码了解,直接投递,跟踪进度

热招岗位 更多岗位欢迎扫描末尾二维码,小程序直接提交简历等面试。实时帮你查询面试进程。 安全运营中心研发工程师 岗位要求 1、本科及以上学历,3年以上的安全相关工作经验; 2、熟悉c/c、go编程语言之一、熟悉linux网络编程和系统编程 3、…

102.二叉树的层次遍历的算法实现及详解

二叉树的层次遍历 题目 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入:root = [1] 输出:[[1]] 示例 3…

解析查看elf文件的构成

x86下用clang编译一段c代码,编译成elf文件,读elf文件,dump出里面的所有段,并打印出段中的数据和含义以及汇编的内容 编写C代码 首先,编写一个简单的C程序,例如命名为example.c: 使用Clang编…

您知道tar、xz、zip这三种不同压缩方式的区别吗?

tar、xz、zip是三种不同的压缩和打包格式,它们在压缩算法、使用场景、兼容性等方面存在一定的差异。以下是对这三种格式的比较: 1. 压缩算法 tar:tar本身并不进行压缩,它只是一种打包工具,将多个文件和目录打包成一个…

springboot整合Logback

Logback介绍 描述 Logback是由log4j创始人设计的另外一种开源日志组件,性能比log4j要好。相对是一个可靠、通用、快速而又灵活的Java日志框架。 Logback主要分三个模块 1、logback-core:其他两个模块的基础模块 2、logback-classic:它是lo…

10、Django Admin修改标题

admin from django.contrib import admin from .models import Category, Origin, Hero, Villain # 添加以下代码 admin.site.site_header "系统管理" admin.site.site_title "管理员界面" admin.site.index_title "欢迎来到这里&#xff…

TCP如何关闭连接(详细版)

关闭连接的⽅式通常有两种,分别是 RST 报⽂关闭和 FIN 报⽂关闭。 如果进程异常退出了,内核就会发送 RST 报⽂来关闭,它可以不⾛四次挥⼿流程,是⼀个暴⼒关闭连接的⽅式。 安全关闭连接的⽅式必须通过四次挥⼿,它…

【STM32】通用定时器TIM(输入捕获)

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 前言 输入捕获简介 输入捕获配置 初始化IO口 输入捕获初始化 选择触发源及从模式 测量频率方法 输入捕获代码 IC.h IC.c 输入捕获测占空比 前言 建议先阅读这篇博客&#xf…

Unity编辑器开发 Immediate Mode GUI (IMGUI)

1. 简介: IMGUI是代码驱动gui系统,由 OnGUI 函数驱动: void OnGUI() {if (GUILayout.Button("Press Me")){ Debug.Log("Hello!");} } IMGUI常用于: 创建 in-game debugging displays and tools&#xff1b…

vs2019编译opencv+contribute+gpu

1、提前准备 vs2019、opencv4.4.0、opencv-contribute4.4.0、CUDA Toolkit 11.8(不能高于自己电脑的CUDA版本)、CUDNN8.9.6 ps:先提前准备环境 1)cmd中查看:nvidia-smi查看自己的显卡信息,不存在下述信息…

使用python+opencv解析图像和文本数据

1. 创建虚拟环境 新建文件夹, 并在文件夹中创建虚拟环境,可以使用Vscode打开文件夹, 然后在终端中输入以下命令: python -m venv venv2. 激活虚拟环境 在终端中输入以下命令: venv\Scripts\activate3. 安装依赖 在终端中输入以下命令: pip install opencv-pythonpip inst…

《JavaEE进阶》----7.<SpringMVC实践项目:【登录页面的验证】>

这篇文章详细的讲解了一个 简单的登录网页的前端代码和后端代码的构造 使用了JavaScript中的ajax来进行前后端的交互 一、前端代码 登录页面代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>登录…

CSS解析:盒模型

在网页上实现元素布局涉及很多技术。在复杂网站上&#xff0c;可能会用到浮动元素、绝对定位元素以及其他各种大小的元素&#xff0c;甚至也会使用较新的CSS特性&#xff0c;比如Flexbox或者网格布局。 在此之前我们要打好基础&#xff0c;深刻理解浏览器是如何设置元素的大小…

【卷起来】VUE3.0教程-04-表单输入绑定

Hello&#xff0c;各位老铁&#xff0c;今天我们继续给大家讲解VUE3.0教程&#xff0c;本期我们讲述一下VUE中的表单输入绑定&#xff0c;在实际开发过程中&#xff0c;表单的输入是我们常见的功能&#xff0c;那么我们接下来看看&#xff0c;VUE是如何处理的。 各位看官&…

JVM面试(五)垃圾回收机制和算法

概述 了解Java虚拟机的垃圾回收机制&#xff08;Garbage Collection&#xff0c;简称GC&#xff09;&#xff0c;我们也要像其作者John McCarthy一样&#xff0c;思考一下三个问题&#xff1a; 哪些内存需要回收&#xff1f;什么时候回收&#xff1f;如何回收&#xff1f; 虽…

51单片机-DS1302(RTC时钟显示,代码内改变,内设的24年9月5日,上午11:12:00)

一、DS1302时序及命令字 两个操作&#xff1a;写操作和读操作 写操作&#xff1a; &#xff08;由我们单片机一个控制引脚控制DS1302的IO口写入&#xff09;首先就是通过时序图把我们的命令字写入&#xff0c;命令字是控制我们对应要写入的年月日&#xff0c;时分秒等配置的关…