Python文本向量化入门(四):中文词袋问题

在文本分析和自然语言处理中,将中文文本转换为数值型格式是一个重要的步骤。这有助于我们利用机器学习算法进行高效的数据分析。因为之前的学习中发现Scikit-learn的CountVectorizer不支持中文分词,所以在本篇文章中,我们将介绍如何使用jieba分词和Scikit-learn的CountVectorizer进行中文文本的特征提取。

首先,我们需要导入所需的库和模块:

python 复制代码
import jieba  
from sklearn.feature_extraction.text import CountVectorizer

接下来,我们定义了一些中文文本数据:

python 复制代码
documents = [  
    '这是第一个文档。',  
    '这是第二个文档。',  
    '这是第三个文档。第三个文档有很多词,但有些词是重复的。'  
]

然后,我们使用jieba分词对文本进行预处理,将其切分成单独的词或词素:

python 复制代码
documents = [' '.join(jieba.cut(doc)) for doc in documents]

接下来,我们创建一个CountVectorizer对象,用于将文本数据转换为词频矩阵:

python 复制代码
vectorizer = CountVectorizer()

使用fit_transform方法将分词结果转换为词频矩阵:

python 复制代码
vectorized_data = vectorizer.fit_transform(documents)

现在,我们可以打印词频矩阵的数组表示形式,以查看矩阵的内容:

python 复制代码
print(vectorized_data.toarray())

最后,我们可以使用get_feature_names方法输出默认的词袋(词汇表):

python 复制代码
print(vectorizer.get_feature_names())

输出效果:

python 复制代码
[[0 1 0 1 0 0 0 1 0]
 [0 1 0 0 0 1 0 1 0]
 [1 2 1 0 2 0 1 1 1]]
['很多', '文档', '有些', '第一个', '第三个', '第二个', '词是', '这是', '重复']

不使用结巴分词效果

python 复制代码
[[0 0 1 0 0]
 [0 0 0 0 1]
 [1 1 0 1 0]]
['但有些词是重复的', '第三个文档有很多词', '这是第一个文档', '这是第三个文档', '这是第二个文档']

所以对比一看,中文分词后效果会好很多。这样对比起来准确度应该会更好,更符合我们人的逻辑。

完整代码如下:

python 复制代码
import jieba
from sklearn.feature_extraction.text import CountVectorizer

# 定义文本数据
documents = [
    '这是第一个文档。',
    '这是第二个文档。',
    '这是第三个文档。第三个文档有很多词,但有些词是重复的。',
]

# 使用jieba分词对文本进行预处理
documents = [' '.join(jieba.cut(doc)) for doc in documents]

# 创建CountVectorizer对象
vectorizer = CountVectorizer()

# 将分词结果转换为词频矩阵
vectorized_data = vectorizer.fit_transform(documents)

# 输出词频矩阵
print(vectorized_data.toarray())

# 输出默认的词袋(词汇表)
print(vectorizer.get_feature_names())
相关推荐
小羊羔heihei2 分钟前
Python编程实战:12道趣味算法题
笔记·python·学习·其他·算法·学习方法·交友
南 阳19 分钟前
Python从入门到精通day59
开发语言·python·php
JMchen12320 分钟前
Android NDK开发从入门到实战:解锁应用性能的终极武器
android·开发语言·c++·python·c#·android studio·ndk开发
weixin_4577600021 分钟前
深入解析 Beam Search:从原理到实践的高效解码算法
python·算法
会飞De琥珀38 分钟前
java工具类,字符串转时间
java·开发语言
小羊羔heihei1 小时前
Python列表操作全攻略
经验分享·笔记·python·学习·其他·交友
源码潇潇和逸逸1 小时前
独立部署高校圈子平台:PHP+UniApp打造社交+交易+服务一站式校园解决方案
开发语言·uni-app·php
2501_908329851 小时前
实战:用OpenCV和Python进行人脸识别
jvm·数据库·python
LINgZone21 小时前
深入解析:Cglib与JDK动态代理的实现原理、区别及性能对比
java·开发语言
一次旅行1 小时前
今日心理学知识分享(三)
开发语言·javascript·程序人生·ecmascript