概述
中文与英文不同,中文字词都连在一起,普通程序很难实现有效分词,如下面例子:
中文文本特征抽取(反面例子)
# coding=utf-8
from sklearn.feature_extraction.text import CountVectorizer
# 实例化
vector=CountVectorizer()
# 调用fit_transform输入并转换数据
data=vector.fit_transform(['起来 不愿做奴隶的人们','把我们的血肉 筑成我们新的长城'])
# 打印结果
print(vector.get_feature_names())
# 返回sparse类型
print(data)
# 转成array类型
print(data.toarray())
执行结果如下:
['不愿做奴隶的人们', '把我们的血肉', '筑成我们新的长城', '起来']
(0, 0) 1
(0, 3) 1
(1, 2) 1
(1, 1) 1
[[1 0 0 1]
[0 1 1 0]]
问题:
与英文不同,汉字是连在一起的,所以分词结果并不是我们想要的结果
jieba中文分词
为了解决中文分词的问题,采用jieba分词
下载安装:
pip3 install jieba
使用:
import jieba
words=jieba.cut("起来 不愿做奴隶的人们,把我们的血肉 筑成我们新的长城")
for item in words:
print(item)
例子
中文分词后,做文本特征抽取
# coding=utf-8
from sklearn.feature_extraction.text import CountVectorizer
import jieba
# 实例化
vector=CountVectorizer()
# jieba分词
data=jieba.cut('起来不愿做奴隶的人们')
data2=jieba.cut('把我们的血肉筑成我们新的长城')
# 用空格连接分词
content=' '.join(data)
content2=' '.join(data2)
print(content)
print(content2)
# 调用fit_transform输入并转换数据
data=vector.fit_transform([content,content2])
# 打印结果
print(vector.get_feature_names())
# 返回sparse类型
print(data)
# 转成array类型
print(data.toarray())
# data=vector.inverse_transform(res)
# print(data)
执行结果:
起来 不愿 做 奴隶 的 人们
把 我们 的 血肉 筑成 我们 新 的 长城
['不愿', '人们', '奴隶', '我们', '筑成', '血肉', '起来', '长城']
(0, 1) 1
(0, 2) 1
(0, 0) 1
(0, 6) 1
(1, 7) 1
(1, 4) 1
(1, 5) 1
(1, 3) 2
[[1 1 1 0 0 0 1 0]
[0 0 0 2 1 1 0 1]]