Ferramentas do usuário

Ferramentas do site


prog2:verificador_ortografico

Verificador ortográfico

Este projeto visa implementar um verificador ortográfico, que recebe um texto como entrada e produz o mesmo texto na saída, com as palavras potencialmente incorretas indicadas entre colchetes ([…]). Uma palavra é considerada potencialmente incorreta se não for encontrada em um arquivo de dicionário.

Atividade

Construa um programa para verificar a ortografia das palavras de um texto lido da entrada padrão (stdin). A saída padrão (stdout) deve reproduzir fielmente o texto de entrada, mas colocando as palavras que não estão no dicionário entre colchetes. O dicionário está disponível no arquivo /usr/share/dict/brazilian (em distribuições Linux populares).

Consideram-se palavras como sequências contíguas de letras (A-Z, a-z) com ou sem acentos; os demais caracteres (números, espaços e outros símbolos) não fazem parte de palavras.

Por exemplo, para esta entrada:

Para que o pocessador possa interromper a execução de uma tarefa
e retornar a ela mais tarde, sem corromper seu estado interno,
é necessário definir operações para salvar e restaurrar o
contexto da tarefa.

O ato de salvar os valores do contexto atual em seu TCB e
possivelmente restaurar o contexto de outra tarefa, previamente
salvo em outro TCB, é denominado "troca de contexto".

O programa deve gerar esta saída:

Para que o [pocessador] possa interromper a execução de uma tarefa
e retornar a ela mais tarde, sem corromper seu estado interno, 
é necessário definir operações para salvar e [restaurrar] o
contexto da tarefa.

O ato de salvar os valores do contexto atual em seu [TCB] e
possivelmente restaurar o contexto de outra tarefa, previamente
salvo em outro [TCB], é denominado "troca de contexto".

Forma de chamada:

./ortografia < entrada.txt > saida.txt

Exemplos de arquivos de texto com erros de ortografia (baixe com “salvar como”, para evitar conversões de caracteres indesejadas):

Os arquivos acima e o dicionário estão no formato ISO-8859-1, que usa um byte por caractere para representar letras e sinais gráficos na tabela ASCII estendida (com 256 caracteres). Se for usar outros textos, assegure-se de que também estejam no formato ISO-8859-1, para facilitar seu trabalho.

A implementação deve atender os seguintes requisitos:

  • funcionar corretamente com os exemplos desta página m(
  • ler o dicionário de /usr/share/dict/brazilian (não copiar o arquivo para seu diretório); no Ubuntu e derivados, esse arquivo é provido pelo pacote wbrazilian.
  • o dicionário deve ser totalmente carregado em memória RAM antes de ser usado
  • ler a entrada de stdin e escrever a saída em stdout
  • a localização das palavras no dicionário deve usar um algoritmo de busca binária
  • o executável deve se chamar ortografia
  • usar Makefile com ao menos os alvos all, clean e purge
  • não gerar warnings ao compilar com a opção -Wall
  • processar o arquivo bigfile.txt em menos de 2 segundos.

Para medir o tempo de execução do programa, use o comando time:

time ./ortografia < bigfile.txt > output.txt

Arquivos a entregar ao professor:

  • ortografia.c : programa principal
  • dicionario.c : funções relativas ao dicionário (carregar o dicionário na memória, verificar se uma palavra está no dicionário, etc);
  • dicionario.h : interface (protótipos) das funções implementadas em dicionario.c;
  • Makefile

Dica: as funções da biblioteca C padrão (StdLib) podem facilitar a implementação de seu programa:

  • Acesso a arquivos: fopen, fclose, fgetchar fscanf, feof, rewind, …
  • Manipulação de strings: strcpy, strlen, strchr, index, strpbrk, strstr, …
  • Busca binária: bsearch

Consulte as páginas de manual para aprender a usar essas funções.

Sugestão de pseudocódigo para o programa:

ler o dicionário

c = ler caractere

enquanto não for o fim da entrada faça
  
  // avançar até encontrar uma letra ou o fim da entrada 
  enquanto (c não for uma letra) e (não for o fim da entrada) faça
    escrever c
    c = ler caractere
  fim enquanto

  // encontrou uma letra, ler a palavra 
  palavra = ""
  enquanto (c for uma letra) e (não for o fim da entrada) faça
    palavra = palavra + c
    c = ler caractere
  fim enquanto

  // tratar a palavra encontrada 
  se palavra <> "" então
    se minuscula(palavra) está no dicionario então
      escrever palavra
    senão
      escrever "[", palavra, "]"
    fim se
  fim se

fim enquanto
prog2/verificador_ortografico.txt · Última modificação: 2019/04/09 13:39 por maziero