【class3】人工智能初步(词频统计)

最后回顾一下读取和处理数据的过程,具体方法如下:
1. 读取CSV文件
STEP1 导入csv模块
STEP2 打开文件
STEP3 读取文件
2. 标准化处理
STEP1 先创建一个空列表,用于存储reader对象中的值
STEP2 遍历reader对象
STEP3 将reader对象中的每行数据添加到空列表data中
在最后,我们将data变量输出进行查看。

# 导入csv模块

import csv

# 使用open()函数打开数据集,并将返回的文件对象存储在变量file中

file = open("/Users/yequ/TVComments.csv", "r")

open(“路径”,“打开方式”)

# 使用csv.reader()函数读取数据集,并赋值给变量reader

reader = csv.reader(file)

# 创建一个空列表data

data = []

# 使用for循环遍历reader,将遍历的数据存储到变量info中

for info in reader:

    # 使用append()函数,将info逐一添加到data列表中

    data.append(info)

   

# 输出data变量

print(data)

复习结束~
根据上节课的内容,我们知道了对多条评价建立词袋模型的大概步骤:
1. 先对每条评价进行分词
2. 从中提取所有出现过的词语
3. 统计每条评价里每个词语出现的次数

今天,我们会系统地学习这三个步骤来统计词频:

我们先进行第一步,也是文本处理的基础步骤:分词。
中文分词的方法有很多,我们选择了一个准确度还不错的jieba模块,来帮助我们完成分词。

注意:

jieba是一个开源模块,使用前需要在终端中通过代码:pip install jieba 进行安装。
如果在自己电脑上无法安装或安装缓慢,可在命令后添加如下配置来加速:
pip install jieba -i Simple Index

如下即安装成功

在 jieba 模块中,有很多种用于分词的函数。
本案例中,我们选择使用 jieba.lcut() 进行分词,把要进行分词的字符串传入到该函数中即可。
jieba.lcut()函数会将分词后的结果作为一个列表返回。

具体使用方法:

要使用jieba模块进行分词,需要先使用import导入该模块。
然后,我们把要进行分词的字符串对象赋值给变量text,再将text传入 jieba.lcut()函数中,即可进行分词。
最后,把分词结果赋值给变量ret,并输出查看。

# 导入jieba模块

import jieba

# 将"我真的很喜欢编程",赋值给变量text

text = "我真的很喜欢编程"

# 将text传入jieba.lcut()中,并把结果赋值给ret

ret = jieba.lcut(text)

# 输出ret进行查看

print(ret)

output

Building prefix dict from the default dictionary ...

Dumping model to file cache /tmp/jieba.cache

Loading model cost 0.667 seconds.

Prefix dict has been built successfully.

['', '真的', '', '喜欢', '编程']

分析结果:

我们再来看一下刚才输出的结果~
在分词的过程中,会输出jieba模块创建分词模型的过程和花费的时间:
Building prefix dict from the default dictionary ...
Dumping model to file cache /tmp/jieba.cache
Loading model cost 0.667 seconds.
Prefix dict has been built successfully.

模型建立成功后,会以列表的形式返回分词的结果:
['我', '真的', '很', '喜欢', '编程']

注意:

使用 jieba.lcut() 函数分词后,返回的结果是字符串列表。在这里,有多少条电视机评价,就有多少个列表生成。

接下来:

但后续构造词袋模型时,需要传入的数据格式是一个字符串列表,因此我们得对分词结果进行处理
STEP1. 先将每条评价的分词结果,也就是每个列表中的元素,以空格连接生成一个新的字符串
STEP2. 然后将这些字符串逐一添加到一个新列表中

我们先来完成处理分词结果的第一个小步骤:将分词结果以空格合并为一个完整的字符串。这时,就需要用到join()函数。

Join():

Python中,join()函数可以将列表中的元素以指定的字符连接生成一个新的字符串。只需对指定的字符串使用join()函数,再将要连接的列表作为参数传入即可。

回到项目中,我们来尝试一下使用join()函数,将分词结果ret以空格合并为一个完整的字符串。

# 导入csv模块

import csv

# 使用open()函数打开数据集

file = open("/Users/yequ/TVComments.csv", "r")

# 使用csv.reader()函数读取数据集

