博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
“云移杯- 景区口碑评价分值预测-文本情感词分析
阅读量:3575 次
发布时间:2019-05-20

本文共 3064 字,大约阅读时间需要 10 分钟。

题目描述:

题目理解:

    读红楼梦,看尽人世百态。自我反省了一下,发现自己的情商(为人处世)方面确实很差,说话太直或许做事太幼稚。从我和别人的对话之中,些许可以被听者听出来。我所说的话,也就是文本,文本的理解就是通过语气以及说话人的历史性格能够推测出来。

    这个题目,主要是通过对游客在某平台的留言以及用户主观的评论,需要的任务就是预测这些人的留言,推测他可能的主观评论。

方法方案:

    阅读过很多文本处理的方案,对于中文的方案本身比较少。也是因为中文的语义复杂,包含的情感多样。

    1.切分句子为单词,之后以空格连接每个单词,这样,句子就变成了与英文格式类似的样子。每一个单词/字符为一组,举个例子:

    LIKE YOU

    立刻有 => 立刻 有

    第一句是英语,自然就是每个单词一组,而对于中文,在没有标点的情况下,本身是在一起的,通过第三方分词工具,可以分成不同形式,这里举了一个例子,立刻/有 分成了与英文类似的结果。

    对于分好词后的句子,如何确定每个词的重要度,这时就有了TF-IDF的方案,可以将词转化为向量。具体对于不同的方案的含义,在之后的文章将会详细叙说,这里先主观的去感受一下,文本处理的传统方法是如何工作和处理。

    这里贴上代码,数据来源于上面提及的网站。

#coding:utf-8import pandas as pdimport matplotlib.pyplot as pltimport jiebaimport jieba.analysefrom sklearn.feature_extraction.text import CountVectorizer, HashingVectorizer, TfidfTransformer,TfidfVectorizerfrom sklearn.linear_model import Ridgefrom sklearn.metrics import mean_squared_errorfrom sklearn.preprocessing import OneHotEncoderimport scipyfrom sklearn.model_selection import KFold# from scipy.sparse import csr_matrixfrom scipy.sparse import csr_matrix, hstackdef get_data():    train = pd.read_csv('../data/train_first.csv')    test = pd.read_csv('../data/predict_first.csv')    data = pd.concat([train, test])    print('train %s test %s'%(train.shape,test.shape))    print('train columns',train.columns)    return data,train.shape[0],train['Score'],test['Id']# 分词处理def split_discuss(data):    data['length'] = data['Discuss'].apply(lambda x:len(x))    data['Discuss'] = data['Discuss'].apply(lambda x:' '.join(jieba.cut(x)))    return data# 预处理def pre_process():    data,nrw_train,y,test_id = get_data()    data = split_discuss(data)    cv = CountVectorizer(ngram_range=(1,2))    discuss = cv.fit_transform(data['Discuss'])    tf = TfidfVectorizer(max_df=10000,ngram_range=(1,2))    discuss_tf = tf.fit_transform(data['Discuss'])    # length = csr_matrix(pd.get_dummies(data['length'],sparse=True).values)    data = hstack((discuss,discuss_tf)).tocsr()    return data[:nrw_train],data[nrw_train:],y,test_iddef xx_mse_s(y_true,y_pre):    y_true = y_true    y_pre = pd.DataFrame({'res':list(y_pre)})    y_pre['res'] = y_pre['res'].astype(int)    return 1 / ( 1 + mean_squared_error(y_true,y_pre['res'].values)**0.5)X,test,y,test_id = pre_process()kf = KFold(n_splits=3,shuffle=True,random_state=42)cv_pred = []kf = kf.split(X)xx_mse = []model_1 = Ridge(solver='auto', fit_intercept=True, alpha=0.4, max_iter=250, normalize=False, tol=0.01)for i ,(train_fold,test_fold) in enumerate(kf):    X_train, X_validate, label_train, label_validate = X[train_fold, :], X[test_fold, :], y[train_fold], y[test_fold]    model_1.fit(X_train, label_train)    val_ = model_1.predict(X=X_validate)    print(xx_mse_s(label_validate, val_))    cv_pred.append(model_1.predict(test))    xx_mse.append(xx_mse_s(label_validate, val_))import numpy as npprint('xx_result',np.mean(xx_mse))s = 0for i in cv_pred:    s = s + is = s/3res = pd.DataFrame()res['Id'] = list(test_id)res['pre'] = list(s)res.to_csv('../result/t_20180215_1.csv',index=False,header=False)
    为什么对于评分问题要使用rmse的指标,是由于这个题目的评价指标就是rmse,所以使用回归的方式,这里面还有很多需要的问题需要解决,不过这些坑准备在后续的文章逐步的完善。

转载地址:http://rvxgj.baihongyu.com/

你可能感兴趣的文章
POJ 1915 Knight Moves
查看>>
Git 撤销修改
查看>>
Git 删除文件
查看>>
Git与远程仓库关联以及关联错误解决方法
查看>>
[HDU] 平方和与立方和
查看>>
[HDU 2096] 小明A+B
查看>>
[HDU 2520] 我是菜鸟,我怕谁(不一样的for循环)
查看>>
[HDU 1215] 七夕节(求因子,不超时)
查看>>
[POJ 1915] Knight Moves
查看>>
Memcache技术精华
查看>>
Redis详解入门篇
查看>>
php开启redis扩展包与redis安装
查看>>
php使用openssl来实现非对称加密
查看>>
pdo如何防止 sql注入
查看>>
myisam和innodb的区别
查看>>
MySQL建表规范与注意事项(个人精华)
查看>>
JDK8接口的新特性
查看>>
synchronized的局限性与lock的好处
查看>>
redis和memcached有什么区别?
查看>>
Spring中的设计模式
查看>>