Java tutorial
/* * 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; } }