reader = csv.reader(file)

# 创建一个空列表data

data = []

# 使用for循环遍历reader,将遍历的数据存储到变量info中

for info in reader:

    # 使用append()函数,将info逐一添加到data列表中

    data.append(info)

   

# 导入jieba模块

import jieba

# 使用for循环遍历data列表

for row in data:

    # 获取具体的评价内容,并赋值给变量text

    text = row[0]

    # 使用jieba.lcut()将text进行分词,并把结果赋值给ret

    ret = jieba.lcut(text)

    # 使用join()函数,将分词结果以空格合并为一个完整的字符串

    ret = ' '.join(ret)

    # 输出ret进行查看

print(ret)

为了构造词袋模型,我们已经完成了处理分词结果的第一个步骤,将每条评价的分词结果以空格连接生成一个新的字符串。现在可以进行第二步:将这些字符串逐一添加到一个新列表中。具体操作如下:

先新建一个列表word,再使用append()函数,将这些字符串逐一添加到新列表word中。我们在for循环外,将word输出进行查看。

修改后的代码:

# 导入jieba模块

import jieba

# 创建一个空列表word存储结果

word = []

# 使用for循环遍历data列表

for row in data:

    # 获取具体的评价内容,并赋值给变量text

    text = row[0]

    # 使用jieba.lcut()将text进行分词,并把结果赋值给ret

    ret = jieba.lcut(text)

    # 使用join()函数,将分词结果以空格合并为一个完整的字符串

    ret = ' '.join(ret)

    # 使用append()函数,添加分词结果到列表word中

    word.append(ret)

# 输出word进行查看

print(word)

接下来,就需要构造词袋模型,从这些评价中提取所有出现过的词语,然后统计每个词出现的频率,即词频。找到商品评论中出现次数最多的词语,比如出现频率最高的前15个词,可能就找出了最能够描述这件商品的关键词。

我们可以使用强大的机器学习模块:sklearn,来完成词袋模型的建立。通过它提供的函数,能够直接提取评论里出现的所有词语,并快速找到出现频率最高的词语~

同样sklearn不是内置模块,所以在使用前需要在终端中输入代码:pip install scikit-learn==1.1.3,进行安装。如果在自己电脑上无法安装或安装缓慢,可在命令后添加如下配置来加速:

pip install scikit-learn==1.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple/

                               

安装成功后,我们就可以使用sklearn模块建立词袋模型,并找出关键词啦。具体步骤如下:
STEP1. 导入模块
STEP2. 创建CountVectorizer对象
STEP3. 使用fit_transform()函数构造词袋模型
STEP4. 使用get_feature_names()提取关键词

具体步骤:

1. 导入模块

sklearn模块提供了多种机器学习所需的算法包。
构造词袋模型其实就是在提取文本的特征,也就是词频,需要用到的是
sklearn.feature_extraction.text模块,它包含了关于提取文本特征的算法。
该模块有一个 CountVectorizer 类,为我们提供了一些可以快速统计词频的方法。

(1) 导入模块

我们需使用
from...import...,从 sklearn.feature_extraction.text 模块中导入 CountVectorizer 类。

代码:from sklearn.feature_extraction.text import CountVectorizer

2. 创建CountVectorizer对象

导入模块后,需要创建一个CountVectorizer对象,这样才能调用CountVectorizer类里面的某个方法或属性。

代码:vect = CountVectorizer()

在创建对象时,可以传入可选参数max_features,用于控制提取的文本特征数量。
由于我们只想从评价中筛选出前15个出现频率最高的词语,所以传入了max_features=15。我们将创建好的对象存储在变量vect中。

修改后的代码:vect = CountVectorizer(max_features=15)

CountVectorizer类里,有个 fit_transform() 函数,用于构造词袋模型,计算各个词语出现的次数。传入该函数中的数据格式必须是一个字符串列表,这就解释了为什么刚刚我们需要对数据进行处理。fit_transform() 会筛选出所有评价里前15个出现频率最高的词语,并对这些词语进行编号,然后依次统计每条评价里这些词语出现的次数。

3. 调用fit_transform()函数构造词袋模型

