Script.SaxManejadorIndice.java Source code

Java tutorial

Introduction

Here is the source code for Script.SaxManejadorIndice.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 Script;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import static Script.funciones.StopWordsArray;
import static Script.funciones.calcularFrecuencias;
import static Script.funciones.fn;
import static Script.funciones.lista;
import static Script.funciones.quitarStopwords;
import static Script.funciones.textoArray;
//import static guardar.en.base.de.datos.funciones.fn;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 *
 * @author Xiao
 */
public class SaxManejadorIndice extends DefaultHandler {

    ArrayList<String> listaTextos = new ArrayList<>();
    ArrayList<String> listaTitulos = new ArrayList<>();
    StringBuilder buffer = new StringBuilder();
    Mongo mongo;
    DB database;
    DBCollection collection;
    int contador = 0;
    int documento = 0;
    double id = 0;
    ArrayList listaStopWords;

    public SaxManejadorIndice() throws UnknownHostException, IOException {
        mongo = new Mongo("localhost", 27017);

        // nombre de la base de datos
        database = mongo.getDB("paginas");
        // coleccion de la db
        collection = database.getCollection("indice");
        ArrayList lee = new ArrayList<>();
        lee = lista();
        listaStopWords = StopWordsArray((String) lee.get(1));

    }

    public ArrayList<String> getListaTextos() {
        return listaTextos;
    }

    public ArrayList<String> getListaTitulos() {
        return listaTitulos;
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length); //To change body of generated methods, choose Tools | Templates.

        buffer.append(ch, start, length);

    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName); //To change body of generated methods, choose Tools | Templates.

        switch (qName) {

        case "title":

            break;
        case "text":
            documento++;
            //cambio el buffer a la variable texto
            String texto = buffer.toString();
            //mando el texto a separarse
            ArrayList<String> texto_separado = new ArrayList<>(); {
            try {
                texto_separado = textoArray(texto);
            } catch (IOException ex) {
                Logger.getLogger(SaxManejadorIndice.class.getName()).log(Level.SEVERE, null, ex);
            }

            ArrayList texto_sin_stopwords = new ArrayList<>();
            try {
                //texto_sin_stopwords va a tener el array de palabras sin stopwords
                texto_sin_stopwords = quitarStopwords(texto_separado, this.listaStopWords);
            } catch (IOException ex) {
                Logger.getLogger(SaxManejadorIndice.class.getName()).log(Level.SEVERE, null, ex);
            }

            ArrayList<SuperClase> nuevo = new ArrayList<>();
            nuevo = fn(texto_sin_stopwords);
            //libero
            texto_sin_stopwords.clear();
            texto_separado.clear();
            //calculo las frecuencias de las palabras
            nuevo = calcularFrecuencias(nuevo);
            //ingreso a la base de datos

            for (int i = 0; i < nuevo.size(); i++) {
                contador++;
                //creo la lista de documentos que al principio va a ser uno
                List<BasicDBObject> lista = new ArrayList<>();
                lista.add(new BasicDBObject("documento", this.documento).append("frecuencia",
                        nuevo.get(i).frecuencia));

                // luego creo el objeto db con id, palabra y una lista de docs
                DBObject document = new BasicDBObject("id", contador).append("palabra", nuevo.get(i).palabra)
                        .append("documentos", lista);
                //documents.add(document);

                //*********Buscar************************************
                // SOlo se agrega el archivo cuando se encuentra una palabra que ya esta ingresada
                //sin embargo es muy lento
                /*BasicDBObject query = new BasicDBObject("palabra",nuevo.get(i).palabra );
                int exist = 0;
                try (DBCursor c = collection.find(query)) {
                if(c.hasNext())
                {
                    exist = 1;
                    //si existe solo agrego el archivo del que proviene
                     DBObject o = new BasicDBObject("documentos", new BasicDBObject("documento",this.documento).append("frecuencia",nuevo.get(i).frecuencia));
                     DBObject updateQuery = new BasicDBObject("$push", o);
                     collection.update(query, updateQuery);
                    //System.out.print(c.next());  
                }
                if(exist == 0)
                {
                    // agrego a la base de datos
                    this.collection.insert(document);
                        
                }
                    
                }*/

                //*************************************************

                this.collection.insert(document);
            }
            System.out.println("Documento " + this.documento + " procesado");
            nuevo.clear();

        }

            break;
        }

    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes)
            throws SAXException {
        super.startElement(uri, localName, qName, attributes); //To change body of generated methods, choose Tools | Templates.

        switch (qName) {

        case "title":
            buffer.delete(0, buffer.length());
            break;
        case "text":
            buffer.delete(0, buffer.length());
            break;
        }
    }

}