Alink是基于Flink的机器学习算法平台,欢迎访问Alink的github获取下载链接及更多信息。alibaba/Alink​github.com

也欢迎加入钉钉群进行交流。

情感分析是对带有情感色彩(褒义贬义/正向负向)的主观性文本进行分析,以确定该文本的观点、喜好、情感倾向。本文将针对顾客对酒店的评论数据,进行建模,并通过模型进行预测。演示情感分析中的常用操作,包括分词,文本向量化,及使用朴素贝叶斯(Naive Bayes)方法进行建模、预测。

每条记录包括评论内容和标记喜好的标签,标签只有2个值:1代表喜欢,0为不喜欢。下图显示了4条数据:

下面我们使用Alink来进行分析、建模。

首先,我们需要一个Alink的Java工程,配置好相关环境。最简单的办法是使用Alink的example工程,下载Alink git的代码,并用Jave IDE打开项目,如下图所示,可以看到三个已经写好的示例:ALSExample, GBDTExample, KMeansExample.

我们在com.alibaba.alink package下新建一个Java文件:

package com.alibaba.alink;

public class SentimentHotelSimpleExample {

public static void main(String[] args) throws Exception {

}

}

使用CsvSourceBatchOp读取URL数据,代码如下。设置列名分别为label和review,数据类型分别为整型和字符串类型,由于该CSV数据第一行保存的是列名,需要设置读取数据时忽略第一行。

CsvSourceBatchOp source = new CsvSourceBatchOp()

.setFilePath("https://github.com/SophonPlus/ChineseNlpCorpus/raw/master/datasets"

+ "/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv")

.setSchemaStr("label int, review string")

.setIgnoreFirstLine(true)

source.firstN(5).print();

最后一行代码是选择5条数据打印显示出来,结果如下:

label|review

-----|------

0|携程订单上写明:“房型特点:一张1.3*2,另一张1.1*2米,无法加床全部房间有免费宽带”,实际入住后见到的房间是我所见过的最小的标准间,两个床尺寸相同,床的两边均靠着墙,没有一点多余的空间,甚至连放行李的地方也没有,更不要提什么橱了,跟酒店提出与所订房间不同,他们说我们订的房间空调坏了,只能换这个房间,价格一样。我不知道这是酒店的欺诈还是携程的欺诈,我要求得到赔偿。如果需要证据的话,我有实拍的房间照片。另外,建议大家不要出泰山旅游,几乎一半的酒店会不定时,无预警的停电。

0|洗澡竟然没有热水!!太郁闷了~~第二天还要爬山啊!!不过网速还可以~

0|我要求里写了要安静的房间。。谁知道那天住在6楼,外面的风,凄惨的吹着,声音很大,一个小时才入睡。让酒店换房间。他们说,酒店周围没有树,每间房间声音都很大。。赫赫,这里理由么?看来下次,起风的时候就不能去住了。

0|过了好久才想起来评价,记得离火车站超级近,不过方便的同时必然会觉得比较吵。韩日旅游团住这里的很多,前台服务冷淡。两个人住标准间,只给一张房卡,还很挑衅的看我。气的没心情。宾馆反馈2008年7月17日:酒店针对客人提出的问题,现已认真整改,希望每一位入住渤海明珠酒店的您都能高兴入住,满意而归。

0|酒店在铁路旁,晚上火

然后,我们设置Pipeline,将整个处理和模型过程封装在里面,代码如下:

Pipeline pipeline = new Pipeline(

new Imputer()

.setSelectedCols("review")

.setOutputCols("featureText")

.setStrategy("value")

.setFillValue("null"),

new Segment()

.setSelectedCol("featureText"),

new StopWordsRemover()

.setSelectedCol("featureText"),

new DocCountVectorizer()

.setFeatureType("TF")

.setSelectedCol("featureText")

.setOutputCol("featureVector"),

new LogisticRegression()

.setVectorCol("featureVector")

.setLabelCol("label")

.setPredictionCol("pred")

);

解释一下各个算法组件的作用:Imputer:对“review”列进行缺失值填充,方式是填充字符串值“null”,结果写到“featureText“列。

Segment:是进行分词操作,即将原句子分解为单词,之间用空格分隔。由于没有输入结果列,分词结果会直接替换调输入列的值。

StopWordsRemover:是将分词结果中的停用词去掉。

DocCountVectorizer:对“featureText“列出现的单词进行统计,并根据计算出的TF值,将句子映射为向量,向量长度为单词个数,并保存在"featureVector"列。

LogisticRegression:是使用LogisticRegression分类模型。分类预测放在“pred” 列。

下面,我们就可以进入模型训练阶段。通过Pipeline的fit()方法,可以得到整个流程的模型(PipelineModel),记作变量model,代码如下:

