sklearn-中文文本特征抽取

概述

中文与英文不同,中文字词都连在一起,普通程序很难实现有效分词,如下面例子:

中文文本特征抽取(反面例子)

# 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]]

原文出处:/show_1EF3YCLOARy2.html