(5)【整合】基于机器学习的酒店评论文本倾向性分析
酒店评论情感分析系统(五)——
【整合】基于机器学习的酒店评论文本倾向性分析
本文主要是对之前的第三、四节所介绍的各分块进行整合。
流程:
对GUI界面输入的评论文本,先进行中文分词和去停用词,然后再按“环境,价格,卫生,服务”四个方面分类;同时通过调用LingPipe中的DynamicLMClassifier,对已标注的“中文情感挖掘酒店评论语料”库的学习,构造一个基本极性分析的分类器。最后用此分类器分别对整个评论文本给出总体评价和对四个方面分别给出相应的情感评价。
环境:
1. 操作系统:windows7,X86,32位
2. Java JDK1.6
3. LingPipe4.1
4. Eclipse3.4
5. NetBeans6.9
6.中文分词工具:ictclas4j
项目运行图示:
按四个方面分类的结果:
由上分类结果可推知:
环境:pos 卫生:neg 价格:neg 服务:pos
项目运行结果:
项目整合:
将(三)中介绍的两个类FileExcludeStopWord和Fenglei与(四)中的两个类MyClassifier和SentimentAnalysisUI整合在一块,并对里面的代码做相应的调整,核心思想不做改变即可。
此处主要讲解SentimentAnalysisUI类:
定义和初始化分类器变量:
1 DynamicLMClassifier<NGramProcessLM> sClassifier;
2 MyClassifier mClassifier = new MyClassifier();
3 FileExcludeStopWord fesw = new FileExcludeStopWord(); //分词并去停用词
4 Fenglei fl = new Fenglei(); //按四个方面分类
5
6 /** Creates new form SentimentAnalysisUI */
7 public SentimentAnalysisUI() {
8 initComponents();
9 sClassifier = mClassifier.getClassifier(); //分类器
10 }
界面中Commit按钮所触发的事件:
1 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) throws UnsupportedEncodingException {//GEN-FIRST:event_jButton1ActionPerformed
2
3 String temp,review;
4 String resultAll, resultE, resultP, resultS, resultH;
5 temp = String.valueOf(jTextArea1.getText()); //界面输入的源评论文本
6 review = new String(temp.getBytes("GB2312"),"ISO-8859-1"); //【总评】文本编码转换
7 Classification classification = sClassifier.classify(review); //【总评】分类
8 resultAll = String.valueOf(classification.bestCategory()); //【总评】分类结果
9 String[] finalStr = fesw.fileExcludeStopWord(temp); //分词和去停用词
10 String[] tempRe = fl.fenlei(finalStr); //按四个方面分类 【细评】
11 String[] tempfi = new String[tempRe.length];
12 for(int i = 0; i<tempRe.length;i++){
13 tempfi[i] = new String(tempRe[i].getBytes("GB2312"),"ISO-8859-1"); //【细评】文本编码转换
14 }
15 resultE = String.valueOf(sClassifier.classify(tempfi[0]).bestCategory()); //0-环境
16 resultH = String.valueOf(sClassifier.classify(tempfi[1]).bestCategory()); //1-卫生
17 resultP = String.valueOf(sClassifier.classify(tempfi[2]).bestCategory()); //2-价格
18 resultS = String.valueOf(sClassifier.classify(tempfi[3]).bestCategory()); //3-服务
19
20 jTextArea2.setText(String.valueOf("总评:"+resultAll+"\n"+"环境:"+resultE+"\n"+"卫生:"+resultH+"\n"+
21 "价格:"+resultP+"\n"+"服务:"+resultS+"\n")); //显示分析结果
22
23 }//GEN-LAST:event_jButton1ActionPerformed
本项目不足之处:
a. 五个相关语料库(EnvironmentRef,HealthRef,PriceRef,ServiceRef,RefWords)应该更加完善
b. 训练集中的文本数量应该更多一些,这样分类器的正确率还可以得到更大的提升
c. 文本倾向性分析的结果对源文本的输入格式有很大的依赖性