我正在处理一个情绪分析问题,我必须准备一个文档频率矩阵。例如,我有三个词(数据(与情绪
他是个好人
他是个坏学生
他很勤奋
这个独特的词汇表中有以下单词。
他,是,一个,好,人,坏,学生,勤奋
根据词汇表和数据,我将在下面给出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