edu.pucp.igc.piscosemanticsearch.Indexador.java Source code

Java tutorial

Introduction

Here is the source code for edu.pucp.igc.piscosemanticsearch.Indexador.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.pucp.igc.piscosemanticsearch;

import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.lucene.analysis.es.SpanishAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

/**
 *
 * @author ilet
 */
public class Indexador {
    //    private String carpetaIndice;

    String rmRuta;
    private IndexWriter escritor;

    private File fileCarpetaIndice;
    private File fileCarpetaResources;
    PiscoOntology piscoOntology;

    public Indexador() {
        //        carpetaIndice = "//Users//NuSs//Documents//workspaces//NetbeansWorkspace//IndiceSS";
        rmRuta = "//Users//NuSs//Documents//workspaces//NetbeansWorkspace//SemanticSearch//src//main//resources//";
    }

    public Indexador(HttpServletRequest req, HttpServletResponse resp) {
        piscoOntology = new PiscoOntology(req, resp);
        String path = req.getServletContext().getRealPath("/");
        fileCarpetaIndice = new File(path + "indice");
        rmRuta = path + "resources/corpus/";
    }

    public Indexador(File fileCarpetaIndice, String rmRuta) {
        this.fileCarpetaIndice = fileCarpetaIndice;
        this.rmRuta = rmRuta;
    }

    public void crearEscritor() throws IOException {
        Directory directorio = FSDirectory.open(fileCarpetaIndice);
        SpanishAnalyzer analizador = new SpanishAnalyzer();
        Version version = Version.LUCENE_4_10_1;
        IndexWriterConfig configurador = new IndexWriterConfig(version, analizador);
        escritor = new IndexWriter(directorio, configurador);
    }

    public void cerrarEscritor() throws IOException {
        escritor.close();
    }

    //    public void indexar(String deTextoAIndexar, String deClasesEnOntologia) throws IOException {
    //        Document documento = new Document();
    //        Field fieldTexto = new Field("texto", deTextoAIndexar, TextField.TYPE_STORED);
    //        Field fieldClase = new Field("clase", deClasesEnOntologia, TextField.TYPE_STORED);
    //        documento.add(fieldTexto);
    //        documento.add(fieldClase);
    //        escritor.addDocument(documento);
    //    }

    public void indexarDocumento(Documento xmlDoc) throws IOException {
        Document documento = new Document();
        documento.add(new Field("titulo", xmlDoc.getTitulo(), TextField.TYPE_STORED));
        documento.add(new Field("texto", xmlDoc.getTexto(), TextField.TYPE_STORED));
        documento.add(new Field("baseURL", xmlDoc.getBaseurl(), TextField.TYPE_STORED));
        documento.add(new Field("clases", expandirClases(xmlDoc.getClases()), TextField.TYPE_STORED));
        escritor.addDocument(documento);
    }

    public void indexarCorpus() throws IOException {
        File directorioCorpus = new File(rmRuta);
        FileFilter fileFilter = new WildcardFileFilter("*.xml");
        if (directorioCorpus.exists()) {
            File[] ficheros = directorioCorpus.listFiles(fileFilter);
            for (int i = 0; i < ficheros.length; i++) {
                indexarDocumento(new Documento(ficheros[i].getCanonicalPath()));
            }
        } else {
            System.err.println("Revise si existe el directorio: " + rmRuta);
        }
    }

    public String expandirClases(List<String> listaClases) {

        String PREFIJO = "https://code.google.com/p/igc-pucp/source/browse/trunk/owl/OWLSchemaPisco.owl#";

        List<String> clasesExpandidas = new ArrayList<>();

        for (String clase : listaClases) {
            List<String> caracteristicas = piscoOntology.obtenerCaracteristicasConPrefijo(PREFIJO, clase);
            clasesExpandidas.add(0, clase);
            clasesExpandidas.addAll(caracteristicas);
        }

        return Utilities.collapseStrings(clasesExpandidas, " ");
    }

    /**
     * pixar --> indexar Pisco
     *
     * @param deTextoAIndexar
     * @param deClasesEnOntologia
     * @throws IOException
     */
    public void pixar(String deTextoAIndexar, String deClasesEnOntologia) throws IOException {
        //System.out.println(deTextoAIndexar + " - " + deClasesEnOntologia);
        Document documento = new Document();
        Field fieldTexto = new Field("pisco", deTextoAIndexar, TextField.TYPE_STORED);
        Field fieldClase = new Field("clase", deClasesEnOntologia, TextField.TYPE_STORED);
        documento.add(fieldTexto);
        documento.add(fieldClase);
        escritor.addDocument(documento);
    }

    //    public void indexarDocumentosEjemplo() throws IOException {
    //        crearEscritor();
    //        eliminarDocumentos();
    //        for (int i = 1; i <= 5; i++) {
    //            String miArchivoTexto = "texto" + i + ".txt";
    //            String miArchivoClase = "clases" + i + ".txt";
    //            String deTexto = retomarTexto(miArchivoTexto);
    //            String declase = retomarTexto(miArchivoClase);
    ////            System.out.println("indexandoTexto: " + deTexto);
    //            indexar(deTexto, declase);
    //        }
    //        cerrarEscritor();
    //    }

    public void indexarDocumentosPisco() throws IOException {
        crearEscritor();
        eliminarDocumentos();
        File directorioArchivosPisco = new File(rmRuta);
        if (directorioArchivosPisco.exists()) {
            File[] ficheros = directorioArchivosPisco.listFiles();
            int index = 0;
            for (int i = 0; i < ficheros.length; i++) {
                //to do.... falta logica
                //System.out.println(ficheros[x].getName());
                String archivo = ficheros[i].getName();
                String miTextoDePisco = "";
                String miArchivoClase = "";
                if (archivo.contains("pisco_texto")) {
                    miTextoDePisco = "pisco_texto" + ++index + ".txt";
                    miArchivoClase = "pisco_clase" + index + ".txt";
                    String deTexto = retomarTexto(miTextoDePisco);
                    System.out.println("encontro uno");
                    String declase = retomarTexto(miArchivoClase);
                    pixar(deTexto, declase);
                }

            }
        } else {
            System.err.println("Revise si existe el directorio: " + rmRuta);
        }
        /*for (int i = 1; i <= 5; i++) {
         String miArchivoTexto = "texto" + i + ".txt";
         String miArchivoClase = "clases" + i + ".txt";
         String deTexto = retomarTexto(miArchivoTexto);
         String declase = retomarTexto(miArchivoClase);
         //            System.out.println("indexandoTexto: " + deTexto);
         indexar(deTexto, declase);
         }*/
        cerrarEscritor();
    }

    public void eliminarDocumentos() throws IOException {
        escritor.deleteAll();
    }

    public Integer obtenerNumeroDocumentos() {
        return escritor.numDocs();
    }

    private String retomarTexto(String miArchivo) throws FileNotFoundException {
        //String rmRuta = "//Users//NuSs//Documents//workspaces//NetbeansWorkspace//SemanticSearch//src//main//resources//";
        //        FileInputStream fstream = new FileInputStream(rmRuta + miArchivo);
        //        DataInputStream = new DataInputStream(fstream);

        Scanner sc = new Scanner(new File(rmRuta + miArchivo));
        String strLinea = null;
        String texto = "";

        while (sc.hasNext()) {
            texto = texto.concat(sc.nextLine() + "\n");
        }
        return texto;
    }

}