All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.semanticwb.portal.resources.SemanticSearch Maven / Gradle / Ivy

The newest version!
/*
 * SemanticWebBuilder es una plataforma para el desarrollo de portales y aplicaciones de integración,
 * colaboración y conocimiento, que gracias al uso de tecnología semántica puede generar contextos de
 * información alrededor de algún tema de interés o bien integrar información y aplicaciones de diferentes
 * fuentes, donde a la información se le asigna un significado, de forma que pueda ser interpretada y
 * procesada por personas y/o sistemas, es una creación original del Fondo de Información y Documentación
 * para la Industria INFOTEC, cuyo registro se encuentra actualmente en trámite.
 *
 * INFOTEC pone a su disposición la herramienta SemanticWebBuilder a través de su licenciamiento abierto al público (‘open source’),
 * en virtud del cual, usted podrá usarlo en las mismas condiciones con que INFOTEC lo ha diseñado y puesto a su disposición;
 * aprender de él; distribuirlo a terceros; acceder a su código fuente y modificarlo, y combinarlo o enlazarlo con otro software,
 * todo ello de conformidad con los términos y condiciones de la LICENCIA ABIERTA AL PÚBLICO que otorga INFOTEC para la utilización
 * del SemanticWebBuilder 4.0.
 *
 * INFOTEC no otorga garantía sobre SemanticWebBuilder, de ninguna especie y naturaleza, ni implícita ni explícita,
 * siendo usted completamente responsable de la utilización que le dé y asumiendo la totalidad de los riesgos que puedan derivar
 * de la misma.
 *
 * Si usted tiene cualquier duda o comentario sobre SemanticWebBuilder, INFOTEC pone a su disposición la siguiente
 * dirección electrónica:
 *  http://www.semanticwebbuilder.org
 */
package org.semanticwb.portal.resources;

import org.semanticwb.portal.api.GenericAdmResource;

// TODO: Auto-generated Javadoc
/**
 * The Class SemanticSearch.
 * 
 * @author Hasdai Pacheco {[email protected]}
 */
