赞
踩
一、英文的词向量生成想必大家都已经能从官网学到,利用sklean的CoutVectorizer模块即可简单生成,借用官网例子:
from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformer
vecizer = CountVectorizer()
corpus = [ 'This is the first document.','This is the second second document.',
'And the third one.','Is this the first document?']X = vectorizer.fit_transform(corpus)X.toarray() #输出词向量矩阵array([[0, 1, 1, 1, 0, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 2, 1, 0, 1],
[1, 0, 0, 0, 1, 0, 1, 1, 0],
[0, 1, 1, 1, 0, 0, 1, 0, 1]]...)
二、中文生成词向量矩阵和tfidf矩阵
由以上官网的例子,可以看出英文句子以空格隔开,可以直接使用CountVectorizer()函数进行词向量的生成,但是中文语句是没有这个特点的,需要我们先进行分词,我这里以jieba为例:
(一)jieba分词
(二)转换为CountVectorizer()函数支持的格式In[6]: texts = ['小明,今天中国的天气非常 好啊!','中国芯片技术落后于世界']
In[7]: for text in texts:
...: words = [word for word in jieba.cut(text)]
...: print(words)
out[7]:['小明', ',', '今天', '中国', '的', '天气', '非常', ' ', '好', '啊', '!']
['中国', '芯片', '技术落后', '于', '世界']
显然这种形势不符合英文的每句话作为一个字符串,并且以空格分隔的形式,不能使用CountVectorizer()函数,所以需要一些转换:
In[9]: ll = []
...: for text in texts:
...: words = [word for word in jieba.cut(text)]
...: ll.append(' '.join(words)) #['小明 , 今天 的 天气 非常 好 啊 !', '中国 芯片 技术落后 于 世界']分词后并转为该形式
...: print(ll)
转换后为:
['小明 , 今天 中国 的 天气 非常 好 啊 !',
'中国 芯片 技术落后 于 世界']
现在,和官网示例形式一样了,这时候就可以使用CountVectorizer()函数生成词向量,然后再生成tfidf矩阵:
counter = CountVectorizer()counts = counter.fit_transform(ll)print('countvectorizer词表:\n',counter.vocabulary_) #countvectorizer的词汇表,有多少个,词向量就是多少维度print('词向量矩阵:\n',counts.toarray()) #fit_transform后查看具体向量tfidfer = TfidfTransformer()tfidf = tfidfer.fit_transform(counts)print('tfidf向量矩阵:\n',tfidf.toarray()) #fit_transform后查看具体向量矩阵countvectorizer词表:
{'小明': 4, '今天': 2, '中国': 1, '天气': 3, '非常': 7, '芯片': 6, '技术落后': 5, '世界': 0}
词向量矩阵:
[[0 1 1 1 1 0 0 1]
[1 1 0 0 0 1 1 0]]
tfidf向量矩阵:
[[0. 0.33517574 0.47107781 0.47107781 0.47107781 0.
0. 0.47107781]
[0.53404633 0.37997836 0. 0. 0. 0.53404633
0.53404633 0. ]]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。