avatar

机器学习-字典、文字特征提取

一、字典特征提取

1、导入包

1
from sklearn.feature_extraction import DictVectorizer

2、函数编写

1
2
3
4
5
6
7
8
9
10
11
12
def dict_demo():
#字典特征提取
data = [{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}]
#1、实例化一个转换器类
transfer = DictVectorizer(sparse=False) #显示为全矩阵

#2、调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)
print("特征名字:\n",transfer.get_feature_names())

return None

3、运行结果

1
2
3
4
5
6
data_new:
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
特征名字:
['city=上海', 'city=北京', 'city=深圳', 'temperature']

二、文字特征提取

Countvectorizer提取

统计每个样本特征词出现的个数

1、导入包

1
2
from sklearn.feature_extraction.text import CountVectorizer
import jieba

2、函数编写

英文分词:

1
2
3
4
5
6
7
8
9
10
def count_demo():
#文本特征抽取
data = ["Life is short, i like python", "Flife is too Long, i dislike python"]
#实例化一个转换器类
transfer = CountVectorizer(stop_words=["is","too"])
#调用fit_fransform()
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new.toarray())
print("特征名称:\n",transfer.get_feature_names())
return None

中文 jieba 分词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def count_Chinese_demo():
#中文文本特征抽取,自动分词
#1、将中文文本进行分词
data = ["今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的这样当我们看到宇宙时,我们是套看它的过去",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
#实例化一个转换器类
transfer = CountVectorizer()
#调用fit_fransform()
data_final = transfer.fit_transform(data_new)
print("data_new:\n",data_final.toarray())
print("特征名称:\n",transfer.get_feature_names())
return None

def cut_word(text):
#进行中文分词
text = " ".join(list(jieba.cut(text)))
return text

3、运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
data_new:
[[0 0 1 1 0 1 1]
[1 1 0 0 1 1 0]]
特征名称:
['dislike', 'flife', 'life', 'like', 'long', 'python', 'short']


data_new:
[[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
[0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
[1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]
特征名称:
['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
TfidfVectorizer提取

用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度

1、导入包

1
2
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba

2、函数编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def tfidf_demo():
#用TF-IDF的方法进行文本特征抽取
#1、将中文文本进行分词
data = ["今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的这样当我们看到宇宙时,我们是套看它的过去",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系"]
data_new = []
for sent in data:
data_new.append(cut_word(sent))
# print(data_new)
#实例化一个转换器类
transfer = TfidfVectorizer()
#调用fit_fransform()
data_final = transfer.fit_transform(data_new)
print("data_new:\n",data_final.toarray())
print("特征名称:\n",transfer.get_feature_names())
return None

def cut_word(text):
#进行中文分词
text = " ".join(list(jieba.cut(text)))
return text

3、运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
data_new:
[[0. 0. 0.21821789 0. 0. 0.
0.43643578 0. 0. 0. 0. 0.
0.21821789 0. 0.21821789 0. 0. 0.
0. 0.21821789 0.21821789 0. 0.43643578 0.
0.21821789 0. 0.43643578 0.21821789 0. 0.
0. 0.21821789 0.21821789 0. 0. 0. ]
[0. 0. 0. 0.2410822 0. 0.
0. 0.2410822 0.2410822 0.2410822 0. 0.
0. 0. 0. 0. 0. 0.2410822
0.55004769 0. 0. 0. 0. 0.2410822
0. 0. 0. 0. 0.48216441 0.
0. 0. 0. 0. 0.2410822 0.2410822 ]
[0.15698297 0.15698297 0. 0. 0.62793188 0.47094891
0. 0. 0. 0. 0.15698297 0.15698297
0. 0.15698297 0. 0.15698297 0.15698297 0.
0.1193896 0. 0. 0.15698297 0. 0.
0. 0.15698297 0. 0. 0. 0.31396594
0.15698297 0. 0. 0.15698297 0. 0. ]]
特征名称:
['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']

评论