0
我对基于追随者鸣叫Twitter帐户的追随者的分类(正极/负极)工作,基于此推文的用户情感分析和分类?根据推文对用户进行分类(正面或负面)的最佳方法?
收集数据
- 得到了所有的追随者,并从该他们的鸣叫每个鸣叫的各自帐户
- 情绪分析和标记为(正/负/中性)
其中哪一种是正确的?如果没有...有没有更好的方法?
我的用户分类方法1:
- 以来的中立性得分为0,删除所有中性标记的鸣叫
- 采取的积极和消极的鸣叫计数
- 有在所有推文中只有17%为负面推文(pos + neg)
- 我不停的阈值作为34%和分组鸣叫基于由用户的数据用户
- 出总鸣叫(正+ NEG),如果负鸣叫占34%以上我正在分类他作为负否则用户积极的用户
- 结果:300名追随者出来我让他们19人是他们的负面其余均为正
我的方法1
代码users=set(classify_followers['users'])
user_to_classify=[]
classify=[]
for user in users:
user_to_classify.append(user)
temp=classify_followers[(classify_followers['users']==user)]
if(temp.shape[0]>1):
if(('positive' in set(temp['sentiment']))
and ('negative' in set(temp['sentiment']))):
positive_count=temp[(temp['sentiment']=='positive')]['sentiment'].count()
negetive_count=temp[(temp['sentiment']=='negative')]['sentiment'].count()
positive_percent=(positive_count/temp.shape[0])*100
negetive_percent=(negetive_count/temp.shape[0])*100
if(negetive_percent>=34):
classify.append('negative')
else:
classify.append('positive')
else:
if('positive' in set(temp['sentiment'])):
classify.append('positive')
else:
classify.append('negative')
else:
if('positive' in set(temp['sentiment'])):
classify.append('positive')
else:
classify.append('negative')
我的方法2进行用户分类:
- 自的中性极性得分为0,删除所有中性标记的鸣叫
- 使用聚类鸣叫k均值算法(从先验知识它已知的是,有更多的正鸣叫,所以用更鸣叫集群是正簇)
- 分组鸣叫基于所述数据用户
- 预测哪个集群中用户b的每一鸣叫艺龙和标签与群集名称
- 鸣叫计算集群的标签,并指定用户正或负
- 结果:从300个追随者我得到了他们的19人负其余均为正
我的方法2
df=data[((data['sentiment']=='negative') | (data['sentiment']=='positive'))]
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(df['tweets'])
true_k = 2
model = KMeans(n_clusters=true_k, init='k-means++'
, max_iter=10000, n_init=1)
model.fit(X)
print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
print("Cluster %d:" % i),
for ind in order_centroids[i, :20]:
print(' %s' % terms[ind]),
print
labels=model.labels_
print(np.bincount(labels))
d=pd.DataFrame()
d['labels']=labels
d['senti']=df['sentiment']
d['labels'].value_counts()
#to know which label having more data(more data is positive less is negative)
a=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive')
and d['labels'][i]==1)]
b=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive')
and d['labels'][i]==0)]
c=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative')
and d['labels'][i]==1)]
d=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative')
and d['labels'][i]==0)]
print(len(a),len(b),len(c),len(d))
users=set(df['users'])
prediction=[]
for user in users:
temp=df[(df['users']==user)]
temp=temp['tweets']
Y = vectorizer.transform(temp)
tweet_predictions=model.predict(Y)
no_one=np.count_nonzero(tweet_predictions==1)
no_zero=np.count_nonzero(tweet_predictions==0)
if(no_one>no_zero):
prediction.append('positive')
else:
prediction.append('negative')
代码,这是基于对微博用户进行分类是正确的做法?如果没有......有没有更好的方法吗?
什么问题?你有什么问题吗? –
布拉沃编写代码,但是什么是 的问题? –
@ Francesco Montesano @ Stuart Buckingham这是正确的做法吗?如果没有...有没有更好的方法? –