Problem in crawling a text document

0

The purpose of the project is to develop a program that reads a text document (a dictionary in% with% more concretely) and removes the words, ignoring their definitions, special characters.

The words to be taken are all in txt , hyphenated words must be separated and stored distinctly, ignoring words that contain apostrophes. When writing the code itself, we found no problem, since by testing the program on CAPSLOCK smaller files created by us it can extract everything correctly.

The problem arises when we test the program in the text file made available by the teacher, because we get a message of txt (send print attached).

Also send a link to the available txt file (29765-8.txt - link

a>)

It might be a bit tedious to evaluate the code, but it would help with any kind of help.

#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <cctype>
using namespace std;
//const bool Debug = true;


int tamanho(string palavra) {
int tamanho = 0;
for (int i = 0; i < 1000; i++) {
    if (palavra[i] == '
#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <cctype>
using namespace std;
//const bool Debug = true;


int tamanho(string palavra) {
int tamanho = 0;
for (int i = 0; i < 1000; i++) {
    if (palavra[i] == '%pre%') {
        break;
    }
    else {
        tamanho++;
    }
}
return tamanho;
}


bool TemHiphen(string palavra) {
int tam = tamanho(palavra);
bool flag = false;
for (int j = 0; j < tam; j++) {
    if (((palavra[j] >= 'A') && (palavra[j] <= 'Z')) || palavra[j] == '-') {
        flag = true;
    }
    else {
        flag = false;
        break;
    }
}

return flag;
}


bool sinonimo(string palavra) { 
int tam = tamanho(palavra);
bool flag = false;
for (int j = 0; j < tam; j++) {
    palavra[j] = (unsigned char)palavra[j];
    if (palavra[j] == ';' || ((palavra[j] >= 'A') && (palavra[j] <= 'Z'))) {
        flag = true;
    }

    else {
        flag = false;
        break;
    }
}
return flag;
}



bool pertence(string palavra) { 
bool flag = true;                   
int tam = tamanho(palavra);
for (int j = 0; j < tam; j++) {
    palavra[j] = (unsigned char)palavra[j];
    if (isupper(palavra[j])) {
        flag = true;
    }

    else {
        flag = false;
        break;
    }
}
return flag;
}


bool TemPalavra(string s1) {

//variaveis
bool flag = false;
int tam = tamanho(s1);

//ciclo para ver se e composta ou nao
for (int i = 0; i < tam; i++) {

    if (!((s1[i] >= 'A' && s1[i] <= 'Z'))) {
        flag = true;
        break;
    }
    else {
        flag = false;
    }
}

return flag;
}

bool DaPraEscrever(string s1) {
bool flag = false;
int tam = tamanho(s1);

for (int i = 0; i < tam; i++) {
    if (isgraph(s1[i])) {
        flag = true;
    }
    else {
        flag = false;
        break;
    }
}

return flag;
}



int main() {



//variaveis
char nomeFicheiro[300];
ifstream dicionario;    //este objeto lê o ficheiro

cin >> nomeFicheiro;    //o utilizador escolhe o nome do ficheiro que vamos ler
dicionario.open(nomeFicheiro);  //o conteudo do ficheiro fica guardado na variavel nomeFicheiro

if (!dicionario.is_open()) {    //ve se e possivel abrir o ficheiro
    cout << "ERRO NA LEITURA" << endl;
    exit(EXIT_FAILURE);
}

vector<string> palavrasDic; //criação do vetor para guardar palavras
vector<string> composta; //criacao do vetor para as palavras compostas
vector<string> simples; //criacao do vetor para as palaras simples
vector<string> decomposta; //criacao de vetor que separa as palavras compostas em simples
vector<string> juncao; //criacao de um vetor que junta os vetores simples e decomposta

// O FICHEIRO ESTÁ ABERTO MESMO QUE NAO APAREÇA NA CONSOLA

string palavra;                  //enquanto o ficheiro tiver conteudo

while (dicionario.good()) {
    dicionario >> palavra;
    if (DaPraEscrever(palavra)) {
        if (pertence(palavra)) {                //se a palavra estiver pronta para ser adicionada ela e adicionada
            palavrasDic.push_back(palavra);
        }
        else if (sinonimo(palavra)) {                                   //se a palavra tiver a flag da funcao sinonimos ligada
            palavra = palavra.substr(0, palavra.length() - 1);          //retira lhe o ; e poe a palavra na B.D
            palavrasDic.push_back(palavra);
        }
        else if (TemHiphen(palavra)) {                                  //se a flag do tem hiphen estiver ativada
            for (int i = 0; i < palavra.length(); i++) {                    //este excerto vai separar as duas palavras com hiphen e adiciona las
                if (!((palavra[i] >= 'A' && palavra[i] <= 'Z') || (palavra[i] >= 'a' && palavra[i] <= 'z'))) {
                    palavra[i] = ' ';
                }
            }
            palavrasDic.push_back(palavra);
        }
    }
}

//neste ciclo separamos do vetor que contem todas as palavras as palavras simples das compostas (que tinham hiphen)
//e guardamo-las em 2 vetores diferentes (simpes ; composta)
for (int i = 0; i < palavrasDic.size(); i++) {
    if (TemPalavra(palavrasDic[i])) {
        composta.push_back(palavrasDic[i]);
    }
    else {
        simples.push_back(palavrasDic[i]);
    }
}

//este excerto separa o string que tem as palavras compostas em strings separadas
for (int i = 0; i < composta.size(); i++) {
    string cmd = composta[i];
    string arg;

    string::size_type pos = cmd.find(' ');
    if (cmd.npos != pos) {
        arg = cmd.substr(pos + 1);
        cmd = cmd.substr(0, pos);
    }

    decomposta.push_back(cmd);
    decomposta.push_back(arg);

}


//juncao dos dois vetores (simples e decomposta)
juncao.reserve(simples.size() + decomposta.size()); //guardar espaco na memoria
juncao.insert(juncao.end(), simples.begin(), simples.end());
juncao.insert(juncao.end(), decomposta.begin(), decomposta.end());


/*
for (int v = 0; v < palavrasDic.size(); v++) {      //ESTE EXCERTO E TEMPORARIO PARA OS TESTES
    cout << palavrasDic[v] << endl;
}

cout << endl;
cout << endl;

for (int v = 0; v < composta.size(); v++) {     //ESTE EXCERTO E TEMPORARIO PARA OS TESTES
    cout << composta[v] << endl;
}

cout << endl;
cout << endl;

for (int v = 0; v < simples.size(); v++) {      //ESTE EXCERTO E TEMPORARIO PARA OS TESTES
    cout << simples[v] << endl;
}

cout << endl;
cout << endl;

for (int v = 0; v < decomposta.size(); v++) {       //ESTE EXCERTO E TEMPORARIO PARA OS TESTES
    cout << decomposta[v] << endl;
}
*/



int size = juncao.size();
int i = 0;
int p1 = 0;
int p2 = 1;

while (i < (size-1)) {
    if (juncao[p1] > juncao[p2]) {
        swap(juncao[p1], juncao[p2]);
        p1 = 0;
        p2 = 1;
        i = 0;
    }

    p1++;
    p2++;
    i++;
}

for (int v = 0; v < juncao.size(); v++) {       //ESTE EXCERTO E TEMPORARIO PARA OS TESTES
    cout << juncao[v] << endl;
}


return 0;
}
') { break; } else { tamanho++; } } return tamanho; } bool TemHiphen(string palavra) { int tam = tamanho(palavra); bool flag = false; for (int j = 0; j < tam; j++) { if (((palavra[j] >= 'A') && (palavra[j] <= 'Z')) || palavra[j] == '-') { flag = true; } else { flag = false; break; } } return flag; } bool sinonimo(string palavra) { int tam = tamanho(palavra); bool flag = false; for (int j = 0; j < tam; j++) { palavra[j] = (unsigned char)palavra[j]; if (palavra[j] == ';' || ((palavra[j] >= 'A') && (palavra[j] <= 'Z'))) { flag = true; } else { flag = false; break; } } return flag; } bool pertence(string palavra) { bool flag = true; int tam = tamanho(palavra); for (int j = 0; j < tam; j++) { palavra[j] = (unsigned char)palavra[j]; if (isupper(palavra[j])) { flag = true; } else { flag = false; break; } } return flag; } bool TemPalavra(string s1) { //variaveis bool flag = false; int tam = tamanho(s1); //ciclo para ver se e composta ou nao for (int i = 0; i < tam; i++) { if (!((s1[i] >= 'A' && s1[i] <= 'Z'))) { flag = true; break; } else { flag = false; } } return flag; } bool DaPraEscrever(string s1) { bool flag = false; int tam = tamanho(s1); for (int i = 0; i < tam; i++) { if (isgraph(s1[i])) { flag = true; } else { flag = false; break; } } return flag; } int main() { //variaveis char nomeFicheiro[300]; ifstream dicionario; //este objeto lê o ficheiro cin >> nomeFicheiro; //o utilizador escolhe o nome do ficheiro que vamos ler dicionario.open(nomeFicheiro); //o conteudo do ficheiro fica guardado na variavel nomeFicheiro if (!dicionario.is_open()) { //ve se e possivel abrir o ficheiro cout << "ERRO NA LEITURA" << endl; exit(EXIT_FAILURE); } vector<string> palavrasDic; //criação do vetor para guardar palavras vector<string> composta; //criacao do vetor para as palavras compostas vector<string> simples; //criacao do vetor para as palaras simples vector<string> decomposta; //criacao de vetor que separa as palavras compostas em simples vector<string> juncao; //criacao de um vetor que junta os vetores simples e decomposta // O FICHEIRO ESTÁ ABERTO MESMO QUE NAO APAREÇA NA CONSOLA string palavra; //enquanto o ficheiro tiver conteudo while (dicionario.good()) { dicionario >> palavra; if (DaPraEscrever(palavra)) { if (pertence(palavra)) { //se a palavra estiver pronta para ser adicionada ela e adicionada palavrasDic.push_back(palavra); } else if (sinonimo(palavra)) { //se a palavra tiver a flag da funcao sinonimos ligada palavra = palavra.substr(0, palavra.length() - 1); //retira lhe o ; e poe a palavra na B.D palavrasDic.push_back(palavra); } else if (TemHiphen(palavra)) { //se a flag do tem hiphen estiver ativada for (int i = 0; i < palavra.length(); i++) { //este excerto vai separar as duas palavras com hiphen e adiciona las if (!((palavra[i] >= 'A' && palavra[i] <= 'Z') || (palavra[i] >= 'a' && palavra[i] <= 'z'))) { palavra[i] = ' '; } } palavrasDic.push_back(palavra); } } } //neste ciclo separamos do vetor que contem todas as palavras as palavras simples das compostas (que tinham hiphen) //e guardamo-las em 2 vetores diferentes (simpes ; composta) for (int i = 0; i < palavrasDic.size(); i++) { if (TemPalavra(palavrasDic[i])) { composta.push_back(palavrasDic[i]); } else { simples.push_back(palavrasDic[i]); } } //este excerto separa o string que tem as palavras compostas em strings separadas for (int i = 0; i < composta.size(); i++) { string cmd = composta[i]; string arg; string::size_type pos = cmd.find(' '); if (cmd.npos != pos) { arg = cmd.substr(pos + 1); cmd = cmd.substr(0, pos); } decomposta.push_back(cmd); decomposta.push_back(arg); } //juncao dos dois vetores (simples e decomposta) juncao.reserve(simples.size() + decomposta.size()); //guardar espaco na memoria juncao.insert(juncao.end(), simples.begin(), simples.end()); juncao.insert(juncao.end(), decomposta.begin(), decomposta.end()); /* for (int v = 0; v < palavrasDic.size(); v++) { //ESTE EXCERTO E TEMPORARIO PARA OS TESTES cout << palavrasDic[v] << endl; } cout << endl; cout << endl; for (int v = 0; v < composta.size(); v++) { //ESTE EXCERTO E TEMPORARIO PARA OS TESTES cout << composta[v] << endl; } cout << endl; cout << endl; for (int v = 0; v < simples.size(); v++) { //ESTE EXCERTO E TEMPORARIO PARA OS TESTES cout << simples[v] << endl; } cout << endl; cout << endl; for (int v = 0; v < decomposta.size(); v++) { //ESTE EXCERTO E TEMPORARIO PARA OS TESTES cout << decomposta[v] << endl; } */ int size = juncao.size(); int i = 0; int p1 = 0; int p2 = 1; while (i < (size-1)) { if (juncao[p1] > juncao[p2]) { swap(juncao[p1], juncao[p2]); p1 = 0; p2 = 1; i = 0; } p1++; p2++; i++; } for (int v = 0; v < juncao.size(); v++) { //ESTE EXCERTO E TEMPORARIO PARA OS TESTES cout << juncao[v] << endl; } return 0; }

    
asked by anonymous 28.03.2018 / 18:06

0 answers