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 :Pimport 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");
}
}
}
}
No hay comentarios:
Publicar un comentario