mahout协同过滤,连数据库数据,实现推荐

根据用户协同过滤,根据用户的相似度,推荐相应的item。

pom.xml加入核心的几个依赖

<!-- https://mvnrepository.com/artifact/org.apache.mahout/mahout-core -->
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-core</artifactId>
            <version>0.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.mahout</groupId>
            <artifactId>mahout-integration</artifactId>
            <version>0.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
        </dependency>

java代码:

    /**
     *
     * @param userId  用户id
     * @param n   返回推荐条数
     * @return  数组,kl_id
     * @throws TasteException
     * @throws ClassNotFoundException
     */
    public int[] recommendByUser(Integer userId, int n) throws TasteException, ClassNotFoundException {

        Class.forName("com.mysql.jdbc.Driver");
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setServerName("");//本地为localhost
        dataSource.setUser("root");
        dataSource.setPassword("mysql");
        dataSource.setDatabaseName("knowledgeManagement");//数据库名
        /*
        preferenceTable:表名
        userIDColumn:userId的字段名
        itemIDColumn:itemId的字段名
        preferenceColumn:偏好值字段名
        timestampColumn:时间记录字段//可为空
         */
        JDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource , "kl_rating_comment" , "user_id" , "kl_id","kl_rating","kl_comment_time");

        //获取模型
        DataModel model = dataModel;
        //计算相似度
        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
        //计算阈值,选择邻近的2个用户
        UserNeighborhood neighborhood = new NearestNUserNeighborhood(2 ,similarity,model);
        //推荐集合
        Recommender recommender = new GenericUserBasedRecommender(model,neighborhood,similarity);
        //推荐数量 为n的一个合集,这里数量可以修改
        List<RecommendedItem> recommendedItems = recommender.recommend(userId,n);
        int kl_idArray[] = new int[recommendedItems.size()];
        for (int i=0;i<recommendedItems.size();i++){
            kl_idArray[i] = (int) recommendedItems.get(i).getItemID();
        }
        //下面是测试用的代码
        for (RecommendedItem recommendation : recommendedItems) {
            System.out.println(recommendation);
        }
        System.out.println("-------------");

        for (int i= 0;i<kl_idArray.length;i++){
            System.out.println(kl_idArray[i]);
        }
        return kl_idArray;

    }


猜你喜欢

转载自blog.csdn.net/super_sloppy/article/details/79591798