在文本分析和自然语言处理中,将中文文本转换为数值型格式是一个重要的步骤。这有助于我们利用机器学习算法进行高效的数据分析。因为之前的学习中发现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())