zoukankan      html  css  js  c++  java
  • 今日进度

    今天毕设的任务是获取用户行为,根据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;
        }
    
    }
  • 相关阅读:
    qmake Manual (EN) 1
    {转}linux gcc gdb使用
    qmake 简介
    {转}linux makefile 详细教程
    {转}Linux下C开发之——gcc,gdb的使用
    关于“做一个聊天+信息分享客户端”的设想(SNS?)
    {转}算法的力量
    hdu 2047 简单递推公式
    RONOJ 6 金明的预算方案
    hdu 2446 二分搜索解题报告
  • 原文地址:https://www.cnblogs.com/qilin20/p/12291697.html
Copyright © 2011-2022 走看看