ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2010年11月14日日曜日

mahout(ver.0.20) Webアプリ作成手順

前記事で、Mavenが動くようになったので、mvnプロジェクトからmahoutを入れてみます。

ターミナルで作業ディレクトリに移動して、
  mvn archetype:create -DgroupId=sample.recommendWeb -DartifactId=recommendWeb -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1

下記のようにrecommendWebフォルダならびにディレクトリが生成されるので、
pom.xmlを下の①のように更新し、recommendWebフォルダ直下でJavaソース配置先を作成、
  mkdir src/main/java




①pom.xml

  4.0.0
  sample.recommendWeb
  recommendWeb
  war
  0.0.1
  recommendWeb Maven Webapp
  http://maven.apache.org
  
    
      junit
      junit
      3.8.1
      test
    
    
      org.apache.mahout
      mahout-core
      0.2
     
    
      org.slf4j
      slf4j-jcl
      1.5.8
    
    
      javax.servlet
      servlet-api
      2.5
   provided
    
  
  
    recommendWeb
    
      
        maven-compiler-plugin
        
          1.6
          1.6
          UTF-8
        
          
   
     org.mortbay.jetty
     maven-jetty-plugin
     6.1.7
   
    
  


同フォルダ(pom.xmlを含むことを確認し)で、下記コマンドを実行
  mvn eclipse:eclipse -DdownloadSources=true

これで、Eclipseに対応するので、Eclipseを起動し、このプロジェクトをImport

Import後、②・③のように各ファイルを更新。


②web.xml

  Archetype Created Web Application
  
    web-recommender
    Web Recommender
    Web recommender servlet
    RecommenderServlet
    1
  
  
    web-recommender
    recommendWeb/RecommenderServlet
  


③RecommenderServlet.java
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class RecommenderServlet extends HttpServlet {
   private static final int NUM_TOP_PREFERENCES = 3;
   private static final int DEFAULT_HOW_MANY = 3;

   private Recommender recommender;
   public void init(ServletConfig config) throws ServletException {
      super.init(config);
      try {
       String csvPath= getServletContext().getRealPath("WEB-INF");
       csvPath += File.separator + "critics.csv";
    // モデル構築用のデータをファイルから読み込む
    DataModel model = new FileDataModel(new File(csvPath));
    // ユーザ類似性と類似ユーザ抽出のメソッドを決定
    UserSimilarity similarity = new EuclideanDistanceSimilarity(model);
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,
      similarity, model);
    // ユーザベースの推薦を作成
    recommender = new GenericUserBasedRecommender(model,
      neighborhood, similarity);       
      }
      catch (Exception e) {
       throw new ServletException(e);
      }
   }

   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException {
  String userIDString = req.getParameter("userID");
  if (userIDString == null) {
   throw new ServletException("userID was not specified");
  }
  long userID = Long.parseLong(userIDString);
  String howManyString = req.getParameter("howMany");
  int howMany = howManyString == null ? DEFAULT_HOW_MANY : Integer.parseInt(howManyString);
  try {
   List items = recommender.recommend(userID, howMany);
   writePlainText(resp, userID, items);
  } catch (Exception te) {
   throw new ServletException(te);
  }
 }

 private void writePlainText(HttpServletResponse response, long userID,
   Iterable items) throws IOException, Exception {
  response.setContentType("text/plain");
  response.setCharacterEncoding("UTF-8");
  response.setHeader("Cache-Control", "no-cache");
  PrintWriter writer = response.getWriter();
  for (RecommendedItem recommendedItem : items) {
   writer.print(recommendedItem.getValue());
   writer.print('\t');
   writer.println(recommendedItem.getItemID());
  }
 }
}


recommendWeb/src/main/webapp/WEB-INF直下に、mahoutで検証するデータCSVファイル(critics.csv)を配置します。



















これで、サーブレット設定をしてからjettyを起動。
※WebApp dir をWEB-INF/web.xmlを含むディレクトリに設定
















jetty起動後、下URLのようにパラメータを渡せば、データの推定値が表示されます。
http://localhost:8080/recommendWeb/RecommenderServlet?userID=7







[以下ToDo]
・上記環境はmahout ver.0.20のTasteを利用しているためHadoop未対応とのこと、Hadoop対応版の動作検証
・MahoutでのGoogleAppEngineでの動作検証


以上です。


【参照ページ】