只需对vect对象使用fit_transform()函数,然后将存储了分词结果的列表word传入其中即可。fit_transform()函数会返回一个稀疏矩阵(sparse matrix)来记录每一条评价里,每个词语出现的次数。我们把该结果赋值给了X,并输出进行查看

代码:

# 通过vect.fit_transform()和word,构造词袋模型

X = vect.fit_transform(word)

# 输出X

print(X)

原理:

现在,我们自己来尝试一下构造词袋模型吧~具体方法如下:
1. 使用
from...import...,从 sklearn.feature_extraction.text 模块中导入 CountVectorizer 类
2. 创建CountVectorizer对象,并将max_features=15作为可选参数传入,把结果存储在vect变量中
3. 对vect对象使用fit_transform()函数,将存储了分词结果的列表word传入其中,并把结果赋值给变量X
最后输出X变量,我们就得到了这份评论数据的词袋模型。

# 使用append()函数,添加分词结果到列表word中

    word.append(ret)

# 从sklearn.feature_extraction.text中导入CountVectorizer

from sklearn.feature_extraction.text import CountVectorizer

# 创建CountVectorizer对象,并存储在vect中

vect = CountVectorizer(max_features=15)

# 通过vect.fit_transform()和word,构造词袋模型

X = vect.fit_transform(word)

# 输出X

print(X)

4. 提取关键词

构建完词袋模型后,我们可以对vect对象使用get_feature_names()。

该函数会将评价里前15个出现频率最高的词语作为一个字符串列表返回。

提示:由于sklearn版本更新,在本地运行时,请将 get_feature_names()替换为 get_feature_names_out() 

修改后的代码# 对vect对象使用get_feature_names(),并将结果赋值给keywords

keywords = vect.get_feature_names()

# 输出keywords

print(keywords)

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

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

相关文章

力扣127.单词接龙讲解

距离上一次刷题已经过去了.........嗯............我数一一下............整整十天,今天再来解一道算法题 由于这段时间准备简历,没咋写博客。。今天回来了!!!!!!!&…

N5183B是德科技n5183b信号源

181/2461/8938产品概述: 简  述: N5183B 频率范围:9 kHz 至 20 GHz,具有 AM、FM、相位调制功能。N5183B MXG X 系列微波模拟信号发生器拥有 9 kHz 至 40 GHz 的频率覆盖范围,以及接近 PSG 级别的相位噪声性能&…

Java 【数据结构】 哈希(Hash超详解)HashSetHashMap【神装】

登神长阶 第十神装 HashSet 第十一神装 HashMap 目录 👔一.哈希 🧥1.概念 🩳2.Object类的hashCode()方法: 👚3.String类的哈希码: 👠4.注意事项: 🎷二.哈希桶 🪗1.哈希桶原理 &#x…

Github 2024-05-12 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目5Python项目2非开发语言项目2Vue项目1Rust项目1AFFiNE: 下一代知识库 创建周期:649 天开发语言:TypeScript协议类型:OtherSta…

【简单介绍下Sass】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

基于物联网的教室人数检测系统-设计说明书

设计摘要: 本设计基于物联网技术,实现了一个教室人数检测系统。系统利用STM32单片机作为中控,通过红外对管检测人员进出教室,并实时统计应到人数和实到人数,同时使用OLED显示屏显示相关信息。系统还通过温湿度传感器检…

如何使用 WavLM音频合成模型

微软亚洲研究院与 Azure 语音组的研究员们提出了通用语音预训练模型 WavLM。通过 Denoising Masked Speech Modeling 框架(核心思想是通过预测被掩蔽(即遮蔽或删除)的语音部分来训练模型,同时还包括去噪的过程)&#x…

YOLOv9最新改进系列:融合空间信息关注机制(SimAM)于YOLOv9网络,在通道之间和空间位置之间建立更加准确的关联,助力YOLOv9有效涨点!!!

YOLOv9最新改进系列:融合空间信息关注机制(SimAM)于YOLOv9网络,在通道之间和空间位置之间建立更加准确的关联,助力YOLOv9有效涨点!!! 在此之前!先恭喜两位家人!&#xf…

Spring MVC 介绍及其使用(详细)

目录 一.什么是SpringMVC呢? 1.1MVC的介绍 1.2SpringMVC和MVC的关系 二.SpringMVC的学习 第一步:创建项目 第二步,SpringMVC的连接 第三步,Spring MVC获取参数 第四步 SpringMVC的输出 总结 特点和优势 核心组件 一.什…