PipelineModel model = pipeline.fit(source);

使用model可以对批式/流式数据进行预测,都是调用model的transform()方法。

model.transform(source)

.select(new String[]{"pred","label","review"})

.firstN(10)

.print();

运行结果为:

pred|label|review

----|-----|------

1|1|酒店服务真的很好,房间也很整洁。从阳台可以看到海景,海上有好多停着的船只,蛮有感觉的。自助早餐很不错,品种还是蛮丰富的。

1|1|洗了衣服本挂在洗手间的,等外出回来,已经拿架子挂在阳台上!满意服务态度一流,看到的全是笑脸!开心房间虽然设施老化,但很干净!安心海景不错!爽

1|1|非常好的地理位置,住的是豪华海景房,打开窗户就可以看见栈桥和海景。记得很早以前也住过,现在重新装修了。总的来说比较满意,以后还会住

1|1|我也是通过比较携程的用户评论选择海景的,是第一次住。总体感觉很好,房间硬件一般但很干净,每天有水果、糖果赠送,第一天还送玩偶,小孩子很喜欢。特别要提的是酒店服务很周到,餐饮和包车的价格也很公道,我们在酒店吃了两次晚餐都非常的满意,人均消费在30元左右(含酒水的哦)。同去的朋友都很满意,下次去威海还会住海景的。补充点评2008年7月29日:这里的工作人员各个彬彬有礼,作为一家国有企业实在难能可贵。例如,我早餐后刚在大堂的沙发坐下,服务员立即给我送上茶水和毛巾;我们在二楼公共休息区打牌,服务员见天色将黑,就主动把灯打开......

1|1|再次入住海景花园大酒店仍感亲切,酒店员工热情不减,服务还是这样的到位,我入住过的威海其他几家四星酒店与它相比,服务不在一个档次上,海景花园确实不错,下次我还是会入住.我要提的意见是,酒店客房空调不太制冷,服务不能在这些地方留有瑕疵,希望得到改进.

1|1|非常好的服务,虽然酒店挂牌4星,但服务不比5星差,整个酒店的服务员都很热情,你所见到的每个人都会主动向你问好,该酒店在细节的服务上也做的非常好,如:你在大堂内入座,服务员马上会给你上茶水和毛巾,都是免费的哦;你下出租车,服务员马上会递给你一张卡片,上面有你所乘坐的出租车号码,以免你万一有什么事可以找的到那辆车(因威海出租车的发票上没有车号)。如果一定要找一些酒店的缺点,那就是酒店的餐厅上菜的速度较慢,而且不要点川菜,因厨师不太会做。但不管如何,下次我去威海,还是会去该酒店入住。

1|1|确实不错!地点较佳,海景房正对栈桥和小青岛,不出房门,不用挤在旅游人群中,就能欣赏怡人海景;早餐较丰富且环境好,相对其价格,性价比高;一楼咖啡吧的简餐价格不高,味道较好,份量足(特别是三明治、热狗),是住客和非住店游客解决简单一餐或作为点心的好选择;宾馆楼道里的点心较受欢迎,品种多,质量高,而且添加及时,深受孩子喜爱;就是床略小(指带一个孩子睡的话)。总之,总体感觉好,推荐入住。

1|1|位置便利,价格便宜,服务周到,环境幽美!谢谢!

1|1|挺不错的酒店,每次去盐城都住在这里,价格便宜量又足!

1|1|还不错酒店,就餐和出行都很方便。服务态度也比较好。

附录完整的Java代码如下:

package com.alibaba.alink;

import com.alibaba.alink.operator.batch.source.CsvSourceBatchOp;

import com.alibaba.alink.pipeline.Pipeline;

import com.alibaba.alink.pipeline.PipelineModel;

import com.alibaba.alink.pipeline.classification.LogisticRegression;

import com.alibaba.alink.pipeline.dataproc.Imputer;

import com.alibaba.alink.pipeline.nlp.DocCountVectorizer;

import com.alibaba.alink.pipeline.nlp.Segment;

import com.alibaba.alink.pipeline.nlp.StopWordsRemover;

public class SentimentHotelSimpleExample {

public static void main(String[] args) throws Exception {

CsvSourceBatchOp source = new CsvSourceBatchOp()

.setFilePath("https://github.com/SophonPlus/ChineseNlpCorpus/raw/master/datasets"

+ "/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv")

.setSchemaStr("label int, review string")

.setIgnoreFirstLine(true);

//source.firstN(5).print();

Pipeline pipeline = new Pipeline(

new Imputer()

.setSelectedCols("review")

.setOutputCols("featureText")

.setStrategy("value")

.setFillValue("null"),

new Segment()

.setSelectedCol("featureText"),

new StopWordsRemover()

.setSelectedCol("featureText"),

new DocCountVectorizer()

.setFeatureType("TF")

.setSelectedCol("featureText")

.setOutputCol("featureVector"),

new LogisticRegression()

.setVectorCol("featureVector")

.setLabelCol("label")

.setPredictionCol("pred")

);

PipelineModel model = pipeline.fit(source);

model.transform(source)

.select(new String[] {"pred", "label", "review"})

.firstN(10)

.print();

}

}

