如何在python中制作术语频率矩阵



我正在处理一个情绪分析问题,我必须准备一个文档频率矩阵。例如,我有三个词(数据(与情绪

他是个好人

他是个坏学生

他很勤奋

这个独特的词汇表中有以下单词。

他,是,一个,好,人,坏,学生,勤奋

根据词汇表和数据,我将在下面给出3X8矩阵

第一句话:1,1,1,1,0,0

第二句:1,1,0,0,1,0

第三句:1,1,0,0,0,0,1

请提出在python中实现这一目标的最佳有效方法。

由于您用machine-learning标记了问题,我建议您使用sklearn。计数矢量器:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['He is a good person',
'He is bad student',
'He is hardworking']
df = pd.DataFrame(data=corpus, columns=['sentences'])
vectorizer = CountVectorizer(vocabulary=['he', 'is', 'a', 'good', 'person', 'bad', 'student', 'hardworking'], min_df=0,
stop_words=frozenset(), token_pattern=r"(?u)bw+b")
X = vectorizer.fit_transform(df['sentences'].values)
result = pd.DataFrame(data=X.toarray(), columns=vectorizer.get_feature_names())
print(result)

输出

he  is  a  good  person  bad  student  hardworking
0   1   1  1     1       1    0        0            0
1   1   1  0     0       0    1        1            0
2   1   1  0     0       0    0        0            1

这是get_dummies问题,为了实现您所需要的,您只需要遵循reindex

s='He,is,a,good,person,bad,student,hardworking'.split(',')
df.W1.str.get_dummies(sep=' ').reindex(columns=s)
Out[914]: 
He  is  a  good  person  bad  student  hardworking
0   1   1  1     1       1    0        0            0
1   1   1  0     0       0    1        1            0
2   1   1  0     0       0    0        0            1

数据输入

W1               W2
0  He is a good person     Positive Sense
1  He is bad student       Negative Sense
2  He is hardworking       Positive Sense

最新更新