如何获得临时谷歌邮箱?

什么是临时谷歌邮箱? 临时谷歌邮箱,也称为一次性谷歌邮箱或匿名谷歌邮箱,可以用来作为你的个人临时谷歌邮箱账户,而不需要亲自注册谷歌账户就可以使用。这些邮箱在一定时间后自动销毁,期间无需用户进行任何操作。它们…

2023.5.12 第43周周报

学习时间:2023.5.5-2023.5.12 学习内容: 1、answer question: img: 看到有论文说应该让图像和文本的潜在嵌入具有相似和合理的数值范围【-2,2】 调试发现模型的文本图像的潜在嵌入虽然符合,但相差较大。 在将文本和…

2.2、Gitea忘记密码重置密码

忘记密码后,管理员可以使用gitea的主程序输入命令重置密码。 gitea admin user change-password --username myname --password asecurepassword

linux性能监控之slabtop

slabtop命令是以实时的方式显示内核slab缓冲区的细节信息&#xff0c;是linux自带的命令 [rootk8s-master ~]# slabtop --helpUsage:slabtop [options]Options:-d, --delay <secs> delay updates-o, --once only display once, then exit-s, --sort <char&…

学浪app的课程怎么导出来

在这个知识如星辰般璀璨的时代&#xff0c;学浪app汇聚了无数智慧的火花&#xff0c;点亮了求知者的前行之路。你是否曾在学浪的海洋中遨游&#xff0c;汲取知识的甘露&#xff0c;却渴望将那些珍贵的课程内容&#xff0c;如同宝藏一般&#xff0c;从数字的海洋中提取出来&…

【0003day】VOSviewer分析

这个软件也可以用知网&#xff0c;也可以用web of science。 首先&#xff0c;需要创建数据。这个数据如何创建&#xff0c;需要参考对应的教程。&#xff08;本文以web of science为平台来做分析。&#xff09; 首先&#xff0c;创建对应的数据库。 一直下一步 让后选择完…

Linux(Ubuntu24.04) 安装 MinIO

本文所使用的 Ubuntu 系统版本是 Ubuntu 24.04 ! # 1、下载 MinIO wget https://dl.min.io/server/minio/release/linux-amd64/minio# 2、添加可执行权限 chmod x minio# 3、导出环境变量&#xff0c;用于设置账号密码&#xff0c;我设置的账号和密码都是 minioadmin export MI…

锐捷EWEB网管系统RCE漏洞

文章目录 免责声明漏洞描述漏洞原理影响版本漏洞复现修复建议 免责声明 该文章只为学习和交流&#xff0c;请不要做违法乱纪的事情&#xff0c;如有与本人无关 漏洞描述 锐捷网管系统是由北京锐捷数据时代科技有限公司开发的新一代基于云的网络管理软件&#xff0c;以"…

C语言⼤⼩端模式对 union 类型数据有什么影响?

一、问题 计算机都是以⼋位⼀个字节为存储单位的&#xff0c;所以⼀个 16 位的整型就存在两种可能的存储顺序&#xff1a;⼤端模式和⼩端模式。那么⼤⼩端模式对共⽤体类型中的数据存储又有什么影响呢&#xff1f; 二、解答 1.⼤⼩端模式概述 考虑⼀个 int 型整数 29&#xf…

出海企业哪种组网方案更省事?

对于出海企业而言&#xff0c;建立跨地区的数据传输和协同工作至关重要&#xff0c;以提升运营效率。因此&#xff0c;网络构建变得迫在眉睫。通过构建企业组网&#xff0c;企业能够加强与海外分支、客户和合作伙伴之间的联系&#xff0c;加速海外业务的发展。 然而&#xff0c…

音视频--AAC编码解析和示例

目录 1&#xff1a;AAC编码介绍 2&#xff1a;AAC格式介绍 3&#xff1a;AAC -ADTS帧组成 4&#xff1a;AAC-ADTS&#xff1a;&#xff08;adts_fixed_header&#xff09;格式介绍 5&#xff1a;AAC-ADTS&#xff1a;&#xff08;adts_variable_header&#xff09;格式介绍…