Translate

jueves, 13 de marzo de 2014

Programa para cortar cadenas en oraciones y palabras en Java

Introducción

A veces necesitamos programas que nos permitan contar, e incluso separar las palabras de cada oración, ya sea que busquemos información emocional, personal, etc acerca del usuario, o estudiemos tendencias de mercado basados en historiales de búsqueda, o simplemente deseemos saber con presición que palabras son las más usadas en un conjunto social para infiltrar un agente encubierto... bueno.. creo que exageré.. pero para todo eso y más se puede usar, solo falta un poco de talento, imaginación y las bases que te presentaré a continuación.

Decisión de la fuente de datos


En este caso el orígen de datos será un archivo detexto, por ello deberemos usar un reader para leer cadenas sin procuparnos por lidiar a nivel intermedio con los flujos de cadenas.

 Para ello importamos un lector de ficheros:

import java.io.FileReader;
public class CortaCadenas {
    public static void main(String[] args) {
 }  
}

Como doble precaución y para poderlo operar mejor, agregaremos un búffer.

¿Qué es un búffer?

Un buffer, en el sentido más estricto es un almacenamiento temporal, que se usa para contrarestar el desfase temporal asociado a una señal, proceso o recurso. En este caso, usaremos un búffer pensando que el programa podría correr en una máquina muy lenta (o tal vez muy rápida... en cualquiera de los dos extremos sirve), en la que la velocidad de lectura física del fichero podría ser más lenta que la velocidad a la que recibimos su contenido. En el caso de Java, la Clase BufferedReader contiene el método readLine que para nuesrtos propósitos será muy efectivo al permitrnos leer el texto línea por línea.

Por lo tanto nuestro código quedará algo así:

import java.io.BufferedReader;
import java.io.FileReader;

public class CortaCadenas {
    public static void main(String[] args) { 
     BufferedReader br = null;
 }  
}


Contemplando excepciones


Alguna veces, a pesar de todo, algo peude salir mal, por ello añadiremos un código de manejo deexcepciones de entrada y salida... ¿Qué cómo podría pasar esto? Pudiera ser que nuestro arcivo estuviera siendo escaneado por un antivirus, o lo tuviéramos abierto, o le estuviéramos guardando información, hay muchísimas explicaciones. 
Nuestro código quedaría así:

import java.io.BufferedReader;
import java.io.FileReader;

public class CortaCadenas {
    public static void main(String[] args) { 
     BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("miarchivodetexto.txt")));
 

            String texto =""; //inicializamos
        } catch (IOException ex) {
            System.err.println("Problema de lectura/escritura");
        }
        finally{
            try {
                br.close();
            } catch (IOException ex) {
                System.err.println("Problemas al cerrar el archivo"); 
            }
        }
 

 }  
}

Almacenamieno de oraciones

¿Como detectamos una oración? Fácil! Normalmente, según mis clases de primaria... las oraciones se distinguen en un texto mediante el uso del caracter "." conocido como punto... ha varias clases de puntos... pero en general podemos decir que un punto delimita una oración. Java tiene incorporada una gran funcionalidad para cadenas de texto, en este caso usaremos la siempre fiable función split de la clase String, se basa en expresiones regulares y esas cosas tan triviales que sobra mencionar :P

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JOptionPane;

public class CortaCadenas {
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(JOptionPane.showInputDialog("Escriba la ruta a su archivo de texto por favor")));
            String texto ="";
            String lineaLeida=br.readLine();
            do {               
                System.out.println(texto);
                texto+=lineaLeida;
                lineaLeida=br.readLine();
            } while (lineaLeida!="" && lineaLeida!=null);
            String[] oraciones;
                oraciones=texto.split(".");
                System.out.println("Su texto tiene "+oraciones.length+" oraciones");
                for (int i = 0; i < oraciones.length; i++) {
                String oracion = oraciones[i];
                    System.out.println("Oración "+i+":");
                    System.out.println(oracion);
            }

        } catch (IOException ex) {
            System.err.println("Problema de lectura/escritura");
        }
        finally{
            try {
                br.close();
            } catch (IOException ex) {
                System.err.println("Problemas al cerrar el archivo"); 
            }
        }
 

 }  
}


Almacenamiento de palabras

Para detectar palabras es igual de fácil, una palbra siempre está junto a almenos un espacio en blanco.

Programa Completo

El programa terminado será:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JOptionPane;

public class CortaCadenas {
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(JOptionPane.showInputDialog("Escriba la ruta a su archivo de texto por favor")));
            String texto ="";
            String lineaLeida=br.readLine();
            do {               
                System.out.println(texto);
                texto+=lineaLeida;
                lineaLeida=br.readLine();
            } while (lineaLeida!="" && lineaLeida!=null);
            String[] oraciones;
                oraciones=texto.split(".");
                System.out.println("Su texto tiene "+oraciones.length+" oraciones");
                for (int i = 0; i < oraciones.length; i++) {
                String oracion = oraciones[i];
                    System.out.println("Oración "+i+":");
                    System.out.println(oracion);
            }
           
                String[] palabras;
                palabras=texto.split(" ");
                System.out.println("Su texto tiene "+palabras.length+" palabras");
                for (int i = 0; i < palabras.length; i++) {
                String palabra = palabras[i];
                    System.out.println("Oración "+i+":");
                    System.out.println(palabra);
            }
               
        } catch (IOException ex) {
            System.err.println("Problema de lectura/escritura");
        }
        finally{
            try {
                br.close();
            } catch (IOException ex) {
                System.err.println("Problemas al cerrar el archivo"); 
            }
        }  
    }  
}


Dudas o Comentarios

Cualquier duda, aclaración o comentario será bien recibida, no vivo de esto, pero cada cien visitas recibo un par de centavos de mis patrocinadores que como sabrás se anuncian mediante mi página, así que no dudes en recomendarme a tus amigos.

No hay comentarios:

Publicar un comentario