Jump to content
cataninja

Corretor Ortográfico

Recommended Posts

cataninja

Olá pessoal :) Eu tenho de fazer um trabalho de programação que consiste em criar um corretor ortográfico e estou com um problema. Para ser mais fácil entender: "Deve começar por implementar as rotinas de leitura da lista de palavras (contidas no ficheiro wordlist.txt, uma palavra por linha) e o seu armazenamento na estrutura de dados adequada. Deve depois implementar as rotinas necessárias à leitura dos ficheiros de entrada e o seu processamento frase-a-frase (a cada linha do ficheiro corresponde um parágrafo, que pode conter uma ou mais frases). O processamento de cada frase implica verificar se cada palavra que a constitui está (ou não) com a ortografia correta (deve ter atenção às questões de maiúsculas/minúsculas na primeira palavra da frase, carateres de pontuação, aspas e parêntesis, valores numéricos, etc.). Caso encontre uma palavra que não tenha a ortografia correta deve utilizar uma rotina que permita sugerir alternativas ortograficamente corretas (relembre o tipo de erros que deve considerar)."

Para já, só tenho a 1ª parte é que está a funcionar. Queria guardar as frases do ficheiro de texto escolhido, num vetor, mas aparentemente não está a dar. Alguém consegue dar uma ajudinha?

#include <stdio.h>
#include <string.h>
#include <time.h>
#include "vetor.h"
#include "tabdispersao.h"
#include <ctype.h>
#define BUFFSIZE 255

//função que guarda as frases

void carregarFicheiro (char* filename, vetor *vec ){
FILE * input;
input = fopen (filename, "r");
int maxSize= BUFFSIZE;
char *frase;
frase = (char*)malloc(BUFFSIZE * sizeof(char) );
int i =0;
int pos = 0;
char c;
while((c=fgetc(input))!= EOF) {
if(i>=maxSize) {
frase = (char*)realloc(frase, BUFFSIZE * sizeof(char));
maxSize = maxSize + BUFFSIZE;
}
frase[i] = c;
if (c=='.' || c=='!' || c=='?')
{
vetor_insere(vec, frase, pos );
pos++;
i = 0;
}
i++;
}
for(i=0; i<vec->tamanho; i++){	 //ciclo for para testar se isto funciona
printf("%s \n", vec->elementos[i]);
}
}

Share this post


Link to post
Share on other sites
cataninja

eu estou a trabalhar no eclipse por isso usei a linha de comandos do windows para executar o programa e basicamente não aparece nada por isso presumo que haja aí algum erro.

Edited by cataninja

Share this post


Link to post
Share on other sites
HappyHippyHippo

isso é muito relativo ... o que deveria aparecer ?

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
seuqram

Primeiro, "vec" é um vetor de que? strings ou chars?

se for de char o printf abaixo devia ter um %c

printf("%s \n", vec->elementos[i]);

Segundo, já verificaste se o ficheiro abre?

if(input) printf("Abre?");

Terceiro:

frase = (char*)realloc(frase, BUFFSIZE * sizeof(char));

maxSize = maxSize + BUFFSIZE;

"maxSize =..." têm de estar antes do realloc, e dentro do realloc, no lugar do BUFFSIZE devia estar o "MaxSize" pois é ele que vai aumentar.

Quarto, têns a certeza que tens um ponto final, de exclamação ou interrogação no ficheiro?

if (c=='.' || c=='!' || c=='?')

Traça um caminho com printfs e vê o que está a falhar.

Edited by seuqram
  • Vote 1

Share this post


Link to post
Share on other sites
cataninja

Obrigada pelas dicas! Eu testei a função e isto agora está a funcionar. Só há um pequeno problema que eu não faço ideia de como resolver. É que a primeira palavra do texto aparece assim: "ion.nkenstein" em vez de "Frankenstein". Sabem qual é a razão?

Share this post


Link to post
Share on other sites
seuqram

Esse erro parece um pouco estranho. Apenas com a informação que me dás eu não consigo ajudar muito.

Partindo do principio que o vetor que está representado no código é um vetor de strings, o output que o programa enviou ("ion.nkenstein") têm um ponto no meio da palavra, ou seja quando chega á condição:

if (c=='.' || c=='!' || c=='?')
{
vetor_insere(vec, frase, pos );
pos++;
i = 0;
//continue;
}
i++; //Por causa disto

ele vai ser inserido num novo vetor e aqui:

printf("%s \n", vec->elementos[i]);

faria com que o "nkenstein" aparece-se noutra linha(porcausa do \n) visto que faz parte de outro vetor.

Repara na variável i dentro do loop while.

Quando a condição if (c=='.' || c=='!' || c=='?') é ativada... ele muda o i para 0, mas depois aumenta-o logo, começando o novo ciclo while com o i sendo 1. A melhor forma de fazeres isso é meteres um "continue;" depois de definires "i = 0;" assim ele passa logo para o fim do loop.

Mas acho que isso não vai resolver o teu problema visto que o que está errado é a primeira palavra. Podes tentar meter o memset(frase, NULL, BUFFSIZE); para limpares o teu arraz, visto que tanto o malloc como o realloc dão-te arrays com carateres aleatórios.

Estou mais desconfiado que o teu problema esteja relacionado com a parte interna do teu vetor, mas como disse anteriormente é dificil saber, do meu ponto de vista, o que está realmente mal.

Edited by seuqram

Share this post


Link to post
Share on other sites
HappyHippyHippo

responde só a isto : para que estás a fazer realloc da memória "frase" ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.