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