Nilesh has submitted this change and it was merged.

Change subject: Fixed docs. Removed initializeClientRecommender. Property id 
list file isn't needed anymore. Its work in done in DataIngestServlet.
......................................................................


Fixed docs. Removed initializeClientRecommender. Property id list file isn't 
needed anymore. Its work in done in DataIngestServlet.

Change-Id: Ica60d9678d3dd6d3a6be4b6ec7fd3b53618b6830
---
M 
client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/AbstractClientRecommender.java
M 
client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommender.java
M 
client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServlet.java
M 
client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/DataIngestServlet.java
D 
client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/EntitySuggesterServlet.java
5 files changed, 93 insertions(+), 199 deletions(-)

Approvals:
  Nilesh: Verified; Looks good to me, approved



diff --git 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/AbstractClientRecommender.java
 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/AbstractClientRecommender.java
index d8e310f..015e8b5 100644
--- 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/AbstractClientRecommender.java
+++ 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/AbstractClientRecommender.java
@@ -9,6 +9,7 @@
 import net.myrrix.client.MyrrixClientConfiguration;
 import net.myrrix.client.translating.TranslatedRecommendedItem;
 import net.myrrix.client.translating.TranslatingClientRecommender;
+import net.myrrix.client.translating.TranslatingRecommender;
 import org.apache.mahout.cf.taste.common.TasteException;
 
 /**
@@ -24,35 +25,15 @@
  */
 abstract class AbstractClientRecommender {
 
-    protected TranslatingClientRecommender clientRecommender;
+    protected TranslatingRecommender clientRecommender;
 
-    public AbstractClientRecommender(MyrrixClientConfiguration 
myrrixClientConfiguration) {
-        try {
-            clientRecommender = new TranslatingClientRecommender(new 
ClientRecommender(myrrixClientConfiguration));
-        } catch (IOException ex) {
-            
Logger.getLogger(CLIClientRecommender.class.getName()).log(Level.SEVERE, null, 
ex);
-        }
+    public AbstractClientRecommender(TranslatingRecommender clientRecommender) 
{
+        this.clientRecommender = clientRecommender;
     }
 
-    public List<TranslatedRecommendedItem> recommend(String recommendTo, 
String recommendType, int howMany) throws TasteException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
+    public abstract List<TranslatedRecommendedItem> recommend(String 
recommendTo, int howMany) throws TasteException;
 
-    public List<TranslatedRecommendedItem> recommendAnonymous(String 
recommendType, int howMany, String[] list) throws TasteException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
+    public abstract List<TranslatedRecommendedItem> 
recommendAnonymous(String[] list, int howMany) throws TasteException;
 
-    public List<TranslatedRecommendedItem> recommend(String idListFile, String 
recommendTo, String recommendType, int howMany) throws TasteException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public List<TranslatedRecommendedItem> recommendAnonymous(String 
idListFile, String recommendType, int howMany, String[] list) throws 
TasteException {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    public void ingest(String csvFile) throws TasteException {
-    }
-
-    public void ingest(Reader csvReader) throws TasteException {
-    }
+    public abstract void ingest(Reader csvReader) throws TasteException;
 }
diff --git 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommender.java
 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommender.java
index 945e325..f137222 100644
--- 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommender.java
+++ 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/recommender/WebClientRecommender.java
@@ -5,8 +5,8 @@
 import java.net.URI;
 import java.util.Arrays;
 import java.util.List;
-import net.myrrix.client.MyrrixClientConfiguration;
 import net.myrrix.client.translating.TranslatedRecommendedItem;
+import net.myrrix.client.translating.TranslatingRecommender;
 import org.apache.mahout.cf.taste.common.TasteException;
 
 /**
@@ -19,63 +19,57 @@
     /**
      * Create a WebClientRecommender.
      *
-     * @param idListFile - The path to the file with the list of
-     * wikibaseProperties This may be removed in the near future, if I remove
-     * wikibaseValue suggestion from this part of the suggester engine.
-     * @param myrrixClientConfiguration
+     * @param translatingRecommender
      * @throws TasteException
      */
-    public WebClientRecommender(String idListFile, MyrrixClientConfiguration 
myrrixClientConfiguration) throws TasteException {
-        super(myrrixClientConfiguration);
-        clientRecommender.addItemIDs(new File(idListFile));
+    public WebClientRecommender(TranslatingRecommender translatingRecommender) 
throws TasteException {
+        super(translatingRecommender);
     }
 
     /**
-     * Same as above, except that it takes a URI instead of a String for
-     * specifying the idListFile path.
+     * Create a WebClientRecommender.
      *
-     * @param idListFile
-     * @param myrrixClientConfiguration
-     * @throws TasteException
+     * @param myrrixItemIdList - It is the list of all wikibaseProperties (as
+     * Strings) in the data pushed through DataIngestServlet. This is a list
+     * kept in memory used by the TranslatingClientRecommender to be able to
+     * translate between the internal hashed numeric representation of the 
Pxxxx
+     * wikibaseProperty Strings.
      */
-    public WebClientRecommender(URI idListFile, MyrrixClientConfiguration 
myrrixClientConfiguration) throws TasteException {
-        super(myrrixClientConfiguration);
-        clientRecommender.addItemIDs(new File(idListFile));
+    public void addPropertyIDs(List<String> myrrixItemIdList) {
+        clientRecommender.addItemIDs(myrrixItemIdList);
     }
 
     /**
      * Used to fetch wikibaseProperty suggestions for already existing
      * wikibaseItems.
      *
-     * @param recommendTo
-     * @param recommendType
+     * @param recommendTo - a wikibaseItem as a String. All wikibaseItems and
+     * wikibaseProperties as given with their prefixes
      * @param howMany
      * @return List of TranslatedRecommendedItems, the suggested
      * wikibaseProperties
      * @throws TasteException
      */
     @Override
-    public List<TranslatedRecommendedItem> recommend(String recommendTo, 
String recommendType, int howMany) throws TasteException {
-        List<TranslatedRecommendedItem> recommendations = 
clientRecommender.recommend(recommendTo, howMany, false, new 
String[]{recommendType});
+    public List<TranslatedRecommendedItem> recommend(String recommendTo, int 
howMany) throws TasteException {
+        List<TranslatedRecommendedItem> recommendations = 
clientRecommender.recommend(recommendTo, howMany);
         return recommendations;
     }
 
     /**
-     * Used to fetch wikibaseProperty suggestions for already anonymous 
(perhaps
-     * being created) wikibaseItems.
+     * Used to fetch wikibaseProperty suggestions for anonymous (perhaps being
+     * created) wikibaseItems.
      *
-     * @param recommendType
      * @param howMany
-     * @param list
+     * @param forProperties - An array of wikibaseProperties that are used in
+     * the anonymous wikibaseItem
      * @return List of TranslatedRecommendedItems, the suggested
      * wikibaseProperties
      * @throws TasteException
      */
     @Override
-    public List<TranslatedRecommendedItem> recommendAnonymous(String 
recommendType, int howMany, String[] list) throws TasteException {
-        float[] values = new float[list.length];
-        Arrays.fill(values, 30);
-        List<TranslatedRecommendedItem> recommendations = 
clientRecommender.recommendToAnonymous(list, values, howMany, new 
String[]{recommendType}, "testID");
+    public List<TranslatedRecommendedItem> recommendAnonymous(String[] 
forProperties, int howMany) throws TasteException {
+        List<TranslatedRecommendedItem> recommendations = 
clientRecommender.recommendToAnonymous(forProperties, howMany);
         return recommendations;
     }
 
diff --git 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServlet.java
 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServlet.java
index 5b1e961..3d55bcf 100644
--- 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServlet.java
+++ 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/AbstractEntitySuggesterServlet.java
@@ -2,15 +2,21 @@
 
 import com.google.common.base.Splitter;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.List;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.servlet.ServletException;
+import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import net.myrrix.client.ClientRecommender;
 import net.myrrix.client.MyrrixClientConfiguration;
+import net.myrrix.client.translating.TranslatedRecommendedItem;
+import net.myrrix.client.translating.TranslatingClientRecommender;
 import net.myrrix.web.servlets.AbstractMyrrixServlet;
 import org.apache.mahout.cf.taste.common.TasteException;
 import 
org.wikimedia.wikibase.entitysuggester.client.recommender.WebClientRecommender;
@@ -26,80 +32,50 @@
     private WebClientRecommender recommender = null;
 
     /**
-     *
-     * @param request
-     * @param response
-     * @throws IOException
-     * @throws ServletException
-     */
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws IOException, ServletException {
-        if (recommender == null) {
-            initializeClientRecommender(request, response);
-        }
-    }
-
-    /**
-     *
-     * @param request
-     * @param response
-     * @throws IOException
-     * @throws ServletException
-     */
-    @Override
-    protected void doPost(HttpServletRequest request, HttpServletResponse 
response) throws IOException, ServletException {
-        if (recommender == null) {
-            initializeClientRecommender(request, response);
-        }
-    }
-
-    /**
+     * Initializes the WebClientRecommender if it's null and returns it
      *
      * @return the WebClientRecommender instance
      */
     protected final WebClientRecommender getClientRecommender() {
+        if (recommender == null) {
+            synchronized (this) {
+                if (recommender == null) {
+                    recommender = (WebClientRecommender) 
this.getServletConfig().getServletContext().getAttribute("recommender");
+                }
+            }
+        }
         return recommender;
     }
 
     /**
-     * Used to find the path of the file with the of wikibaseProperties. The
-     * file name is set in the WAR's web.xml
-     *
-     * @param name
-     * @return URL of the wikibaseProperty list file
-     * @throws NamingException
-     */
-    protected final URL getPropFilePath(String name) throws NamingException {
-        Context initCtx = new InitialContext();
-        Context envCtx = (Context) initCtx.lookup("java:comp/env");
-        String fileName = (String) envCtx.lookup(name);
-        URL filePath = getClass().getClassLoader().getResource(fileName);
-        return filePath;
-    }
-
-    /**
-     * Initialize the WebClientRecommender instance for one time only.
+     * Output JSON-formatted results.
      *
      * @param request
      * @param response
+     * @param items
      * @throws IOException
      */
-    public void initializeClientRecommender(HttpServletRequest request, 
HttpServletResponse response) throws IOException {
-        synchronized (this) {
-            if (recommender == null) {
-                try {
-                    MyrrixClientConfiguration config = new 
MyrrixClientConfiguration();
-                    config.setHost(request.getServerName());
-                    config.setPort(request.getServerPort());
-                    recommender = new 
WebClientRecommender(getPropFilePath("proplist").toURI(), config);
-                } catch (URISyntaxException use) {
-                    response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
use.toString());
-                } catch (NamingException ne) {
-                    response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
ne.toString());
-                } catch (TasteException te) {
-                    response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
te.toString());
-                }
+    protected final void output(HttpServletRequest request,
+            ServletResponse response,
+            List<TranslatedRecommendedItem> items) throws IOException {
+
+        PrintWriter writer = response.getWriter();
+        // Always print JSON
+        writer.write('[');
+        boolean first = true;
+        for (TranslatedRecommendedItem item : items) {
+            if (first) {
+                first = false;
+            } else {
+                writer.write(',');
             }
+            writer.write("[\"");
+            writer.write(item.getItemID());
+            writer.write("\",");
+            writer.write(Float.toString(item.getValue()));
+            writer.write(']');
         }
+        writer.write(']');
+        writer.flush();
     }
 }
diff --git 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/DataIngestServlet.java
 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/DataIngestServlet.java
index 7a9e210..0e35bf8 100644
--- 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/DataIngestServlet.java
+++ 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/DataIngestServlet.java
@@ -2,13 +2,20 @@
 
 import com.google.common.base.Charsets;
 import java.io.*;
+import java.net.URISyntaxException;
 import java.nio.charset.Charset;
+import java.util.ArrayList;
 import java.util.NoSuchElementException;
 import java.util.zip.GZIPInputStream;
+import javax.naming.NamingException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import net.myrrix.client.ClientRecommender;
+import net.myrrix.client.MyrrixClientConfiguration;
+import net.myrrix.client.translating.TranslatingClientRecommender;
 import org.apache.mahout.cf.taste.common.TasteException;
+import 
org.wikimedia.wikibase.entitysuggester.client.recommender.WebClientRecommender;
 
 /**
  * This is part of the actual REST API - client servlet to feed/train the 
Myrrix
@@ -46,16 +53,31 @@
         }
 
         BufferedReader br = new BufferedReader(reader);
-        String a;
-        StringBuilder sb = new StringBuilder();
-        while ((a = br.readLine()) != null) {
-            if (a.contains(",")) {
-                sb.append(a).append("\n");
+        ArrayList<String> myrrixItemList = new ArrayList<String>();
+        String temp;
+        StringBuilder dataBuilder = new StringBuilder();
+        while ((temp = br.readLine()) != null) {
+            if (temp.contains(",")) {
+                dataBuilder.append(temp).append("\n");
+                String[] chunks = temp.split(",");
+                String property = "";
+                for (int i = 1; i < chunks.length - 1; i++) { // Extract only 
the middle portion (the wikibaseProperty)
+                    property += chunks[i];
+                }
+                myrrixItemList.add(property); // Creating the list of 
wikibaseProperties
             }
         }
 
         try {
-            getClientRecommender().ingest(new StringReader(sb.toString()));
+            MyrrixClientConfiguration config = new MyrrixClientConfiguration();
+            config.setHost(request.getServerName());
+            config.setPort(request.getServerPort());
+            if 
(getServletConfig().getServletContext().getAttribute("recommender") == null) {
+                WebClientRecommender webClientRecommender = new 
WebClientRecommender(new TranslatingClientRecommender(new 
ClientRecommender(config)));
+                
getServletConfig().getServletContext().setAttribute("recommender", 
webClientRecommender);
+            }
+            getClientRecommender().addPropertyIDs(myrrixItemList);
+            getClientRecommender().ingest(new 
StringReader(dataBuilder.toString()));
         } catch (IllegalArgumentException iae) {
             response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
iae.toString());
         } catch (NoSuchElementException nsee) {
diff --git 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/EntitySuggesterServlet.java
 
b/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/EntitySuggesterServlet.java
deleted file mode 100644
index cfee407..0000000
--- 
a/client/src/main/java/org/wikimedia/wikibase/entitysuggester/client/servlets/EntitySuggesterServlet.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.wikimedia.wikibase.entitysuggester.client.servlets;
-
-import com.google.common.collect.Iterables;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.List;
-import javax.servlet.ServletException;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import net.myrrix.client.translating.TranslatedRecommendedItem;
-import org.apache.mahout.cf.taste.common.TasteException;
-
-/**
- * This is part of the actual REST API - client servlet to suggest
- * wikibaseProperties for already existing (TODO) or anonymous wikibaseItems
- * 
- * @author Nilesh Chakraborty
- */
-public class EntitySuggesterServlet extends AbstractEntitySuggesterServlet {
-
-    /**
-     * Handle a HTTP GET request to suggest wikibaseProperties for anonymous
-     * wikibaseItems (that don't exist in the dataset)
-     * @param request
-     * @param response
-     * @throws IOException
-     * @throws ServletException
-     */
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws IOException, ServletException {
-        super.doGet(request, response);
-
-        String pathInfo = request.getPathInfo();
-        String[] pathComponents = Iterables.toArray(SLASH.split(pathInfo), 
String.class);
-
-        if (pathComponents.length == 0) {
-            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
-            return;
-        }
-
-        try {
-            List<TranslatedRecommendedItem> recommended = 
getClientRecommender().recommendAnonymous(request.getParameter("type"), 
getHowMany(request), pathComponents);
-            output(request, response, recommended);
-        } catch (TasteException te) {
-            response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
te.toString());
-        }
-    }
-
-    /**
-     * Output JSON-formatted results.
-     * @param request
-     * @param response
-     * @param items
-     * @throws IOException
-     */
-    protected final void output(HttpServletRequest request,
-            ServletResponse response,
-            List<TranslatedRecommendedItem> items) throws IOException {
-
-        PrintWriter writer = response.getWriter();
-        // Always print JSON
-        writer.write('[');
-        boolean first = true;
-        for (TranslatedRecommendedItem item : items) {
-            if (first) {
-                first = false;
-            } else {
-                writer.write(',');
-            }
-            writer.write("[\"");
-            writer.write(item.getItemID());
-            writer.write("\",");
-            writer.write(Float.toString(item.getValue()));
-            writer.write(']');
-        }
-        writer.write(']');
-    }
-}

-- 
To view, visit https://gerrit.wikimedia.org/r/76035
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ica60d9678d3dd6d3a6be4b6ec7fd3b53618b6830
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/WikidataEntitySuggester
Gerrit-Branch: master
Gerrit-Owner: Nilesh <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Nilesh <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to