0

我对基于追随者鸣叫Twitter帐户的追随者的分类(正极/负极)工作,基于此推文的用户情感分析和分类?根据推文对用户进行分类(正面或负面)的最佳方法?

收集数据

  1. 得到了所有的追随者,并从该他们的鸣叫每个鸣叫的各自帐户
  2. 情绪分析和标记为(正/负/中性)

其中哪一种是正确的?如果没有...有没有更好的方法?

我的用户分类方法1:

  1. 以来的中立性得分为0,删除所有中性标记的鸣叫
  2. 采取的积极和消极的鸣叫计数
    1. 有在所有推文中只有17%为负面推文(pos + neg)
  3. 我不停的阈值作为34%和分组鸣叫基于由用户的数据用户
    1. 出总鸣叫(正+ NEG),如果负鸣叫占34%以上我正在分类他作为负否则用户积极的用户
  4. 结果: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进行用户分类:

  1. 自的中性极性得分为0,删除所有中性标记的鸣叫
  2. 使用聚类鸣叫k均值算法(从先验知识它已知的是,有更多的正鸣叫,所以用更鸣叫集群是正簇)
  3. 分组鸣叫基于所述数据用户
  4. 预测哪个集群中用户b的每一鸣叫艺龙和标签与群集名称
  5. 鸣叫计算集群的标签,并指定用户正或负
  6. 结果:从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') 

代码,这是基于对微博用户进行分类是正确的做法?如果没有......有没有更好的方法吗?

+2

什么问题?你有什么问题吗? –

+0

布拉沃编写代码,但是什么是 的问题? –

+0

@ Francesco Montesano @ Stuart Buckingham这是正确的做法吗?如果没有...有没有更好的方法? –

回答

0

正确的做法是第三个:

一些法官评估用户的一个子集,并根据他们的鸣叫分配情绪得分给他们。然后使用一些机器学习技术(我建议使用SVM),您可以根据这些标记示例来训练模型,提供他们的推文内容,情感评分,绝对正面和负面数量,负面比例或其他(聚合)相关特征。最后,您应该将模型应用于看不见的用户以了解其极性。

我不想介绍火车验证测试,但应该是这样。您的方法不使用机器学习来区分用户,因为您只是将它用作黑盒来收集推文的极性。