情感语意分析basline

小白一只刚接触NLP,百度2018年的新手入门赛用户

评论情感赛题介绍

     本次赛题为“用户评论数据情感极性判别”:网络上用户对商家的评论数据,往往带有情感极性,如正面、负面、中立。用户评论的情感极性,一定程度上体现商家提供的产品

    和服务的质量,是商家自我监督的预警灯。例如,餐馆出现大量的负面评论,则表明食品可能出现难吃甚至卫生问题,此时商家需引起重视并进行整改。但是评论情感极性判别的

    人工成本很高,用机器取代人工判别则可降低成本。

    因而,我们采集了多行业的用户对商家的评论数据,期望开发者通过建立模型分析出评论的的正向、中立、负向情感极性。



首先我们要明白,计算机是不能从文本字符串中发现规律的。只有将字符串编码为计算机可以理解的数字,计算机才有可能发现文本中的规律。



对于我这个新手来说,主要是不知道如何将文本转化为计算机所能识别的数值向量,后来学习sklearn后发现


在sklearn中有CountVectorizer和TfidfVectorizer方法

CountVectorizer和TfidfVectorizer是文本特征提取的两种方法。两者的主要区别在于,CountVectorizer仅仅通过计算词语词频,没有考虑该词语是否有代表性。而TfidfVectorizer可以更加精准的表征一个词语对某个话题的代表性。

我采用了TfV, CountVectorizer和TfidfVectorizer用法相同就不一一列举


import comments_return
import pandas as pd
import numpy as np
from sklearn import cross_validation, metrics
from sklearn.svm import SVC
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

data,dataset_Y=comments_return.test_data()
p1,p2,p3,p4=comments_return.test_tetsdata()
# print(data)
# print(dataset_Y)
X_train, X_test, y_train, y_test = train_test_split(data, dataset_Y,
                                                      test_size=0.5,
                                                      random_state=21)
feature_extraction=TfidfVectorizer()
X_train=feature_extraction.fit_transform(X_train)

svc=KNeighborsClassifier()
print("fitint....")
svc.fit(X_train,y_train)
X_test1=feature_extraction.transform(p1)
print("pre1..")
pre1=svc.predict(X_test1)
X_test2=feature_extraction.transform(p2)
print("pre2..")
pre2=svc.predict(X_test2)
X_test3=feature_extraction.transform(p3)
print("pre3..")
pre3=svc.predict(X_test3)
X_test4=feature_extraction.transform(p4)
pre4=svc.predict(X_test4)

# print(X_train.shape)
# print(X_test1.shape)
# print(X_test2.shape)
# print(X_test3.shape)
# print(X_test4.shape)

print("pre:")
print(pre1)
print(pre2)
print(pre3)
print(pre4)

# acc = metrics.accuracy_score(y_test, pre)
# print(acc)
count=1
with open("baidu_sub3.csv","w") as f:
    for i in range(len(pre1)):
        f.write(str(count)+","+str(int(pre1[i]))+"\n")
        count=count+1
    for i in range(len(pre2)):
        f.write(str(count) + "," + str(int(pre2[i])) + "\n")
        count = count + 1
    for i in range(len(pre3)):
        f.write(str(count) + "," + str(int(pre3[i])) + "\n")
        count = count + 1
    for i in range(len(pre4)):
        f.write(str(count) + "," + str(int(pre4[i])) + "\n")
        count = count + 1
print("pre over..")







猜你喜欢

转载自blog.csdn.net/qq_39622065/article/details/80555327