从MySQL数据库中读取评价信息,用朴素贝叶斯对评价进行情感分析,判断出正面or负面or中性

       学习笔记                10-07                                                                                                  记录人:緑憂齊


本文在这篇文章的基础上完成:MySQL与eclipse如何建立连接,并测试连接是否成功


成功连上数据库后,该如何使用数据。


1.开发工具简介

语言:Java

软件:eclipse,MySQL

2.数据库设计

做练习,数据库设计的非常简单,就一张表,两个字段。

图  1:

从MySQL数据库中读取评价信息,用朴素贝叶斯对评价进行情感分析,判断出正面or负面or中性_第1张图片

 图  2:

从MySQL数据库中读取评价信息,用朴素贝叶斯对评价进行情感分析,判断出正面or负面or中性_第2张图片

 图  3:

从MySQL数据库中读取评价信息,用朴素贝叶斯对评价进行情感分析,判断出正面or负面or中性_第3张图片:

图  4:

从MySQL数据库中读取评价信息,用朴素贝叶斯对评价进行情感分析,判断出正面or负面or中性_第4张图片

3.改进 读取评论 并分析(正,负)


之前的代码:

没有使用到MySQL数据库的


import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import com.vista.ChineseSpliter;
import com.vista.ClassConditionalProbability;
import com.vista.PriorProbability;
import com.vista.TrainingDataManager;
import com.vista.StopWordsHandler;

import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Vector;

/**
* 朴素贝叶斯分类器
*/
public class BayesClassifier1 
{
	private TrainingDataManager tdm;//训练集管理器
	private String trainnigDataPath;//训练集路径
	private static double zoomFactor = 10.0f;
	/**
	*1. 默认的构造器,初始化训练集
	*/
	public BayesClassifier() 
	{
		tdm =new TrainingDataManager();
	}

