You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2008/05/13 03:37:41 UTC
svn commit: r655708 -
/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java
Author: srowen
Date: Mon May 12 18:37:41 2008
New Revision: 655708
URL: http://svn.apache.org/viewvc?rev=655708&view=rev
Log:
Added support for XML, JSON output
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java?rev=655708&r1=655707&r2=655708&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java Mon May 12 18:37:41 2008
@@ -91,54 +91,22 @@
String howManyString = request.getParameter("howMany");
int howMany = howManyString == null ? DEFAULT_HOW_MANY : Integer.parseInt(howManyString);
boolean debug = Boolean.valueOf(request.getParameter("debug"));
+ String format = request.getParameter("format");
+ if (format == null) {
+ format = "text";
+ }
try {
-
List<RecommendedItem> items = recommender.recommend(userID, howMany);
-
- response.setContentType("text/plain");
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Cache-Control", "no-cache");
-
- PrintWriter writer = response.getWriter();
- if (debug) {
- DataModel dataModel = recommender.getDataModel();
- writer.print("User:");
- writer.println(dataModel.getUser(userID));
- writer.print("Recommender: ");
- writer.println(recommender);
- writer.println();
- writer.print("Top ");
- writer.print(NUM_TOP_PREFERENCES);
- writer.println(" Preferences:");
- Preference[] rawPrefs = dataModel.getUser(userID).getPreferencesAsArray();
- int length = rawPrefs.length;
- Preference[] sortedPrefs = new Preference[length];
- System.arraycopy(rawPrefs, 0, sortedPrefs, 0, length);
- Arrays.sort(sortedPrefs, Collections.reverseOrder(ByValuePreferenceComparator.getInstance()));
- // Cap this at 20 just to be brief
- int max = Math.min(NUM_TOP_PREFERENCES, length);
- for (int i = 0; i < max; i++) {
- Preference pref = sortedPrefs[i];
- writer.print(pref.getValue());
- writer.print('\t');
- writer.println(pref.getItem());
- }
- writer.println();
- writer.println("Recommendations:");
- for (RecommendedItem recommendedItem : items) {
- writer.print(recommendedItem.getValue());
- writer.print('\t');
- writer.println(recommendedItem.getItem());
- }
+ if ("text".equals(format)) {
+ writePlainText(response, userID, debug, items);
+ } else if ("xml".equals(format)) {
+ writeXML(response, items);
+ } else if ("json".equals(format)) {
+ writeJSON(response, items);
} else {
- for (RecommendedItem recommendedItem : items) {
- writer.print(recommendedItem.getValue());
- writer.print('\t');
- writer.println(recommendedItem.getItem().getID());
- }
+ throw new ServletException("Bad format parameter: " + format);
}
-
} catch (TasteException te) {
throw new ServletException(te);
} catch (IOException ioe) {
@@ -147,6 +115,87 @@
}
+ private void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items)
+ throws IOException, TasteException {
+ response.setContentType("text/xml");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Cache-Control", "no-cache");
+ PrintWriter writer = response.getWriter();
+ writer.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?><recommendedItems>");
+ for (RecommendedItem recommendedItem : items) {
+ writer.print("<item><value>");
+ writer.print(recommendedItem.getValue());
+ writer.print("</value><id>");
+ writer.print(recommendedItem.getItem().getID());
+ writer.print("</id></item>");
+ }
+ writer.println("</recommendedItems>");
+ }
+
+ private void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items)
+ throws IOException, TasteException {
+ response.setContentType("text/plain");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Cache-Control", "no-cache");
+ PrintWriter writer = response.getWriter();
+ writer.print("{\"recommendedItems\":{\"item\":[");
+ for (RecommendedItem recommendedItem : items) {
+ writer.print("{\"value\":\"");
+ writer.print(recommendedItem.getValue());
+ writer.print("\",\"id\":\"");
+ writer.print(recommendedItem.getItem().getID());
+ writer.print("\"},");
+ }
+ writer.println("]}}");
+ }
+
+ private void writePlainText(HttpServletResponse response,
+ String userID,
+ boolean debug,
+ Iterable<RecommendedItem> items) throws IOException, TasteException {
+ response.setContentType("text/plain");
+ response.setCharacterEncoding("UTF-8");
+ response.setHeader("Cache-Control", "no-cache");
+ PrintWriter writer = response.getWriter();
+ if (debug) {
+ DataModel dataModel = recommender.getDataModel();
+ writer.print("User:");
+ writer.println(dataModel.getUser(userID));
+ writer.print("Recommender: ");
+ writer.println(recommender);
+ writer.println();
+ writer.print("Top ");
+ writer.print(NUM_TOP_PREFERENCES);
+ writer.println(" Preferences:");
+ Preference[] rawPrefs = dataModel.getUser(userID).getPreferencesAsArray();
+ int length = rawPrefs.length;
+ Preference[] sortedPrefs = new Preference[length];
+ System.arraycopy(rawPrefs, 0, sortedPrefs, 0, length);
+ Arrays.sort(sortedPrefs, Collections.reverseOrder(ByValuePreferenceComparator.getInstance()));
+ // Cap this at 20 just to be brief
+ int max = Math.min(NUM_TOP_PREFERENCES, length);
+ for (int i = 0; i < max; i++) {
+ Preference pref = sortedPrefs[i];
+ writer.print(pref.getValue());
+ writer.print('\t');
+ writer.println(pref.getItem());
+ }
+ writer.println();
+ writer.println("Recommendations:");
+ for (RecommendedItem recommendedItem : items) {
+ writer.print(recommendedItem.getValue());
+ writer.print('\t');
+ writer.println(recommendedItem.getItem());
+ }
+ } else {
+ for (RecommendedItem recommendedItem : items) {
+ writer.print(recommendedItem.getValue());
+ writer.print('\t');
+ writer.println(recommendedItem.getItem().getID());
+ }
+ }
+ }
+
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException {