文本向量化——方法1:基于高频词的向量化方式(包含python代码)

本文介绍了一种将文本向量化的方法,通过选取高频词作为特征,将文本转化为固定维数的向量。针对大文本,为了避免维数灾难,作者提出只保留词语并去除停用词,然后选取最常见的N个词作为特征。文中提供了使用Python实现的代码,并展示了部分向量化结果和高频词的频数柱状图,为后续的机器学习或深度学习处理做好准备。
摘要由CSDN通过智能技术生成

文本向量化——方法1:基于高频词的向量化方式(包含python代码)

点这里,下一篇——基于TF-IDF词袋模型文本向量化
对大文本进行处理和运用,最关键的一步就是如何将文本向量化,我最近学习和琢磨出了几种方法,这里跟大家分享,我这里以我上一篇博文爬取微博关于“线上教学”的评论作为例子。

一、构造思维
1、将文本转化为向量是处理文本的关键,而使得文本特征表现在对应向量上又是向量化的关键,简单来说就是为了将文本和向量一一对应,并且具有“相似的两个文本转化为相近的两个向量”这个性质。

2、想要获得最理想的特征向量,一个简单粗暴的方式就是将所有文字都取不同的值,按照文本文字顺序构造向量即可,如:
假定 我-1,喜-2,欢-3,吃-4,蛋-5,糕-6,西-7,瓜-8………
那么下面两句话的向量值:
我喜欢吃蛋糕
1 2 3 4 5 6
我喜欢吃西瓜
1 2 3 4 7 8

这样一来,不同的文本的向量必定不一样,并且相近的文本会得到相近的向量(如123456 123478 对于六维向量来说,是接近的,还原成文本以后都表示爱好吃xx的语句)

3、如果完全利用2中的方式,唯一的缺点就是维数问题。例如我提取的微博评论中一共超过3万字,那么就要构造3万维的特征向量,毫无疑问 这是一个维数灾难。三万条评论 需要三万维的向量表示,是没有意义的,计算负担和分析难度也可想而知。

4、对于2中的方法进行三步改进
第一:中文中词语才能表示意义,单个文字的特征表述远小于词语;故将词语作为特征提取对象,不仅赋予了向量一定意义上的语义,还缩小了向量维数,一个词语(两个字以上)仅用一个维数表示
第二:文本中大部分文字是无用的(比如啊、哦、的、了、呢……),称呼停用词,我们仅需要研究停用词之外具有表述意义的词语
第三,对大文本的研究,为了减轻计算负担,仅仅靠以上两步还是不够的,因为维数还是太大,为了减少维数,还需要去除大多数词语。那么除去哪些词语合适呢? 换另一种思维,除去哪些词其实等效于留下哪些词。 这里用地一个方法是,将所有文本中频率最高地那部分词语提出来作为特征词,因为高频词往往表达了百分之五十以上的总体信息;并且,我们可以控制维数,想要控制成N维,就提取最频繁出现的前N个词。一个文本集中的文本长度不一样,但是向量化后的维数是一样的,这也是大多数情况下我们所需要的。

5、例如,我在这里提取了三万多条评论的50个高频词作为特征对象,然后再对每一条评论进行如下方法的向量化:
将50个词按一定顺序排列,如果一条评论中出现某个高频词,相应的位子为1,否则为0,例如
假如 喜欢是高频词,排在第5位,那么“我爱吃蛋糕”和“我爱吃西瓜”的向量是一样的,即:只要第5位子是1,其他都是0的50维向量。这表明这两句话有一定关系,都是指表达爱好的语句。

二、下面是对三万条评论进行向量化的python代码(除去注释也就40行)

# coding:utf-8
import jieba
import matplotlib.pyplot as plt

# 导入评论(我分两次各提取了一万多条关于“线上教学”的评论分别保存在下面连两个文件中)
f1=open('weibocomment.txt','r',encoding='utf-8')
page1=f1.readlines()
f1.close()
f2=open('weibocomment1.t
Python 中,将文本字符串转换为向量可以使用多种方法,其中比较常用的方法是使用词袋模型和 tf-idf 算法。 词袋模型是一种简单直接的文本向量化方法,它将文本看作是一个词的集合,将每个词看作一个特征,每个文本则对应一个向量。向量中每个维度表示对应词语出现的次数。可以使用 Python 中的 CountVectorizer 或者 TfidfVectorizer 来实现。 以下是一个使用 CountVectorizer 的例子: ```python from sklearn.feature_extraction.text import CountVectorizer # 文本集合 corpus = [ 'This is the first document.', 'This is the second second document.', 'And the third one.', 'Is this the first document?', ] # 创建 CountVectorizer 对象 vectorizer = CountVectorizer() # 将文本转换为词频矩阵 X = vectorizer.fit_transform(corpus) # 输出词频矩阵 print(X.toarray()) # 输出特征名 print(vectorizer.get_feature_names()) ``` 输出结果为: ``` [[0 1 1 0 1 0 0 0 1] [0 1 0 0 1 0 0 1 1] [1 0 0 1 0 0 1 0 0] [0 1 1 0 1 0 0 0 1]] ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this'] ``` tf-idf 算法是一种基于词频的加权方法,它考虑到了文本中单词的重要性,将高频词的权重降低,将低频词的权重提高。可以使用 Python 中的 TfidfVectorizer 来实现。 以下是一个使用 TfidfVectorizer 的例子: ```python from sklearn.feature_extraction.text import TfidfVectorizer # 文本集合 corpus = [ 'This is the first document.', 'This is the second second document.', 'And the third one.', 'Is this the first document?', ] # 创建 TfidfVectorizer 对象 vectorizer = TfidfVectorizer() # 将文本转换为 tf-idf 矩阵 X = vectorizer.fit_transform(corpus) # 输出 tf-idf 矩阵 print(X.toarray()) # 输出特征名 print(vectorizer.get_feature_names()) ``` 输出结果为: ``` [[0. 0.43877674 0.54197657 0.43877674 0. 0. 0. 0. 0.43877674] [0. 0.27230147 0. 0.27230147 0. 0.85322574 0. 0. 0.27230147] [0.52547275 0. 0. 0. 0.52547275 0. 0.52547275 0.52547275 0. ] [0. 0.43877674 0.54197657 0.43877674 0. 0. 0. 0. 0.43877674]] ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this'] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值