	/**
	* 2.计算给定的文本属性向量X在给定的分类Cj中的类条件概率
	* ClassConditionalProbability连乘值
	* @param X 给定的文本属性向量
	* @param Cj 给定的类别
	* @return 分类条件概率连乘值,即
*/ float calcProd(String[] X, String Cj) { float ret = 1.0F; // 类条件概率连乘 for (int i = 0; i v1 = new Vector ();//Vector类可以实现可增长的对象数组 //构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。 for(int i=0;i T[] //toArray(T[] a) //返回一个数组,包含此向量中以正确顺序存放的所有元素;返回数组的运行时类型为指定数组的类型。 return newWords; } /** * 4.对给定的文本进行分类 * @param text 给定的文本 * @return 分类结果 */ @SuppressWarnings("unchecked") public String classify(String text) { String[] terms = null; terms= ChineseSpliter.split(text, " ").split(" ");//中文分词处理(分词后结果可能还包含有停用词) //--去除给定文本中的空格,这只是去除空格,可能还包括一些停用词 terms = DropStopWords(terms);//去掉停用词,以免影响分类 //--去掉空格和停用词之后的给定文本 String[] Classes = tdm.getTraningClassifications();//分类 //--这是一个集合,就是【正面,反面】 float probility = 0.0F; List crs = new ArrayList (); // 分类结果 for (int i = 0; i 0返回1呢?【疑问脸】----已经解决 } } }); //5.返回概率最大的分类 return crs.get(0).classification; } public static void main(String[] args) { String text = "微软公司提出以446亿美元的价格收购雅虎中国网2月1日报道 美联社消息,微软公司提出以446亿美元现金加股票的价格收购搜索网站雅虎公司。微软提出以每股31美元的价格收购雅虎。微软的收购报价较雅虎1月31日的收盘价19.18美元溢价62%。微软公司称雅虎公司的股东可以选择以现金或股票进行交易。微软和雅虎公司在2006年底和2007年初已在寻求双方合作。而近两年,雅虎一直处于困境:市场份额下滑、运营业绩不佳、股价大幅下跌。对于力图在互联网市场有所作为的微软来说,收购雅虎无疑是一条捷径,因为双方具有非常强的互补性。(小桥)"; BayesClassifier classifier = new BayesClassifier();//构造Bayes分类器 String result = classifier.classify(text);//进行分类 System.out.println("此项属于["+result+"]"); System.out.println("--------------------------"); String text1 = "在大门口买票,100元,然后买电瓶车的票,10元,会直接拉到景区大门口,进入景区之后,在公立的讲解点100押金20元可以租用一个讲解器,每个景点到了自动讲,挺清楚的。整个景区分西岸和东岸,从西岸开始,在尽头从桥上转到对岸看东岸的景点,是联票,一共四个景点。用了大概3小时,很详细的看了一遍。如果粗略走,可能1小时就能走下来了。龙门石窟是洛阳必去的景点,必须看,很壮观,特别壮观,非常壮观,信仰的力量是巨大的,这么多雕像,这么精美,甚至超小的石象也有很精细的五官。"; BayesClassifier classifier1 = new BayesClassifier();//构造Bayes分类器 String result1 = classifier1.classify(text1);//进行分类 System.out.println("此项属于["+result1+"]"); System.out.println("--------------------------"); String text2 = "卫生不好,节假日太过拥挤,下次不会再来了。"; BayesClassifier classifier2 = new BayesClassifier();//构造Bayes分类器 String result2 = classifier2.classify(text2);//进行分类 System.out.println("此项属于["+result2+"]"); System.out.println("--------------------------"); String text3 = "我持有中立的态度。"; BayesClassifier classifier3 = new BayesClassifier();//构造Bayes分类器 String result3= classifier3.classify(text3);//进行分类 System.out.println("此项属于["+result3+"]"); } }

运行结果:
从MySQL数据库中读取评价信息,用朴素贝叶斯对评价进行情感分析,判断出正面or负面or中性_第5张图片

改进后的代码:
使用MySQL数据库

package com.vista;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import com.vista.ChineseSpliter;
import com.vista.ClassConditionalProbability;
import com.vista.PriorProbability;
import com.vista.TrainingDataManager;
import com.vista.StopWordsHandler;

import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Vector;

/**
* 朴素贝叶斯分类器
*/
public class BayesClassifier 
{
	private TrainingDataManager tdm;//训练集管理器
	private String trainnigDataPath;//训练集路径
	private static double zoomFactor = 10.0f;
	/**
	*1. 默认的构造器,初始化训练集
	*/
	public BayesClassifier() 
	{
		tdm =new TrainingDataManager();
	}

	/**
	* 2.计算给定的文本属性向量X在给定的分类Cj中的类条件概率
	* ClassConditionalProbability连乘值
	* @param X 给定的文本属性向量
	* @param Cj 给定的类别
	* @return 分类条件概率连乘值,即
*/ float calcProd(String[] X, String Cj) { float ret = 1.0F; // 类条件概率连乘 for (int i = 0; i v1 = new Vector ();//Vector类可以实现可增长的对象数组 //构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。 for(int i=0;i T[] //toArray(T[] a) //返回一个数组,包含此向量中以正确顺序存放的所有元素;返回数组的运行时类型为指定数组的类型。 return newWords; } /** * 4.对给定的文本进行分类 * @param text 给定的文本 * @return 分类结果 */ @SuppressWarnings("unchecked") public String classify(String text) { String[] terms = null; terms= ChineseSpliter.split(text, " ").split(" ");//中文分词处理(分词后结果可能还包含有停用词) //--去除给定文本中的空格,这只是去除空格,可能还包括一些停用词 terms = DropStopWords(terms);//去掉停用词,以免影响分类 //--去掉空格和停用词之后的给定文本 String[] Classes = tdm.getTraningClassifications();//分类 //--这是一个集合,就是【正面,反面】 float probility = 0.0F; List crs = new ArrayList (); // 分类结果 for (int i = 0; i 0返回1呢?【疑问脸】----已经解决 } } }); //5.返回概率最大的分类 return crs.get(0).classification; } public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver");//加载MySQL JDBC驱动程序 //Class.forName("org.git.mm.mysql.Driver"); System.out.println("成功加载Mysql驱动程序!"); } catch(Exception e){ System.out.println("Mysql驱动加载错误!"); e.printStackTrace(); } try{ Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql1","root","123456"); //连接URL为: jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码 System.out.println("成功连接Mysql服务器!"); Statement stmt = connect.createStatement(); ResultSet rs = (ResultSet) stmt.executeQuery("select * from table_1"); //table_1 为你表的名称 while(rs.next()){ System.out.println(rs.getString("ID")); System.out.println(rs.getString("Summary")); String text = rs.getString("Summary"); BayesClassifier classifier = new BayesClassifier();//构造Bayes分类器 String result = classifier.classify(text);//进行分类 System.out.println("此项属于["+result+"]"); } } catch(Exception e){ System.out.println("获取数据错误!"); e.printStackTrace(); } } }

运行结果:
从MySQL数据库中读取评价信息,用朴素贝叶斯对评价进行情感分析,判断出正面or负面or中性_第6张图片

总结:
改进后的只是对main方法内代码作了改变,其他的一律不变。
改进前后的运行结果是一样的,仅仅是数据的读取方式变化,一个是直接给,一个是从数据库里取。






你可能感兴趣的:(mysql,eclipse,情感,数据库,朴素贝叶斯)