mahout/レコメンドサーブレットの作り方
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
#contents
2010/01/20からのアクセス回数 &counter;
** mavenプロジェクトの作成 [#z100f153]
mavenを使って、サーブレット用のプロジェクトを作成します。
#pre{{
$ mvn archetype:create -DgroupId=sample.recommendWeb -Dar...
-DarchetypeArtifactId=maven-archetype-webapp -Dversio...
}}
生成されたディレクトリ構成は、以下のようになっています。
#pre{{
+ recommendWeb/
|- pom.xml
|-+ src/
|-+ main/
|-+ resources/
|-+ webapp/
|-+ WEB-INF/
|- web.xml
|- index.jsp
}}
レコメンドアプリケーションと同様にpom.xmlに追加します。
dependeciesに追加
#pre{{
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jcl</artifactId>
<version>1.5.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
}}
buildに追加
#pre{{
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
</plugin>
</plugins>
}}
javaプログラムのディレクトリを作成します。
#pre{{
$ mkdir src/main/java
}}
以下のコマンドでEclipseのプロジェクトにします。
#pre{{
mvn eclipse:eclipse -DdownloadSources=true
}}
** javaファイルの追加 [#udfa9fdc]
recommendWebプロジェクトをEclipseにインポートします。
サーブレット本体は、次のようになります。
内容はほとんどtaste-webと同じです。ただ自分で作成する必要...
作成手順を確認するために作成しました。
#pre{{
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 ServletE...
super.init(config);
try {
String csvPath= getServletContext().getRealPath("W...
csvPath += File.separator + "critics.csv";
// モデル構築用のデータをファイルから読み込む
DataModel model = new FileDataModel(new File(csvPath));
// ユーザ類似性と類似ユーザ抽出のメソッドを決定
UserSimilarity similarity = new EuclideanDistanceSimi...
UserNeighborhood neighborhood = new NearestNUserNeigh...
similarity, model);
// ユーザベースの推薦を作成
recommender = new GenericUserBasedRecommender(model,
neighborhood, similarity);
}
catch (Exception e) {
throw new ServletException(e);
}
}
// GET要求の処理(指定されたユーザの推薦を取り出し、返す)
protected void doGet(HttpServletRequest req, HttpServl...
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 ...
try {
List<RecommendedItem> items = recommender.recommend(us...
writePlainText(resp, userID, items);
} catch (Exception te) {
throw new ServletException(te);
}
}
// 指定されたユーザのスコアーとアイテムIDを出力する
private void writePlainText(HttpServletResponse response...
Iterable<RecommendedItem> items) throws IOException, E...
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());
}
}
}
}}
** web.xmlの設定 [#m33a6023]
最後にweb.xmlを設定すれば完成です。
web.xmlは、mavenのひな形に以下の項目を追加します。
#pre{{
<servlet>
<servlet-name>web-recommender</servlet-name>
<display-name>Web Recommender</display-name>
<description>Web recommender servlet</description>
<servlet-class>sample.recommendWeb.RecommenderServlet...
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>web-recommender</servlet-name>
<url-pattern>/RecommenderServlet</url-pattern>
</servlet-mapping>
}}
** 動作確認 [#lf7ab505]
サーブレットの動作を確認するために、jettyを使用します。
以下のコマンドをjettyを起動します。終了はCtrl-Cです。
#pre{{
$ mvn jetty:run
}}
ブラウザーから以下のURLを参照します。
#pre{{
http://localhost:8080/recommendWeb/RecommenderServlet?use...
}}
&ref(run.png);
** ファイル [#e217a037]
今回、変更・追加したファイルを以下に示します。
- &ref(pom.xml);
- &ref(web.xml);
- &ref(RecommenderServlet.java);
cretics.csvは、レコメンドアプリケーションで使ったものをwe...
** コメント [#v119199f]
#vote(おもしろかった[8],そうでもない[0],わかりずらい[1])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
終了行:
[[FrontPage]]
#contents
2010/01/20からのアクセス回数 &counter;
** mavenプロジェクトの作成 [#z100f153]
mavenを使って、サーブレット用のプロジェクトを作成します。
#pre{{
$ mvn archetype:create -DgroupId=sample.recommendWeb -Dar...
-DarchetypeArtifactId=maven-archetype-webapp -Dversio...
}}
生成されたディレクトリ構成は、以下のようになっています。
#pre{{
+ recommendWeb/
|- pom.xml
|-+ src/
|-+ main/
|-+ resources/
|-+ webapp/
|-+ WEB-INF/
|- web.xml
|- index.jsp
}}
レコメンドアプリケーションと同様にpom.xmlに追加します。
dependeciesに追加
#pre{{
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jcl</artifactId>
<version>1.5.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
}}
buildに追加
#pre{{
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
</plugin>
</plugins>
}}
javaプログラムのディレクトリを作成します。
#pre{{
$ mkdir src/main/java
}}
以下のコマンドでEclipseのプロジェクトにします。
#pre{{
mvn eclipse:eclipse -DdownloadSources=true
}}
** javaファイルの追加 [#udfa9fdc]
recommendWebプロジェクトをEclipseにインポートします。
サーブレット本体は、次のようになります。
内容はほとんどtaste-webと同じです。ただ自分で作成する必要...
作成手順を確認するために作成しました。
#pre{{
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 ServletE...
super.init(config);
try {
String csvPath= getServletContext().getRealPath("W...
csvPath += File.separator + "critics.csv";
// モデル構築用のデータをファイルから読み込む
DataModel model = new FileDataModel(new File(csvPath));
// ユーザ類似性と類似ユーザ抽出のメソッドを決定
UserSimilarity similarity = new EuclideanDistanceSimi...
UserNeighborhood neighborhood = new NearestNUserNeigh...
similarity, model);
// ユーザベースの推薦を作成
recommender = new GenericUserBasedRecommender(model,
neighborhood, similarity);
}
catch (Exception e) {
throw new ServletException(e);
}
}
// GET要求の処理(指定されたユーザの推薦を取り出し、返す)
protected void doGet(HttpServletRequest req, HttpServl...
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 ...
try {
List<RecommendedItem> items = recommender.recommend(us...
writePlainText(resp, userID, items);
} catch (Exception te) {
throw new ServletException(te);
}
}
// 指定されたユーザのスコアーとアイテムIDを出力する
private void writePlainText(HttpServletResponse response...
Iterable<RecommendedItem> items) throws IOException, E...
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());
}
}
}
}}
** web.xmlの設定 [#m33a6023]
最後にweb.xmlを設定すれば完成です。
web.xmlは、mavenのひな形に以下の項目を追加します。
#pre{{
<servlet>
<servlet-name>web-recommender</servlet-name>
<display-name>Web Recommender</display-name>
<description>Web recommender servlet</description>
<servlet-class>sample.recommendWeb.RecommenderServlet...
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>web-recommender</servlet-name>
<url-pattern>/RecommenderServlet</url-pattern>
</servlet-mapping>
}}
** 動作確認 [#lf7ab505]
サーブレットの動作を確認するために、jettyを使用します。
以下のコマンドをjettyを起動します。終了はCtrl-Cです。
#pre{{
$ mvn jetty:run
}}
ブラウザーから以下のURLを参照します。
#pre{{
http://localhost:8080/recommendWeb/RecommenderServlet?use...
}}
&ref(run.png);
** ファイル [#e217a037]
今回、変更・追加したファイルを以下に示します。
- &ref(pom.xml);
- &ref(web.xml);
- &ref(RecommenderServlet.java);
cretics.csvは、レコメンドアプリケーションで使ったものをwe...
** コメント [#v119199f]
#vote(おもしろかった[8],そうでもない[0],わかりずらい[1])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
ページ名:
SmartDoc