标签:from form throw cti statement images ignore 写入 list
今天毕设的任务是获取用户行为,根据TF-IDF算法计算标签权重,并写入数据库;
代码:
Action.java
package entity; public class Action { private int user_id;//用户id private int tag_id;//标签id private String tag_name;//标签名称 private String tag_type;//标签类型 private String action_name;//行为名称 private int action_count;//行为次数 private String action_time;//行为时间 private double weight;//全权重 public int getUser_id() { return user_id; } public void setUser_id(int user_id) { this.user_id = user_id; } public int getTag_id() { return tag_id; } public void setTag_id(int tag_id) { this.tag_id = tag_id; } public String getTag_name() { return tag_name; } public void setTag_name(String tag_name) { this.tag_name = tag_name; } public String getTag_type() { return tag_type; } public void setTag_type(String tag_type) { this.tag_type = tag_type; } public String getAction_name() { return action_name; } public void setAction_name(String action_name) { this.action_name = action_name; } public int getAction_count() { return action_count; } public void setAction_count(int action_count) { this.action_count = action_count; } public String getAction_time() { return action_time; } public void setAction_time(String action_time) { this.action_time = action_time; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } }
Tag.java
package entity; public class Tag { private int tag_id;//标签id private String tag_name;//标签名称 private String tag_type;//标签类型 private int count;//标签被标记次数 public int getTag_id() { return tag_id; } public void setTag_id(int tag_id) { this.tag_id = tag_id; } public String getTag_name() { return tag_name; } public void setTag_name(String tag_name) { this.tag_name = tag_name; } public String getTag_type() { return tag_type; } public void setTag_type(String tag_type) { this.tag_type = tag_type; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } }
Shoes.java
package entity; public class Shoes { private int id;//商品id private String shoes_name;//商品名称 private float price;//商品价格 private String image;//图片链接 private String deal;//销量 private String shop_name;//店铺名称 private String address;//店铺地址 private String url;//商品链接 private String images;//详情图片链接 private String details;//商品介绍 private String source;//商品来源网址 private String history_price;//商品历史价格 private float low_price;//商品最低价格 private String low_date;//最低价格日期 private String analyse;//价格走势分析 private String trend;//价格走势 private String tag;//商品标签 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getShoes_name() { return shoes_name; } public void setShoes_name(String shoes_name) { this.shoes_name = shoes_name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getDeal() { return deal; } public void setDeal(String deal) { this.deal = deal; } public String getShop_name() { return shop_name; } public void setShop_name(String shop_name) { this.shop_name = shop_name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public String getDetails() { return details; } public void setDetails(String details) { this.details = details; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } public String getHistory_price() { return history_price; } public void setHistory_price(String history_price) { this.history_price = history_price; } public float getLow_price() { return low_price; } public void setLow_price(float low_price) { this.low_price = low_price; } public String getLow_date() { return low_date; } public void setLow_date(String low_date) { this.low_date = low_date; } public String getAnalyse() { return analyse; } public void setAnalyse(String analyse) { this.analyse = analyse; } public String getTrend() { return trend; } public void setTrend(String trend) { this.trend = trend; } public String getTag() { return tag; } public void setTag(String tag) { this.tag = tag; } }
ActionDao.java
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.DecimalFormat; import java.util.Calendar; import java.util.List; import util.DBUtil; import dao.TagDao; public class ActionDao { /* *计算TF-IDF值 */ /** *calculate the tag frequency * @throws SQLException */ public static float tf(int shoes_id, String tag) throws SQLException { int tagFrequency = 0; DecimalFormat df=new DecimalFormat("0.00");//java保留两位小数 ShoesDao shoesDao = new ShoesDao(); String[] shoes_tag = shoesDao.getShoesTagByShoesId(shoes_id); for (String str : shoes_tag) { if (str.equalsIgnoreCase(tag)) { tagFrequency++; } } System.out.println(tagFrequency); System.out.println(shoes_tag.length); return Float.parseFloat(df.format((float)tagFrequency/shoes_tag.length)); } /** *calculate the inverse document frequency */ public static float idf(String tag) { int shoes_count = 100000; TagDao tagDao = new TagDao(); int count = tagDao.getCountByTagName(tag); return (float) Math.log(((float)shoes_count/count)); } /** * calculate tf-idf * @throws SQLException */ public double tfIdf(int shoes_id, String tag) throws SQLException { return tf(shoes_id, tag) * idf(tag); } /* * TF-IDF结束 */ //添加用户行为时不传入商品id,可以计算TF=1 ,计算IDF,比如注册,搜索 public void addUserAaction_noShoes(int user_id,List<String> tag,String action_name) throws SQLException { Connection connection = DBUtil.getConnection(); PreparedStatement preparedStatement = null; ResultSet resultSet = null; //获取当前年月日 Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH)+1; int day = cal.get(Calendar.DATE); String action_time = year + "-" + month + "-" + day; System.out.println(action_time); //设置计算用户行为权重 float action_weight = 0; if(action_name == "点击") action_weight = (float) 0.6; else if(action_name == "搜索") action_weight = (float) 0.8; else if(action_name == "收藏") action_weight = (float) 1; else if(action_name == "取消收藏") action_weight = (float) -1; else if(action_name == "不感兴趣") action_weight = (float) -0.8; else action_weight = (float) 0.65; System.out.println(action_weight); for(int i = 0;i<tag.size();i++) {//将tag数组循环保存到user_action中 //先在user_action表中查询该条行为是否存在 String sql = "select * from user_action where user_id=? and tag_name=? and action_name=? and action_time=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, user_id); preparedStatement.setString(2,tag.get(i)); preparedStatement.setString(3, action_name); preparedStatement.setString(4, action_time); resultSet = preparedStatement.executeQuery(); System.out.println("查询是否存在该条行为:"+resultSet); System.out.println(resultSet.next()); if (resultSet.next()) {//该条行为若存在,将count+1 int count = resultSet.getInt("id")+1; System.out.println("该条行为存在,count为"+count); float weight = (float) (action_weight * 0.5 * idf(tag.get(i)) * count); System.out.println(weight); sql = "update user_action set action_count=?, weight = ? where user_id=? and tag_name=? and action_name=? and action_time=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, count); preparedStatement.setFloat(2, weight); preparedStatement.setInt(3,user_id); preparedStatement.setString(4, tag.get(i)); preparedStatement.setString(5, action_name); preparedStatement.setString(6, action_time); preparedStatement.executeUpdate(); }else {//该条行为不存在,将该条行为插入到数据库中 System.out.println("该条行为不存在"); sql ="select * from tag where tag_name=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, tag.get(i)); resultSet = preparedStatement.executeQuery(); if(resultSet.next()) {//查询这个标签是不是在标签库中,如果在将行为插入到user_action中 int tag_id = resultSet.getInt("tag_id"); String tag_type = resultSet.getString("tag_type"); float weight = (float) (action_weight * 0.5 * idf(tag.get(i)) * 1); sql = "insert into user_action(user_id,tag_id,tag_name,tag_type,action_name,action_count,action_time,weight) values (?,?,?,?,?,?,?,?)"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, user_id); preparedStatement.setInt(2,tag_id); preparedStatement.setString(3, tag.get(i)); preparedStatement.setString(4, tag_type); preparedStatement.setString(5, action_name); preparedStatement.setInt(6, 1); preparedStatement.setString(7, action_time); preparedStatement.setFloat(8, weight); preparedStatement.executeUpdate(); } } } } //添加用户行为时传入商品id,可以计算TF-IDF,比如点击,收藏,取消收藏,不感兴趣 public void addUserAction_withshoes(int user_id,List<String> tag,int shoes_id,String action_name ) throws SQLException { Connection connection = DBUtil.getConnection(); PreparedStatement preparedStatement = null; ResultSet resultSet = null; //获取当前年月日 Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH)+1; int day = cal.get(Calendar.DATE); String action_time = year + "-" + month + "-" + day; System.out.println(action_time); //设置计算用户行为权重 float action_weight = 0; if(action_name == "点击") action_weight = (float) 0.6; else if(action_name == "搜索") action_weight = (float) 0.8; else if(action_name == "收藏") action_weight = (float) 1; else if(action_name == "取消收藏") action_weight = (float) -1; else if(action_name == "不感兴趣") action_weight = (float) -0.8; else action_weight = (float) 0.65; System.out.println(action_weight); for(int i = 0;i<tag.size();i++) {//将tag数组循环保存到user_action中 //先在user_action表中查询该条行为是否存在 String sql = "select * from user_action where user_id=? and tag_name=? and action_name=? and action_time=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, user_id); preparedStatement.setString(2,tag.get(i)); preparedStatement.setString(3, action_name); preparedStatement.setString(4, action_time); resultSet = preparedStatement.executeQuery(); System.out.println("查询是否存在该条行为:"+resultSet); System.out.println(resultSet.next()); if (resultSet.next()) {//该条行为若存在,将count+1 int count = resultSet.getInt("id")+1; System.out.println("该条行为存在,count为"+count); float weight = (float) (action_weight * 0.5 * tfIdf(shoes_id,tag.get(i)) * count); System.out.println(weight); sql = "update user_action set action_count=?, weight = ? where user_id=? and tag_name=? and action_name=? and action_time=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, count); preparedStatement.setFloat(2, weight); preparedStatement.setInt(3,user_id); preparedStatement.setString(4, tag.get(i)); preparedStatement.setString(5, action_name); preparedStatement.setString(6, action_time); preparedStatement.executeUpdate(); }else {//该条行为不存在,将该条行为插入到数据库中 System.out.println("该条行为不存在"); sql ="select * from tag where tag_name=?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, tag.get(i)); resultSet = preparedStatement.executeQuery(); if(resultSet.next()) {//查询这个标签是不是在标签库中,如果在将行为插入到user_action中 int tag_id = resultSet.getInt("tag_id"); String tag_type = resultSet.getString("tag_type"); float weight = (float) (action_weight * 0.5 * idf(tag.get(i)) * 1); sql = "insert into user_action(user_id,tag_id,tag_name,tag_type,action_name,action_count,action_time,weight) values (?,?,?,?,?,?,?,?)"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, user_id); preparedStatement.setInt(2,tag_id); preparedStatement.setString(3, tag.get(i)); preparedStatement.setString(4, tag_type); preparedStatement.setString(5, action_name); preparedStatement.setInt(6, 1); preparedStatement.setString(7, action_time); preparedStatement.setFloat(8, weight); preparedStatement.executeUpdate(); } } } } }
TagDao.java
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import util.DBUtil; public class TagDao { public int getCountByTagName(String tag_name) { int count = 0; Connection connection = DBUtil.getConnection(); String sql ="select count from tag where tag_name = ?"; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1,tag_name); resultSet = preparedStatement.executeQuery(); if(resultSet.next()) {//此标签存在 count = resultSet.getInt("count"); System.out.println(count); } } catch (Exception e) { e.printStackTrace(); } finally { DBUtil.close(resultSet); DBUtil.close(preparedStatement); DBUtil.close(connection); } return count; } }
ShoesDao.java
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import util.DBUtil; public class ShoesDao { public String[] getShoesTagByShoesId(int shoes_id) throws SQLException { Connection connection = DBUtil.getConnection(); PreparedStatement preparedStatement = null; ResultSet resultSet = null; String[] tag =null; String sql = "select tag from shoes where id = ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, shoes_id); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { tag = resultSet.getString("tag").split( "\\|"); } for(int i = 0;i<tag.length;i++) { System.out.println(tag[i]); } return tag; } }
标签:from form throw cti statement images ignore 写入 list
原文地址:https://www.cnblogs.com/qilin20/p/12291697.html