zoukankan      html  css  js  c++  java
  • “基于 Apache Mahout 构建社会化推荐引擎”电影推荐引擎建立

    一,参考文章:

    (1)基于 Apache Mahout 构建社会化推荐引擎:http://www.ibm.com/developerworks/cn/java/j-lo-mahout/

    (2)“基于 Apache Mahout 构建社会化推荐引擎”一文例子运行纪实 :http://blog.csdn.net/softwarehe/article/details/7465151

    (3)对 基于 Apache Mahout 构建社会化推荐引擎 一文的补充http://www.cnblogs.com/abelstronger/articles/2093847.htm

    二,说明:

        运行环境是:linux下myeclipse8.0+tomcat6.0,用的时mahout0.5。

        由于是linux环境,所以可能js代码有警告,这里先忽略。

        整个过程主要参考了原文一(1),这是基础,原始代码也是从原文下载的;

        搭建过程主要参考一(2),基本上大的问题在该文中都给出了解决办法;

        数据导入过程参考了一(3),不过由于时linux下,所以数据路径稍微修改了一下。

        这里主要是对以上作者的工作做一个稍微的补充,希望对以后的同学能有一定帮助。

    三,具体建立工程过程

    (1)在myeclipse下建立web project 工程,命名为MovieSite。

    (2)在WebRoot/WEB-INF/lib下导入各种包,具体如下图:

    这里做一下说明

    说明1:

    lib 下的包主要是将 demo 时生成的推荐引擎 Web 应用的 war 包解压缩,将 lib 下的 jar 文件拷贝到 MovieSite 的 lib 目录下,同时将jasper.jar,mysql-connector-java-5.0.6-bin.jar考入lib中。

    说明2:

    由于采用的时tomcat6.0,Tomcat6.0之前的版本以Tomcat5.5.20 压缩版为例,jasper-runtime.jarTomcat5.5.20\common\lib下就自带有的。但是在Tomcat6.0版本后lib包的位置调整了,现在只有lib在跟目录下。jasper-runtime.jarjasper-compiler-jdt.jarjasper-compiler.jar等都集成到jasper.jar包中去了,所以直接包含jasper.jar就可以了。

    参考:http://wenku.baidu.com/view/f4f3fa0190c69ec3d5bb7557.html

    说明3:

    lib下并没有servlet-api.jar和jsp.jar,主要原因是jsp-api.jar和servlet-api.jar这两个包tomcat的common\lib已经有了,必须将\WEB-INF\lib\目录下的去掉,否则会冲突的,会引起validateJarFile(/usr/local/src/tomcat6/webapps/MovieSite/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class。

    参考:End2012的 http://hi.baidu.com/lpzsybgekvbdkrd/item/f975beac2a08b59b14107302    一文。

    (3)在src下导入原来工程的各种包,具体如下:

        其中前面的6个包是原来的MovieSite工程已经有的,,dataimporter是向数据库插入数据的几个class,主要是参考一(3)的数据导入部分,包括ImportMovies.java,ImportRatings.java,ImportUsers.java,这里

    说明1:

    有一点需要注意的,由于数据是后来导入的,导入movies数据的时候没有问题,不过在导入movie_preferences的时候注意去掉对users表的外键参考(因为此时users表为空呢)。

    说明2:

    导入数据之后会报DBUtils.java下赵不到getJDBCConnection,解决办法就是在DBUtils.java下添加getJDBCConnection()类,(参考一(2)的数据导入部分)

    说明3:

    这个时候会提示com.ibm.taste.example.movie.recommender中的几个class出现错误,,主要是类型错误,将类中参数Rescorer<long>rescorer 修改为IDRescorer rescorer即可。

    说明4:

    这时候可能会提示MovieDataModel.java有问题,在MovieDataModel.java,添加一行public final static String TIMESTAMP_COLUMN = "timestamp";这里的timestamp对应的是数据库表里边的字段名,不能乱写,再出错的super函数最后加上一个参数 TIMESTAMP_COLUMN,这个编译错误消失(参考一(2))

    (4)配置web.xml

    不知道是什么原因,我参考一(2)配置web.xml总是出现错误,所以,我就直接在新项目的web.xml中手动添加各个参数,最终web.xml如下:

     

    View Code
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     <servlet>
      <description>Movie recommender servlet</description>
      <display-name>Movie Recommender</display-name>
      <servlet-name>movie-recommender</servlet-name>
      <servlet-class>com.ibm.taste.example.movie.servlet.MovieRecommenderServlet</servlet-class>
      <init-param>
       <param-name>recommender-class</param-name>
       <param-value>com.ibm.taste.example.movie.recommender.UserBasedRecommender</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet>
      <display-name>Apache-Axis Servlet</display-name>
      <servlet-name>axis</servlet-name>
      <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
     </servlet>
     <servlet>
      <display-name>User Servlet</display-name>
      <servlet-name>user</servlet-name>
      <servlet-class>com.ibm.taste.example.movie.servlet.UserServlet</servlet-class>
     </servlet>
     <servlet>
      <display-name>Movie Servlet</display-name>
      <servlet-name>movie</servlet-name>
      <servlet-class>com.ibm.taste.example.movie.servlet.MovieServlet</servlet-class>
     </servlet>
     <servlet-mapping>
      <servlet-name>movie-recommender</servlet-name>
      <url-pattern>/recommend</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
      <servlet-name>user</servlet-name>
      <url-pattern>/user</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
      <servlet-name>movie</servlet-name>
      <url-pattern>/movies</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
      <servlet-name>axis</servlet-name>
      <url-pattern>*.jws</url-pattern>
     </servlet-mapping>
     <!-- The rest of the config is adapted from Axis's default web app -->
     <session-config>
      <session-timeout>5</session-timeout>
     </session-config>
     <mime-mapping>
      <extension>wsdl</extension>
      <mime-type>text/xml</mime-type>
     </mime-mapping>
     <mime-mapping>
      <extension>xsd</extension>
      <mime-type>text/xml</mime-type>
     </mime-mapping>
     <welcome-file-list>
      <welcome-file>index.html</welcome-file>
     </welcome-file-list>
     <login-config>
      <auth-method>BASIC</auth-method>
     </login-config>
     
     <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/movie</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
     </resource-ref>
     
    </web-app>

     

    (5)将index.html文件,style文件夹,images文件夹,script文件夹拷贝到WebRoot下,修改index.html的一些警告。

    (6)部署项目运行

     

     在Email中输入users表中的数据例如:test1@gmail.com  ,  Password中不用输入,Login即可,结果如下:

    四,总结

        虽然可以看到结果,不过还有几个问题,现在正在修改中,,,

        (1)警告:You are not using ConnectionPoolDataSource. Make sure your DataSource pools connections to the database itself, or database performance will be severely reduced.,看来连接池还有问题,

        (2)关闭项目时:The web application [/MovieSite] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

        (3)关闭项目时:The web application [/MovieSite] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.

  • 相关阅读:
    Qt编译出错:“Cannot find file...... .pro."
    谈论如何有效地保护你的数据
    购书网
    VC非模态对话框创建和销毁
    在GUI程序中使用控制台的两种方法
    fatal error C1010: unexpected end of file while looking for precompiled header directive
    burp抓取手机包
    为firefox添加flash插件
    msfvenom生成linux后门
    kali下操作 Apache2
  • 原文地址:https://www.cnblogs.com/lpshou/p/2824498.html
Copyright © 2011-2022 走看看