Mercurial > hg > mpdl-group
comparison software/mpdl-services-new/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/lt/GetLemmas.java @ 25:e9fe3186670c default tip
letzter Stand eingecheckt
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 21 May 2013 10:19:32 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
23:e845310098ba | 25:e9fe3186670c |
---|---|
1 package de.mpg.mpiwg.berlin.mpdl.servlets.lt; | |
2 | |
3 import java.io.IOException; | |
4 import java.io.PrintWriter; | |
5 import java.util.ArrayList; | |
6 import java.util.Collections; | |
7 import java.util.Date; | |
8 | |
9 import javax.servlet.ServletConfig; | |
10 import javax.servlet.ServletException; | |
11 import javax.servlet.http.HttpServlet; | |
12 import javax.servlet.http.HttpServletRequest; | |
13 import javax.servlet.http.HttpServletResponse; | |
14 | |
15 import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; | |
16 import de.mpg.mpiwg.berlin.mpdl.lt.dict.db.LexHandler; | |
17 import de.mpg.mpiwg.berlin.mpdl.lt.general.Language; | |
18 import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Form; | |
19 import de.mpg.mpiwg.berlin.mpdl.lt.morph.app.Lemma; | |
20 import de.mpg.mpiwg.berlin.mpdl.lt.text.norm.Normalizer; | |
21 | |
22 public class GetLemmas extends HttpServlet { | |
23 private static final long serialVersionUID = 1L; | |
24 private LexHandler lexHandler; | |
25 | |
26 public GetLemmas() { | |
27 super(); | |
28 } | |
29 | |
30 public void init(ServletConfig config) throws ServletException { | |
31 super.init(config); | |
32 try { | |
33 lexHandler = LexHandler.getInstance(); | |
34 } catch (ApplicationException e) { | |
35 throw new ServletException(e); | |
36 } | |
37 } | |
38 | |
39 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { | |
40 Date begin = new Date(); | |
41 request.setCharacterEncoding("utf-8"); | |
42 response.setCharacterEncoding("utf-8"); | |
43 String query = request.getParameter("query"); | |
44 String language = request.getParameter("language"); | |
45 String inputType = request.getParameter("inputType"); | |
46 String outputFormat = request.getParameter("outputFormat"); | |
47 String outputType = request.getParameter("outputType"); | |
48 String normalization = request.getParameter("normalization"); | |
49 if (language == null) | |
50 language = "eng"; | |
51 if (inputType == null || ! (inputType.equals("form") || inputType.equals("lemma"))) | |
52 inputType = "form"; | |
53 if (outputFormat == null || ! (outputFormat.equals("xml") || outputFormat.equals("html") || outputFormat.equals("string"))) | |
54 outputFormat = "xml"; | |
55 if (outputType == null || ! (outputType.equals("compact") || outputType.equals("full"))) | |
56 outputType = "compact"; | |
57 if (normalization == null || ! (normalization.equals("none") || normalization.equals("reg") || normalization.equals("reg norm"))) | |
58 normalization = "norm"; | |
59 int normalizationType = Normalizer.DICTIONARY; | |
60 if (normalization != null && normalization.equals("none")) | |
61 normalizationType = Normalizer.NONE; | |
62 | |
63 String xmlQueryString = "<query><name>" + query + "</name>" + "<language>" + language + "</language>" + "<inputType>" + inputType + "</inputType>" + | |
64 "<outputFormat>" + outputFormat + "</outputFormat>" + "<outputType>" + outputType + "</outputType>" + "<normalization>" + normalization + "</normalization>" + "</query>"; | |
65 try { | |
66 if (outputFormat.equals("xml")) | |
67 response.setContentType("text/xml"); | |
68 else if (outputFormat.equals("html") || outputFormat.equals("string")) | |
69 response.setContentType("text/html"); | |
70 else | |
71 response.setContentType("text/xml"); | |
72 PrintWriter out = response.getWriter(); | |
73 if (query == null || query.isEmpty()) { | |
74 out.print("request parameter query is empty. Please specify a query."); | |
75 out.close(); | |
76 return; | |
77 } | |
78 ArrayList<Lemma> lemmas = lexHandler.getLemmas(query, inputType, language, normalizationType, true); | |
79 String baseUrl = getBaseUrl(request); | |
80 Date end = new Date(); | |
81 String elapsedTime = String.valueOf(end.getTime() - begin.getTime()); | |
82 String result = ""; | |
83 if (outputFormat == null || outputFormat.equals("xml")) | |
84 result = createXmlOutputString(query, lemmas, outputType, baseUrl, xmlQueryString, elapsedTime); | |
85 else if (outputFormat.equals("html")) | |
86 result = createHtmlOutputString(query, lemmas, outputType, elapsedTime); | |
87 else if (outputFormat.equals("string")) | |
88 result = createStringOutputString(lemmas); | |
89 else | |
90 result = createXmlOutputString(query, lemmas, outputType, baseUrl, xmlQueryString, elapsedTime); | |
91 out.print(result); | |
92 out.close(); | |
93 } catch (ApplicationException e) { | |
94 throw new ServletException(e); | |
95 } | |
96 } | |
97 | |
98 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { | |
99 doGet(request, response); | |
100 } | |
101 | |
102 private String getBaseUrl( HttpServletRequest request ) { | |
103 if (request.getServerPort() == 80 || request.getServerPort() == 443) | |
104 return request.getScheme() + "://" + request.getServerName() + request.getContextPath(); | |
105 else | |
106 return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); | |
107 } | |
108 | |
109 | |
110 private String createXmlOutputString(String query, ArrayList<Lemma> lemmas, String outputType, String baseUrl, String xmlQueryString, String elapsedTime) { | |
111 String result = "<result>"; | |
112 result = result + "<provider>" + "MPIWG MPDL language technology service (see: " + "" + baseUrl + "), Max Planck Institute for the History of Science, Berlin." + "</provider>"; | |
113 result = result + xmlQueryString; | |
114 result = result + "<elapsed-time-ms>" + elapsedTime + "</elapsed-time-ms>"; | |
115 if (lemmas != null && ! lemmas.isEmpty()) { | |
116 result = result + "<morphology>"; | |
117 for (int i=0; i<lemmas.size(); i++) { | |
118 Lemma lemma = lemmas.get(i); | |
119 String lemmaName = lemma.getLemmaName(); | |
120 String language = lemma.getLanguage(); | |
121 result = result + "<lemma>"; | |
122 result = result + "<name>" + lemmaName + "</name>"; | |
123 if (outputType != null && outputType.equals("full")) { | |
124 String lemmaProvider = lemma.getProvider(); | |
125 result = result + "<provider>" + lemmaProvider + "</provider>"; | |
126 result = result + "<language>" + language + "</language>"; | |
127 } | |
128 if (Language.getInstance().isArabic(language) || Language.getInstance().isLatin(language)) { | |
129 String remoteUrl = "http://www.perseus.tufts.edu/hopper/morph?l=" + lemmaName + "&la=" + language; | |
130 result = result + "<remoteUrl>" + remoteUrl + "</remoteUrl>"; | |
131 } else if (Language.getInstance().isGreek(language)) { | |
132 String remoteUrl = "http://www.perseus.tufts.edu/hopper/morph?l=" + lemmaName + "&la=" + "greek"; | |
133 result = result + "<remoteUrl>" + remoteUrl + "</remoteUrl>"; | |
134 } | |
135 if (outputType != null && outputType.equals("full")) { | |
136 ArrayList<Form> forms = lemma.getFormsList(); | |
137 Collections.sort(forms); | |
138 if (forms != null && ! forms.isEmpty()) { | |
139 result = result + "<forms>"; | |
140 for (int j=0; j<forms.size(); j++) { | |
141 result = result + "<form>"; | |
142 Form f = forms.get(j); | |
143 String formName = f.getFormName(); | |
144 String formProvider = f.getProvider(); | |
145 result = result + "<provider>" + formProvider + "</provider>"; | |
146 result = result + "<language>" + language + "</language>"; | |
147 result = result + "<name>" + formName + "</name>"; | |
148 result = result + "</form>"; | |
149 } | |
150 result = result + "</forms>"; | |
151 } | |
152 } | |
153 result = result + "</lemma>"; | |
154 } | |
155 result = result + "</morphology>"; | |
156 } | |
157 result = result + "</result>"; | |
158 return result; | |
159 } | |
160 | |
161 private String createHtmlOutputString(String query, ArrayList<Lemma> lemmas, String outputType, String elapsedTime) { | |
162 String result = ""; | |
163 result = result + "<html>"; | |
164 result = result + "<head>"; | |
165 result = result + "<title>Lemmas for: \"" + query + "\"</title>"; | |
166 result = result + "</head>"; | |
167 result = result + "<body>"; | |
168 result = result + "<table align=\"right\" valign=\"top\">"; | |
169 result = result + "<td>[<i>This is a MPIWG language technology service</i>] <a href=\"/mpiwg-mpdl-cms-web/lt-services.html\"><img src=\"/mpiwg-mpdl-cms-web/images/info.png\" valign=\"bottom\" width=\"15\" height=\"15\" border=\"0\" alt=\"MPIWG language technology service\"/></a></td>"; | |
170 result = result + "</table>"; | |
171 result = result + "<p/>"; | |
172 result = result + "<h1>Lemmas for: \"" + query + "\"</h1>"; | |
173 if (lemmas != null && ! lemmas.isEmpty()) { | |
174 result = result + "<h3>Morphology</h3>"; | |
175 result = result + "<ul>"; | |
176 result = result + "<p/>"; | |
177 for (int i=0; i<lemmas.size(); i++) { | |
178 Lemma lemma = lemmas.get(i); | |
179 String lemmaName = lemma.getLemmaName(); | |
180 String language = lemma.getLanguage(); | |
181 result = result + "<li>"; | |
182 result = result + lemmaName; | |
183 if (outputType != null && outputType.equals("full")) { | |
184 String lemmaProvider = lemma.getProvider(); | |
185 result = result + " (data provider: " + lemmaProvider + ")"; | |
186 } | |
187 if (Language.getInstance().isArabic(language) || Language.getInstance().isLatin(language)) | |
188 result = result + " (external link: <a href=\"http://www.perseus.tufts.edu/hopper/morph?l=" + lemmaName + "&la=" + language + "\">" + lemmaName + "</a>)"; | |
189 else if (Language.getInstance().isGreek(language)) | |
190 result = result + " (external link: <a href=\"http://www.perseus.tufts.edu/hopper/morph?l=" + lemmaName + "&la=" + "greek" + "\">" + lemmaName + "</a>)"; | |
191 if (outputType != null && outputType.equals("full")) { | |
192 ArrayList<Form> forms = lemma.getFormsList(); | |
193 Collections.sort(forms); | |
194 if (forms != null && ! forms.isEmpty()) { | |
195 result = result + "<ul>"; | |
196 for (int j=0; j<forms.size(); j++) { | |
197 Form f = forms.get(j); | |
198 String formName = f.getFormName(); | |
199 String formProvider = f.getProvider(); | |
200 result = result + formName + " (data provider: " + formProvider + "), "; | |
201 } | |
202 result = result.substring(0, result.length() - 2); // without last comma and blank | |
203 result = result + "</ul>"; | |
204 } | |
205 } | |
206 result = result + "</li>"; | |
207 } | |
208 result = result + "</ul>"; | |
209 } | |
210 result = result + "[* external links may not function]"; | |
211 result = result + "<hr/>"; | |
212 result = result + "<p/>"; | |
213 result = result + "Elapsed time: " + elapsedTime + " ms, see the <a href=\"/mpiwg-mpdl-lt-web/index.html\">service description</a> of this page, if you find a bug <a href=\"https://it-dev.mpiwg-berlin.mpg.de/tracs/mpdl-project-software/newticket\">let us know</a>"; | |
214 result = result + "</body>"; | |
215 result = result + "</html>"; | |
216 return result; | |
217 } | |
218 | |
219 private String createStringOutputString(ArrayList<Lemma> lemmas) { | |
220 String result = ""; | |
221 for (int i=0; i<lemmas.size(); i++) { | |
222 Lemma l = lemmas.get(i); | |
223 String lemmaName = l.getLemmaName(); | |
224 result = result + lemmaName + " "; | |
225 } | |
226 result = result.substring(0, result.length() - 1); // without last blank | |
227 return result; | |
228 } | |
229 | |
230 | |
231 } |