public class SemanticSearch extends GenericAdmResource {
//
//    /** The log. */
//    private Logger log = SWBUtils.getLogger(SWBAListRelatedObjects.class);
//    
//    /** The tr. */
//    private SWBSparqlTranslator tr = null;
//    
//    /** The lex. */
//    private SWBDictionary lex = null;
//    
//    /** The lang. */
//    private String lang = "x-x";
//
//    /* (non-Javadoc)
//     * @see org.semanticwb.portal.api.GenericResource#processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.semanticwb.portal.api.SWBParamRequest)
//     */
//    @Override
//    public void processRequest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException {
//        String mode = paramRequest.getMode();
//        if (mode.equals("SUGGEST")) {
//            doSuggest(request, response, paramRequest);
//        } else if (mode.equals("SHOWRES")) {
//            doShowResults(request, response, paramRequest);
//        } else {
//            super.processRequest(request, response, paramRequest);
//        }
//    }
//
//    /**
//     * Do view.
//     * 
//     * @param request the request
//     * @param response the response
//     * @param paramRequest the param request
//     * @throws IOException Signals that an I/O exception has occurred.
//     * @throws SWBResourceException the sWB resource exception
//     */
//    @Override
//    public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException {
//        PrintWriter out = response.getWriter();
//        StringBuffer sbf = new StringBuffer();
//        SWBResourceURL rUrl = paramRequest.getRenderUrl();
//        String query = request.getParameter(createId("naturalQuery"));
//        User user = paramRequest.getUser();
//
//        response.setContentType("text/html; charset=ISO-8859-1");
//        response.setHeader("Cache-Control", "no-cache");
//        response.setHeader("Pragma", "no-cache");
//
//        //Get user language if any and create lexicon and translator acordingly
//        if (user != null) {
//            if (!lang.equals(paramRequest.getUser().getLanguage())) {
//                lang = paramRequest.getUser().getLanguage();
//                SWBLocaleLexicon l = new SWBLocaleLexicon(lang, SWBDictionary.getLanguageName(lang));
//                lex.addLexicon(l);
//                lex.setLocale(lang);
//            }
//        } else {
//            if (!lang.equals("es")) {
//                lang = "es";
//                lex.setLocale("es");
//            }
//        }
//
//        SWBSpellChecker speller = new SWBSpellChecker(lex.getSpellDictPath());
//
//        //Assert query string
//        query = (query == null?"":query.trim());
//
//        rUrl.setMode("SUGGEST");
//        rUrl.setParameter("prefixes", "swb,swbc");
//        rUrl.setCallMethod(rUrl.Call_DIRECT);
//
//        sbf.append("      \n" +
//                   "      \n" +
//                   "      \n" +
//                   "      \n\n");
//
//        /**
//         * Clears the suggestions list and gives focus to the textarea.
//         */
//        sbf.append("      ");
//
//        if (paramRequest.getCallMethod() == paramRequest.Call_STRATEGY) {
//            String url = getResourceBase().getAttribute("destUrl");
//
//            sbf.append("
\n" + // " \n" + // " \n" + // "
\n" + // "
\n"); // } else { // doShowResults(request, response, paramRequest); // } // out.print(sbf.toString()); // } // // /** // * Do suggest. // * // * @param request the request // * @param response the response // * @param paramRequest the param request // * @throws SWBResourceException the sWB resource exception // * @throws IOException Signals that an I/O exception has occurred. // */ // public void doSuggest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { // PrintWriter out = response.getWriter(); // SortedSet objOptions = new TreeSet(); // SortedSet proOptions = new TreeSet(); // String word = request.getParameter("word"); // String lan = request.getParameter("lang"); // boolean props = Boolean.parseBoolean(request.getParameter("props")); // String tempcDn = ""; // boolean lPar = false; // boolean rPar = false; // int idCounter = 0; // //SWBLexicon lex = new SWBLexicon(lan); // StringBuffer sbf = new StringBuffer(); // // String px = request.getParameter("prefixes"); // if (px == null) { // px = ""; // } // // ArrayList lprex = null; // // if (!px.equals("")) { // lprex = new ArrayList(Arrays.asList(px.trim().split(","))); // } // // response.setContentType("text/html; charset=utf-8"); // response.setHeader("Cache-Control", "no-cache"); // response.setHeader("Pragma", "no-cache"); // // if (lan == null || lan.equals("")) { // lan = "es"; // } // if (word.indexOf("(") != -1) { // lPar = true; // word = word.replace("(", ""); // } // if (word.indexOf(")") != -1) { // rPar = true; // word = word.replace(")", ""); // } // // word = word.replace("[", ""); // word = word.replace("]", ""); // word = word.trim(); // // if (!props) { // Iterator cit = SWBPlatform.getSemanticMgr().getVocabulary().listSemanticClasses(); // // while (cit.hasNext()) { // SemanticClass tempc = cit.next(); // tempcDn = tempc.getDisplayName(lan); // // if (tempcDn.toLowerCase().indexOf(word.toLowerCase()) != -1) { // if (lprex.contains(tempc.getPrefix())) { // objOptions.add(tempcDn); // } // } // // Iterator sit = tempc.listProperties(); // while (sit.hasNext()) { // SemanticProperty tempp = sit.next(); // tempcDn = tempp.getDisplayName(lan); // // if (tempcDn.toLowerCase().indexOf(word.toLowerCase()) != -1) { // if (lprex.contains(tempc.getPrefix())) { // proOptions.add(tempcDn); // } // } // } // } // // if (proOptions.size() != 0 || objOptions.size() != 0) { // idCounter = 0; // int index; // Iterator rit = objOptions.iterator(); // // sbf.append("
    \n"); // while (rit.hasNext()) { // String tempi = (String) rit.next(); // index = tempi.toLowerCase().indexOf(word.toLowerCase()); // // sbf.append("
  • " + (lPar ? "(" : "") + // "" + tempi + "" + // (lPar ? ")" : "") + "
  • \n"); // idCounter++; // } // // rit = proOptions.iterator(); // while (rit.hasNext()) { // String tempi = (String) rit.next(); // index = tempi.toLowerCase().indexOf(word.toLowerCase()); // // sbf.append("
  • " + (lPar ? "(" : "") + // "" + tempi + "" + // (lPar ? ")" : "") + "
  • \n"); // idCounter++; // } // sbf.append("
\n"); // } // } else { // String tag = lex.getLexicon(lang).getWord(word, true).getTags().get(0).getTagInfoParam(SWBLocaleLexicon.PARAM_ID); // //String tag = lex.getObjWordTag(word.toLowerCase()).getObjId(); // // sbf.append("
    \n"); // // if (!tag.equals("")) { // SemanticClass sc = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClassById(tag); // idCounter = 0; // Iterator sit = sc.listProperties(); // while (sit.hasNext()) { // SemanticProperty t = sit.next(); // sbf.append("
  • " + (lPar ? "(" : "") + // "" + t.getDisplayName(lan) + "" + // (lPar ? ")" : "") + "
  • \n"); // idCounter++; // } // } else { // tag = lex.getLexicon(lang).getWord(word, false).getSelectedTag().getTagInfoParam(SWBLocaleLexicon.PARAM_URI); // SemanticClass sc = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClass(tag); // tag = sc.getPrefix() + ":" + sc.getName(); // //tag = lex.getPropWordTag(word).getRangeClassId(); // if (!tag.equals("")) { // sc = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClassById(tag); // idCounter = 0; // Iterator sit = sc.listProperties(); // while (sit.hasNext()) { // SemanticProperty t = sit.next(); // sbf.append("
  • " + (lPar ? "(" : "") + // "" + t.getDisplayName(lan) + "" + // (lPar ? ")" : "") + "
  • \n"); // idCounter++; // } // } // } // sbf.append("
\n"); // } // out.println(sbf.toString()); // } // // /** // * Do show results. // * // * @param request the request // * @param response the response // * @param paramRequest the param request // * @throws SWBResourceException the sWB resource exception // * @throws IOException Signals that an I/O exception has occurred. // */ // public void doShowResults(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException { // PrintWriter out = response.getWriter(); // StringBuffer sbf = new StringBuffer(); // SWBResourceURL rUrl = paramRequest.getRenderUrl(); // String query = request.getParameter(createId("naturalQuery")); // User user = paramRequest.getUser(); // SemanticProperty so_lat = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#latitude"); // SemanticProperty so_long = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#longitude"); // SemanticProperty so_home = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#wpUrl"); // SemanticProperty so_name = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#name"); // SemanticProperty so_address = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#address"); // SemanticObject so2; // // //Get user language if any and create lexicon and translator acordingly // if (user != null) { // if (!lang.equals(paramRequest.getUser().getLanguage())) { // lang = paramRequest.getUser().getLanguage(); // SWBLocaleLexicon l = new SWBLocaleLexicon(lang, SWBDictionary.getLanguageName(lang)); // lex.addLexicon(l); // lex.setLocale(lang); // } // } else { // if (!lang.equals("es")) { // lang = "es"; // lex.setLocale("es"); // } // } // // //Assert query string // query = (query == null?"":query.trim()); // // rUrl.setMode("SUGGEST"); // rUrl.setCallMethod(rUrl.Call_DIRECT); // // HashMap dbNames = new HashMap(); // dbNames.put("Miguel Hidalgo", "Miguel_Hidalgo,_D.F."); // dbNames.put("Tamaulipas", "Tamaulipas"); // dbNames.put("México, D.F.", "México_city"); // dbNames.put("Veracruz", "Veracruz"); // dbNames.put("Tamaulipas", "Tamaulipas"); // dbNames.put("Alvaro Obregón", "Álvaro_Obregón,_D.F."); // dbNames.put("Xochimilco", "Xochimilco"); // dbNames.put("Tlalpan", "Tlalpan"); // dbNames.put("Altamira", "Altamira,_Tamaulipas"); // dbNames.put("Aldama", "Aldama,_Tamaulipas"); // dbNames.put("Abasolo", ""); // dbNames.put("Burgos", ""); // dbNames.put("Aguascalientes", "Aguascalientes,_Aguascalientes"); // dbNames.put("Asientos", "Asientos,_Aguascalientes"); // dbNames.put("Calvillo", "Calvillo,_Aguascalientes"); // dbNames.put("Cosío", "Cosío,_Aguascalientes"); // dbNames.put("Actopan", "Actopan,_Veracruz"); // dbNames.put("Atoyac", ""); // dbNames.put("Córdoba", "Córdoba,_Veracruz"); // dbNames.put("Las minas", ""); // // sbf.append("
\n" + // " \n" + // "
\n" + // " \n" + // "
\n"); // // tr = new SWBSparqlTranslator(lex); // long time = System.currentTimeMillis(); // String sparqlQuery = lex.getLexicon(lang).getPrefixString() + "\n" + tr.translateSentence(query, false); // //System.out.println("\n+++Tiempo de traducción: " + String.valueOf(System.currentTimeMillis() - time) + "milisegundos"); // //System.out.println(sparqlQuery); // String errCount = Integer.toString(tr.getErrCode()); // // if (errCount != null) { // if (Integer.parseInt(errCount) == 0) { // String patternStr = "\"[a-zA-Z]+\""; // String mname = ""; // String dbName = ""; // // // Compile and use regular expression // Pattern pattern = Pattern.compile(patternStr); // Matcher matcher = pattern.matcher(sparqlQuery); // boolean matchFound = matcher.find(); // // if (matchFound) { // // Get all groups for this match // for (int i = 0; i <= matcher.groupCount(); i++) { // // Get the group's indices // int groupStart = matcher.start(i); // int groupEnd = matcher.end(i); // // // groupStr is equivalent to // mname = sparqlQuery.subSequence(groupStart, groupEnd).toString(); // } // } // // if (dbNames.containsKey(mname.replace("\"", ""))) { // dbName = dbNames.get(mname.replace("\"", "")); // } // // try { // // System.out.println("Obteniendo información de la dbpedia"); // time = System.currentTimeMillis(); // if (!dbName.equals("")) { // String dbPediaQuery = // "PREFIX geo: \n" + // "PREFIX dbprop: \n" + // "PREFIX foaf: \n"+ // "SELECT ?desc ?lat ?long ?page\n" + // "WHERE {\n" + // " dbprop:abstract ?desc.\n" + // "FILTER (lang(?desc) = \"" + lang + "\").\n" + // " geo:lat ?lat.\n" + // " geo:long ?long.\n" + // " foaf:page ?page.\n" + // "}\n"; // //System.out.println("<<<<<" + dbPediaQuery); // //Query dbpedia // SemanticModel dbpModel = SWBPlatform.getSemanticMgr().getModel("DBPedia"); // QueryExecution dbQexec = dbpModel.sparQLQuery(dbPediaQuery); // // //Get dbPedia INFO // ResultSet dbrs = dbQexec.execSelect(); // // QuerySolution dbrb = dbrs.nextSolution(); // RDFNode desc_node = dbrb.get("desc"); // RDFNode lat_node = dbrb.get("lat"); // RDFNode long_node = dbrb.get("long"); // RDFNode home_node = dbrb.get("page"); // // String mapUrl = getResourceBase().getAttribute("mapUrl") + // "?lat=" + lat_node.asNode().getLiteral().getLexicalForm() + // "&long="+ long_node.asNode().getLiteral().getLexicalForm() + // "&wikiUrl=" + home_node.toString() + // "&info=" + dbName.replace("\"", "\\\""); // sbf.append("\n" + // " \n" + // " \n" + // " \n" + // " \n" + // " \n" + // " \n" + // " \n" + // " \n" + // " \n" + // " \n" + // "
" + paramRequest.getLocaleString("infoAbout") + " " + "" + dbName + "
" + desc_node.asNode().getLiteral().getLexicalForm() + "