Apache Mahout Project
mahout/レコメンドサーブレットの作り方
Mahout インストール

MacOSX Java・Maven環境設定

macのJavaアドレスがWindowsと違い、忘れそうなのでメモ。
それと、Mavenの使い方も備忘録でメモ。

・動作環境 MacOSX(10.5)

/system/Library/Frameworks/JavaVM.framework/Versions/1.6.0
※1.5他のバージョンは/Versions以下に。

ターミナルでprofileいじり
  vi ~/.bash_profile

vi起動後に下記を追記
==
  export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
  export PATH=$JAVA_HOME/bin:$PATH
==

ターミナルで
  java -version
で、java version "1.6.0_26"になってたらOK


MavenのインストールはEclipse Plugin(Help -> new software install)から
Maven Integration for Eclipse

インストール後、ターミナルで確かめると
  mvn -v

Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900)のように表示される。


Maven設定ファイルがインストールディレクトリ裏に隠れているので、編集が必要な際は
  mv .m2 m2
でリネームし、そのあと該当の.jarファイルを追加とか.pomファイルの追加。
編集後は
  mv m2 .m2
で元に戻す。

Mavenソフトのインストールはpom.xmlを含むディレクトリで
  mvn -install
コンパイルは
  mvn -compile

GoogleAppEngineインストールでついてきたjettyの起動は
  mvn jetty:run

MavenからMahoutを動かすための環境設定でした。

2008年4月25日金曜日

AxisでSOAP体験記

Salesforce(略S.F.) で必要になったので、忘れないうちメモ。。


JavaSDK ver 1.5(5.0)はインストール済み。
環境はWindowsXP SP2


今回必要となったWebサーバは下記2点。インストール順とS.F.対応のメジャーバージョンに注意。

①Apache Tomcat 5.5.26.exe
②Apache Axis-bin 1_4.zip

イメージは①の上で②が起動する感じ。



【参照】

  1. Axis 取扱い方法、まずは本家サイト
    http://ws.apache.org/axis/ja/java/

  2. webサービス環境構築メモ-Windows編
    http://www.tt.cs.titech.ac.jp/~yonai/webService/windows.html

  3. Axis でのデプロイ手順
    http://www.wakhok.ac.jp/~sakamoto/webservice/web_service_c6.html

  4. SOAPアプリ作成手順
    http://iihito.dip.jp/docs/java/no12/soap-4.html

つまづきどころはやはり環境変数。
あとはファイルアドレスとかURI。

「webサービス環境構築メモ-Windows編」が2007年情報なので、鮮度がお勧め。

参照1. を見ながらところどころ参照2. でチェック。


ファイルのコピーは①~③
①「axis/webapps/axis」ディレクトリを「tomcat/webapps」へ

②「tomcat/webapps/axis/WEB-INF/libのsaaj.jarとjaxpc.jar」を「tomcat/common/lib」へ

③「%JAVA_HOME%\libのtools.jar」を「tomcat/webapps」に。。



環境変数設定では、
・JAVA_HOME = sdkフォルダbinディレクトリに通す(java.exeのあるフォルダ)

・TOMCAT_HOME = C:\Program Files\Apache Software Foundation\Tomcat (デフォルトならここ)

・AXIS_HOME = (これはバイナリファイルを解凍場所による、C:\axis でもOK)

・AXIS_LIB = %AXIS_HOME%lib

・AXISCLASSPATH = %AXIS_LIB%\axis.jar; ‥(順に必要な .jar ファイル)


・WEBSEV = C:\Program Files\Apache Software Foundation\Tomcat\ webapps/axis/WEB-INF/lib のようにしておくと、CLASSPATH で通したい沢山のファイルの変数設定がラク。

・CLASSPATH = %WEBSEV%axis.jar; ‥(順に必要な .jar ファイル) ;C:\Program Files\Apache Software Foundation\Tomcat\common\lib\saaj.jar ; C:\Program Files\Apache Software Foundation\Tomcat\common\lib\jaxpc.jar

コピーしたファイル群にもCLASSPATH通すのを忘れない。



インストール、セッティング済んだら
tomcatを起動でhttp://localhost:8080/ へのアクセス確認
Axisは http://localhost:8080/axis で確認。。


環境設定は以上。

アプリ作成とクライアント/サーバでのデプロイ方法は参照3.と4.にて。。

Blogger Syntax Highliter