我正在研究情绪分析问题,我必须准备一个文档频率矩阵。例如,我有三个带有情感的单词(数据)
他是一个好人|正面感
他是坏学生|负感
他很努力|正面感
独特词汇中包含以下单词。
他是一个好人,坏,学生,努力工作
根据词汇和数据,我将在下面给出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中实现此目标的最佳方法。
答案 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