java 情感分析_Alink中文情感分析示例(Java版本)相关推荐

  1. java对微博评论进行分析_微博上分析情感的_中文情感分析java_中文微博情感分析...

    目前,社会正处于一个微博崛起的时代,一切有关于微博的问题都被社会广泛关注,并得到了工业界和学术界的高度重视.微博从出现以来,取得了良好的发展,并拥有大众的普遍关注和应用.微博的超大信息量和高速度的更新 ...

  2. NLP第12课:完全基于情感词典的文本情感分析

    目前情感分析在中文自然语言处理中比较火热,很多场景下,我们都需要用到情感分析.比如,做金融产品量化交易,需要根据爬取的舆论数据来分析政策和舆论对股市或者基金期货的态度:电商交易,根据买家的评论数据,来 ...

  3. Java LinkedList addLast()方法与示例

    LinkedList addLast()方法 (LinkedList addLast() method) This method is available in package java.util.L ...

  4. Java LinkedList getFirst()方法与示例

    LinkedList getFirst()方法 (LinkedList getFirst() method) This method is available in package java.util ...

  5. Java LinkedList addFirst()方法与示例

    LinkedList addFirst()方法 (LinkedList addFirst() method) This method is available in package java.util ...

  6. 基于词典的中文情感倾向分析算法设计

    基于词典的中文情感倾向分析算法设计 https://site.douban.com/146782/widget/notes/15462869/note/355625387/   情感倾向可认为是主体对 ...

  7. 中文情感分析 (Sentiment Analysis) 的难点在哪?现在做得比较好的有哪几家?

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要25分钟 跟随小博主,每天进步一丢丢 来自: 知乎 编辑: 深度学习自然语言处理公众号 地址: https://www.zhihu.com/qu ...

  8. python中文情感分析分类和英文情感分析的库和方法汇总

    情感分析是自然语言处理中的一个常见任务.以下是用 Python 写的一个简单的情感分析分类函数的代码示例: import jieba import numpy as npdef sentiment_a ...

  9. 【中文情感分析】SO-PMI算法(HarvestText库的修正以及解析)

    简述 在最近的RA过程中,需要使用一个库,同时对其的原理需要理解.然后就研究了一些,发现了几个有趣的,其中一个HarvestText中文情感分析. 我研究了他的源码后,再结合理论知识发现了这个库在情感 ...

最新文章

  1. Winform开发几个常用的开发经验及知识积累(一)
  2. 在VIM里面设置自动补全功能
  3. 3种Java工厂模式深入理解分析
  4. mysql 有两种数据库引擎发音
  5. android升级SDK后,XML graphical layout无法预览的解决
  6. 周思进:自知“能力不足“让我专注十几年音视频
  7. 计算机科学与技术第2次上机实验,天大计算机科学与技术学院—汇编语言—上机实验报告302...
  8. HALCON示例程序high.hdev使用不同方法提取区域
  9. c语言金箍棒答案,《西游记》阅读测试题(带答案)
  10. 【AD18新手入门】从零开始制造自己的PCB
  11. Dagger2入门到放弃
  12. php向redis list一次性lpush多个值
  13. the JDBC Driver has been forcibly unregistered问题解决
  14. 计算机网络——集线器和交换机
  15. 人生有三重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水=
  16. Word长篇文档排版技巧
  17. 将Windows驱动程序从一台计算机复制到另一台计算机
  18. 利用Python处理辅助明细账并计算账龄
  19. 如何向妈妈解释什么是爬虫
  20. 熊猫烧香超级搞笑广告版本

热门文章

  1. 华硕笔记本快捷键.txt
  2. 论文发表-关于深度学习在问答系统和对话系统方面的应用研究-2018到2019年
  3. Java 战国大富翁,中国历史上二十大富豪 个个富可敌国
  4. threejs中几种挖洞方式
  5. 许奔创新社-第27问:创新者们如何进行跨界交流?
  6. ie下js判断本地office版本
  7. 电力电子pwm控制技术
  8. CKPlayer视频地址加密方法
  9. 阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
  10. matlab 股票 小波,小波分析 + 支持向量机(SVM)预测股票涨跌幅的实现