Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <stdio.h>
- #include <iostream>
- #include <string.h>
- #include <ctype.h>
- #include "split.h"
- #define INC 2
- using namespace std;
- void incrementar(char*** &lista, int numArticulos) {
- if (lista == NULL) {
- lista = new char **[INC + 1];
- for (int i = 0; i < INC + 1; i++) lista[i] = NULL;
- } else {
- char *** aux = new char **[numArticulos + INC + 1];
- for (int i = 0; i < numArticulos; i++) aux[i] = lista[i];
- for (int i = numArticulos; i <= numArticulos + INC; i++) aux[i] = NULL;
- delete [] lista;
- lista = aux;
- }
- }
- void leerDatos(char*** &lista, int &numArticulos) {
- //inicializamos
- lista = NULL;
- numArticulos = 0;
- char linea[200];
- while (1) {
- char** palabras;
- int numPal;
- cin.getline(linea, 100, '\n');
- if (strcmp(linea, "****") == 0) break;
- splitTokens(linea, palabras, numPal);
- //Por Incrementos
- if (lista == NULL) {
- incrementar(lista, numArticulos);
- lista[0] = palabras;
- } else {
- if (numArticulos % INC == 0)
- incrementar(lista, numArticulos);
- lista[numArticulos] = palabras;
- }
- numArticulos++;
- }
- }
- void imprimir(char*** &lista, int &numArticulos) {
- for (int i = 0; i < numArticulos; i++) {
- for (int j = 0; lista[i][j] != NULL; j++) {
- cout << lista[i][j] << " ";
- }
- cout << endl;
- }
- }
- int existeNumero(char *palabra) {
- for (int i = 0; palabra[i] != '\0'; i++) {
- if (isdigit(palabra[i]))
- return 1;
- }
- return 0;
- }
- tolawer(char **&palabras, int nPal) {
- for (int i = 0; i < nPal; i++) {
- for (int j = 0; palabras[i][j] != '\0'; j++) {
- if ((palabras[i][j] >= 65) && (palabras[i][j] <= 90))
- palabras[i][j] += 32;
- }
- }
- }
- int buscarPalabra(char *palabra, char *** lstarticulos, char *** lstpalabras, int numArticulos, int numPalabras) {
- for (int i = 0; i < numArticulos; i++) {
- if (strcmp(lstarticulos[i][0], palabra) == 0)
- return 1;
- }
- for (int j = 0; j < numPalabras; j++) {
- if (strcmp(lstpalabras[j][0], palabra) == 0)
- return 1;
- }
- return 0;
- }
- int buscar(char *palabra, char *** lista, int numero) {
- for (int i = 0; i < numero; i++) {
- if (strcmp(lista[i][0], palabra) == 0)
- return i;
- }
- return -1;
- }
- void analizarOraciones(char *** lstarticulos, char *** words, int numArticulos, int numPalabras) {
- char linea[300];
- int contOraciones = 0;
- int contPal = 0;
- int contPalErr = 0;
- int contPalErrLex = 0;
- int contPalErrGram = 0;
- int AuxcontPalErrGram = 0;
- char **PalErr = new char*[20];
- for (int i = 0; i < 20; i++) PalErr[i] = NULL;
- char **PalErrLex = new char*[20];
- for (int j = 0; j < 20; j++) PalErrLex[j] = NULL;
- char **PalErrGra = new char*[40];
- for (int k = 0; k < 40; k++) PalErrGra[k] = NULL;
- while (1) {
- char c = cin.peek();
- if (c == EOF)
- break;
- cin.getline(linea, 300, '.');
- char** palabras;
- int nPal;
- splitTokens(linea, palabras, nPal);
- tolawer(palabras, nPal);
- contPal += nPal;
- for (int i = 0; i < nPal; i++) {
- int flagPalErr = existeNumero(palabras[i]);
- if (flagPalErr == 1) {
- PalErr[contPalErr] = palabras[i];
- contPalErr++;
- contPal -= 1;
- }
- if (!buscarPalabra(palabras[i], lstarticulos, words, numArticulos, numPalabras) && (flagPalErr != 1)) {
- PalErrLex[contPalErrLex] = palabras[i];
- contPalErrLex++;
- }
- }
- for (int i = 0; i < nPal; i++) {
- int posArt;
- if ((posArt = buscar(palabras[i], lstarticulos, numArticulos)) != -1) {
- int posPal;
- if ((posPal = buscar(palabras[i + 1], words, numPalabras)) != -1) {
- if (!((lstarticulos[posArt][1] == words[posPal][1]) && (lstarticulos[posArt][2] == words[posPal][2]))) {
- PalErrGra[AuxcontPalErrGram] = palabras[i];
- PalErrGra[AuxcontPalErrGram + 1] = palabras[i + 1];
- contPalErrGram++;
- AuxcontPalErrGram += 2;
- }
- }
- }
- }
- contOraciones++;
- }
- cout << "ESTADISTICAS GENERALES" << endl;
- cout << "-----------------------------------" << endl;
- cout << "Total de Oraciones: " << contOraciones << endl;
- cout << "Total de Palabras erradas por formato: " << contPalErr << endl;
- cout << "Palabras erradas por formato: " << endl;
- for (int i = 0; i < contPalErr; i++) {
- cout << PalErr[i] << endl;
- }
- cout << "Correccion Lexical" << endl;
- cout << "-----------------------------------" << endl;
- cout << "Total de palabras erradas por lexico: " << contPalErrLex << endl;
- for (int i = 0; i < contPalErrLex; i++) {
- cout << PalErrLex[i] << endl;
- }
- cout << "Correcion Gramatical" << endl;
- cout << "-----------------------------------" << endl;
- cout << "Total de pares de palabras erradas por gramatica: " <<contPalErrGram << endl;
- int aux = 0;
- for (int i = 0; i < AuxcontPalErrGram; i++) {
- cout << PalErrGra[aux] << " " <<PalErrGra[aux+1] << endl;
- aux+=2;
- }
- }
- int main(int argc, char** argv) {
- freopen("LAB4.txt", "r", stdin);
- char*** articulos;
- char*** palabras;
- int numArticulos;
- int numPalabras;
- leerDatos(articulos, numArticulos);
- imprimir(articulos, numArticulos);
- leerDatos(palabras, numPalabras);
- imprimir(palabras, numPalabras);
- analizarOraciones(articulos, palabras, numArticulos, numPalabras);
- return 0;
- }
- ----------------------------------------------------------------------
- #include <cstdio>
- #include <cstdlib>
- #include <cctype>
- #include <iomanip>
- #include <iostream>
- #include <cstring>
- #include "split.h"
- void memExacta_str(char ** input, char **& output, int numElem){
- output = new char*[numElem+1];
- for (int i = 0; i < numElem; i++) {
- int size = strlen(input[i])+1;
- output[i] = new char [size];
- strcpy(output[i],input[i]);
- }
- output[numElem] = NULL;
- }
- bool isSeparador(char c){
- if (isblank(c) || (c == ',') || (c == '.') || (c == '\n'))
- return true;
- else return false;
- }
- void splitTokens(char* linea, char**&palabras, int &numPal){
- numPal = 0;
- char * auxPal[50];
- if(!isSeparador(linea[0])){
- auxPal[numPal] = linea;
- numPal++;
- }
- for(int i = 1; linea[i] != '\0'; i++){
- if(!isSeparador(linea[i]) && (isSeparador(linea[i-1]) || linea[i-1] == '\0')){
- auxPal[numPal] = &linea[i];
- numPal++;
- }
- if (isSeparador(linea[i]) && !isSeparador(linea[i-1])){
- linea[i] = '\0';
- }
- }
- memExacta_str(auxPal, palabras, numPal);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement