Ferramentas do usuário

Ferramentas do site


prog2:verificador_ortografico

Verificador ortográfico

Este projeto visa implementar um verificador ortográfico simples, 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 incorreta se não for encontrada em um arquivo de dicionário pré-definido.

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 (inclusive espaços e quebras de linha), mas colocando entre colchetes as palavras que não estão no dicionário.

Consideram-se como palavras as sequências contíguas de letras (A-Z, a-z) com ou sem acentos e as cedilhas; 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 precisa copiar o arquivo para seu diretório); no Ubuntu e derivados, esse arquivo é provido pelo pacote wbrazilian. Se o dicionário não estiver disponível, pode obtê-lo aqui: brazilian.gz.
  • O dicionário deve ser totalmente carregado em memória RAM antes de ser usado, usando alocação dinâmica.
  • 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 brascubas.txt em menos de 1 segundo.

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

time ./ortografia < brascubas.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 de stdin

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 em stdout
    c = ler caractere de stdin
  fim enquanto

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

  // tratar a palavra encontrada 
  se palavra <> "" então
    se minúscula(palavra) está no dicionário então
      escrever palavra em stdout
    senão
      escrever "[", palavra, "]" em stdout
    fim se
  fim se

fim enquanto
prog2/verificador_ortografico.txt · Última modificação: 2020/03/06 10:57 por maziero