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())
相关推荐
逐步前行8 小时前
C标准库--C99--布尔型<stdbool.h>
c语言·开发语言
程序员爱钓鱼8 小时前
Python编程实战 · 基础入门篇 | 元组(tuple)
后端·python·ipython
QX_hao8 小时前
【Go】--闭包
开发语言·golang
程序员爱钓鱼8 小时前
Python编程实战 · 基础入门篇 | 列表(list)
后端·python·ipython
御承扬10 小时前
编程素养提升之EffectivePython(Builder篇)
python·设计模式·1024程序员节
chenchihwen10 小时前
AI代码开发宝库系列:FAISS向量数据库
数据库·人工智能·python·faiss·1024程序员节
林月明11 小时前
【VBA】自动设置excel目标列的左邻列格式
开发语言·excel·vba·格式
喜欢吃燃面11 小时前
数据结构算法题:list
开发语言·c++·学习·算法·1024程序员节
。TAT。12 小时前
C++ - 多态
开发语言·c++·学习·1024程序员节
AI视觉网奇12 小时前
json 可视化 2025 coco json
python·1024程序员节