首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >推荐系统

推荐系统
EN

Stack Overflow用户
提问于 2014-04-25 02:33:51
回答 1查看 306关注 0票数 0

我正在尝试实现一个基于mahout的推荐系统。我不能在jsf页面上显示结果。

@ManagedBean(name="similarvaluerecommender") @视图范围

公共类SimilarValueRecommender实现可序列化{私有列表recommendedItems;

代码语言:javascript
运行
复制
@PostConstruct
public void init() {
    this.recommendedItems = new ArrayList<>();


    DataModel dm;
    try {
        dm = new FileDataModel(new File("Dataset/userdata.csv"));

    //ItemSimilarity sim = new LogLikelihoodSimilarity(dm);
    TanimotoCoefficientSimilarity sim = new TanimotoCoefficientSimilarity(dm);
    GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim);
    int x=1;

        for(LongPrimitiveIterator items = dm.getItemIDs(); items.hasNext();) {
            long itemId = items.nextLong();
            List<RecommendedItem>recommendedItems1 = recommender.mostSimilarItems(itemId, 10);

            this.recommendedItems.addAll(recommendedItems1);
            x++;

        }
    } catch (TasteException ex) {
        Logger.getLogger(SimilarValueRecommender.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (IOException ex) {
        Logger.getLogger(SimilarValueRecommender.class.getName()).log(Level.SEVERE, null, ex);
    }
}

//getter and setter...
 public List<RecommendedItem> getRecommendedItems(){
     return recommendedItems;

 }

 public void setList(List<RecommendedItem> recommendedItems) {
     this.recommendedItems=recommendedItems;

 }

}

我想在jsf页面上以表格的形式显示此页面的结果。这就是视图

代码语言:javascript
运行
复制
<ui:composition template="WEB-INF/commonlayout.xhtml">
        <ui:define name="content">
            <h:form>
                hi
                <h:dataTable id="similarvaluestable" value="#{similarvaluerecommender.recommendedItems}" var="recommendedItem">
                <h:column>
                #{recommendedItem.itemID}
        </h:column>

代码语言:javascript
运行
复制
                </h:form>
             </ui:define>  
    </ui:composition>

</h:body>
 </html>
EN

回答 1

Stack Overflow用户

发布于 2014-04-25 03:25:23

执行以下操作:

  • 在托管bean中声明List<RecommendedItem> recommendations属性。
  • 为该属性定义getter和setter方法。请不要在这些方法中包含任何业务逻辑。
  • 将数据加载到@PostConstruct方法中,并将其存储到视图中的data from recommendations recommendations属性中。

在代码中:

代码语言:javascript
运行
复制
@ManagedBean("similarValueRecommender")
@ViewScoped
public class SimilarValueRecommender implements Serializable {
    List<RecommendedItem> recommendations;

    @PostConstruct
    public void init() {
        this.recommendations = new ArrayList<RecommendedItem>();

        //taken from your current code
        //seems like this is the code to load recommendations
        DataModel dm = new AlphaItemFileDataModel(new File("Dataset/userdata.csv"));
        //ItemSimilarity sim = new LogLikelihoodSimilarity(dm);
        TanimotoCoefficientSimilarity sim = new TanimotoCoefficientSimilarity(dm);
        GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim);
        int x=1;
        for(LongPrimitiveIterator items = dm.getItemIDs(); items.hasNext();) {
            long itemId = items.nextLong();
            List<RecommendedItem>recommendations = recommender.mostSimilarItems(itemId, 10);
            /*
            for(RecommendedItem recommendation : recommendations) {
                similaritemID=recommendation.getItemID();
                System.out.println(itemId + "," + recommendation.getItemID() + "," + recommendation.getValue());
            }
            */
            this.recommendations.addAll(recommendations);
            x++;
            //if(x>10) System.exit(1);
        }
    }

    //getter and setter...
}

在您的视图中:

代码语言:javascript
运行
复制
<h:dataTable value="#{similarValueRecommender.recommendations}" var="recommendation">
    <h:column>
        #{recommendation.text}
    </h:column>
</h:dataTable>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23277045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档