Se utilizaran textos de lenguaje natural en ingles. Para lo cual se recibe el archivo de texto de entrada, se hacen las siguientes tareas:
- Eliminar saltos de linea.
- Eliminar puntuacion.
- Llevar todo a minusculas.
- Eliminar multiples espacios consecutivos, dejando sólo mono-espacios
Dejando el resultado en un String de salida.
- Instanciar objeto
Preprocess
con ruta de archivo fuente. - Llamar método
Preprocess.clean()
Preprocess p = new Preprocess("source/2^21.txt");
String result = p.clean();
Utilizando el método estático String[] Preprocess.takeSample(String source)
se obtiene
una muestra de N/10 palabras aleatorias, con distribucion uniforme, del string fuente.
Observación: Se debe tomar muestreo después de hacer la limpieza, i.e. correr el método clean.
Observación 2: Se impuso un limite heuristico al tamaño de la muestra, tal que ejecutar la busqueda sobre todos ellos no tarde más de 5 horas.
- Llamar al método estático
Preprocess.takeSample(String cleanText)
, recibir el arreglo de palabras como retorno.
Preprocess p = new Preprocess("source/2^21.txt");
String result = p.clean();
String[] wordSample = Preprocess.takeSample(result, true); // 'true' para leer mensajes de depuración
Implementado en clase algorithm.AutomatonTextSearch
.
Se puede ejecutar la clase test.AutomatonTextSearchTest
para visualizar el funcionamiento de éste, y comparar el
la correctitud del algoritmo en comparación con el método de fuerza bruta; al igual que para ejecutar los experimentos
propuestos en el informe.
Ejecutar AutomatonTextSearchTest.acurracyTest
para verificar que la busqueda encuentra todas las ocurrencias de diversos
patrones.
Ejecutar AutomatonTextSearchTest.completeTest
para efectuar experimentos propuestos en el informe.
Observación: El algoritmo supone un alfabeto ASCII, tanto para el patron como el texto fuente.
- Instanciar clase
AutomatonTextSearch(String fullText, String pattern)
; la cual construye el AFD parapattern
, basandose en el alfabeto descubierto defulltext
. - Llamar metodo del objeto
Int AutomatonTextSearch.run()
; el cual retorna la cantidad de ocurrencias depattern
enfulltext
.
Preprocess p = new Preprocess("source/2^21.txt");
String result = p.clean();
String[] patterns = Preprocess.takeSample(result, true);
AutomatonTextSearch ats = new AutomatonTextSearch(result, patterns[0], true); // true for verbose
System.out.println("AFD found pattern: " + ats.run() + " times.");
Para ver más ejemplos dirigirse a src.test
y leer README de aquel directorio.
#### 2.2 Arreglo de sufijos
*algorithm.SuffixArray* construye el automata del archivo que recibe como parámetro del constructor, este se accesa con su getter correspondiente
*test.SuffixArryTest* contiene un main que corre los experimentos para todos los archivos
*algorithm.PatternSearchSA* realiza la busqueda de patrones utilizando el arreglo de sufijo recibido en el constructor.