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

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

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

import jieba  
from sklearn.feature_extraction.text import CountVectorizer

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

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

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

documents = [' '.join(jieba.cut(doc)) for doc in documents]

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

vectorizer = CountVectorizer()

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

vectorized_data = vectorizer.fit_transform(documents)

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

print(vectorized_data.toarray())

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

print(vectorizer.get_feature_names())

输出效果:

[[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]]
['很多', '文档', '有些', '第一个', '第三个', '第二个', '词是', '这是', '重复']

不使用结巴分词效果

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

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

完整代码如下:

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())

你可能感兴趣的:(Python,python,开发语言)