\n" + // "

" + // paramRequest.getLocaleString("mapAbout") + " " + dbName + "

" + // "

"); // } // sbf.append("
" + paramRequest.getLocaleString("msgSearch") + ": " + query + ".
"); // //System.out.println("+++Tiempo de consulta dbPedia: " + String.valueOf(System.currentTimeMillis() - time) + "milisegundos"); // Model model = SWBPlatform.getSemanticMgr().getSchema().getRDFOntModel(); // SemanticModel mo = new SemanticModel("test", model); // //Query squery = QueryFactory.create(sparqlQuery); // // System.out.println("------------------------------"); // // System.out.println(sparqlQuery); // // System.out.println("------------------------------"); // // //squery.serialize(); // QueryExecution qexec = mo.sparQLQuery(sparqlQuery); // // try { // time = System.currentTimeMillis(); // int hitsCount = 0; // sbf.append("
\n" + // " \n"); // ResultSet rs = qexec.execSelect(); // sbf.append(" \n" + // " \n"); // if (rs.hasNext()) { // for (String icol : (List) rs.getResultVars()) { // sbf.append(" \n"); // } // sbf.append(" \n"); // sbf.append(" \n"); // sbf.append(" \n"); // // // boolean odd = true; // while (rs.hasNext()) { // odd = !odd; // QuerySolution rb = rs.nextSolution(); // if (odd) { // sbf.append(" \n"); // } else { // sbf.append(" \n"); // } // //Iterator it = rs.getResultVars().iterator(); // for (String name : (List) rs.getResultVars()) { // hitsCount++; // //while (it.hasNext()) { // // String name = it.next(); // // RDFNode x = rb.get(name); // sbf.append(" \n"); // } // sbf.append(" \n"); // } // } else { // sbf.append(" "); // sbf.append(" \n"); // sbf.append(" \n"); // sbf.append(" \n"); // } // sbf.append(" \n"); // sbf.append("
" + icol + "
"); // if (x != null) { // SemanticClass org = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClass("http://www.semanticwebbuilder.org/emexcatalog.owl#Organisation"); // if (x.isLiteral()) { // /*if (name.equals(so_name.getDisplayName(lang2))) { // so2 = getOrganizationByName(x.asNode().getLiteral().getLexicalForm()); // System.out.println(">>>Name " + so2.getProperty(so_name)); // //System.out.println(">>> name: " + x.asNode().getLiteral().getLexicalForm()); // sbf.append(x.asNode().getLiteral().getLexicalForm()); // } else {*/ // sbf.append(x.asNode().getLiteral().getLexicalForm()); // //} // } else { // //System.out.println(">obteniendo objeto semántico"); // SemanticObject so = SemanticObject.createSemanticObject(x.toString()); // // if (so != null) { // SemanticClass tt = so.getSemanticClass(); // if (tt != null) { // if (so.instanceOf(org)) { // String mapUrl = getResourceBase().getAttribute("mapUrl").replace(" ", "%20") + // "?lat=" + so.getProperty(so_lat) + // "&long="+ so.getProperty(so_long) + // "&wikiUrl=" + (so.getProperty(so_home) == null?"#":so.getProperty(so_home).replace(" ","%20")) + // "&info=" + so.getProperty(so_name).replace("\"", "").replace(" ", "%20"); // sbf.append("" + so.getProperty(so_name).replace("\"", "") + ""); // } else { // sbf.append(tt.getDisplayName(lang)); // } // } else { // SemanticProperty stt = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty(so.getURI()); // sbf.append(stt.getDisplayName(lang)); // } // } else { // //System.out.println(">el dato no tiene objeto semántico"); // if (x != null) { // //System.out.println(">escribiendo valor"); // sbf.append(x); // } else { // //System.out.println(">el campo es nulo"); // sbf.append(" - "); // } // } // } // } // sbf.append("
" + paramRequest.getLocaleString("nofound") + "
\n"); // sbf.append("

