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

时间:2018-12-04 18:40:23

标签: python-3.x machine-learning

我正在研究情绪分析问题,我必须准备一个文档频率矩阵。例如,我有三个带有情感的单词(数据)

他是一个好人|正面感

他是坏学生|负感

他很努力|正面感

独特词汇中包含以下单词。

他是一个好人,坏,学生,努力工作

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

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

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

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

请提出在python中实现此目标的最佳方法。

2 个答案:

答案 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

答案 1 :(得分:0)

由于您用machine-learning标记了问题,因此建议您使用sklearn.CountVectorizer

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)\b\w+\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