\n" + hitsCount + " coincidencias en " + paramRequest.getLocaleString("exectime") + ": " + (System.currentTimeMillis() - time) + "ms." + "

\n"); // //System.out.println("+++Tiempo de consulta modelo local: " + String.valueOf(System.currentTimeMillis() - time) + "milisegundos"); // } finally { // qexec.close(); // } // } catch (Exception e) { // if (tr.getErrCode() != 0) { // sbf.append(""); // } // } // } else { // sbf.append(""); // } // } // sbf.append("
\n"); // out.print(sbf.toString()); // } // // /** // * Creates the id. // * // * @param suffix the suffix // * @return the string // */ // private String createId(String suffix) { // return getResourceBase().getId() + "/" + suffix; // } // // /** // * Gets the organization by name. // * // * @param name the name // * @return the organization by name // */ // private SemanticObject getOrganizationByName(String name) { // String sparqlQuery = "PREFIX emex: \n" + // "PREFIX rdf: \n" + // "SELECT DISTINCT ?org\n" + // "WHERE {\n" + // " ?org rdf:type emex:Organisation.\n" + // " ?org emex:name \"" + name + "\".\n" + // "}\n"; // //System.out.println(sparqlQuery); // Model model = SWBPlatform.getSemanticMgr().getOntology().getRDFOntModel(); // Query squery = QueryFactory.create(sparqlQuery); // squery.serialize(); // QueryExecution qexec = QueryExecutionFactory.create(squery, model); // // try { // ResultSet rs = qexec.execSelect(); // if (rs.hasNext()) { // while (rs.hasNext()) { // QuerySolution rb = rs.nextSolution(); // for (String fname : (List) rs.getResultVars()) { // RDFNode x = rb.get(fname); // // if (x != null && !x.isLiteral()) { // return SemanticObject.createSemanticObject(x.toString()); // } else { // return null; // } // } // } // } // return null; // } finally { // qexec.close(); // } // } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy