Pergunta

Estou criando um programa que segue certas regras para resultar em uma contagem das palavras, sílabas e frases em um determinado arquivo de texto.

Uma frase é uma coleção de palavras separadas pelo espaço em branco que termina em a. ou ! ou ? No entanto, esta também é uma frase:

Greetings, earthlings..

A maneira como eu abordei esse programa é digitalizar através do arquivo de texto um caractere por vez usando getchar (). Estou proibido de trabalhar com o arquivo de texto inteiro na memória, deve ser um caractere ou palavra de cada vez.

Aqui está o meu dilema: usando getchar () posso descobrir qual é o personagem atual. Eu continuo usando getchar () em um loop até encontrar o caractere EOF. Mas, se a frase tiver vários períodos no final, ainda é uma única frase. O que significa que eu preciso saber qual era o último personagem antes do que estou analisando e o seguinte. Através do meu pensamento, isso significaria outra chamada getchar (), mas isso criaria problemas quando eu for a digitalização no próximo personagem (agora pulou um personagem).

Alguém tem uma sugestão de como eu poderia determinar que a frase acima é realmente uma frase?

Obrigado, e se você precisar de esclarecimentos ou qualquer outra coisa, me avise.

Foi útil?

Solução

Você só precisa implementar um muito simples Máquina do estado. Depois de encontrar o fim de uma frase, você permanece nesse estado até encontrar o início de uma nova frase (normalmente isso seria um personagem espacial não branco que não seja um terminador como.! Ou?).

Outras dicas

Você precisa de uma gramática extensível. Veja por exemplo em expressões regulares e tente construir uma.

Geralmente, a linguagem humana é diversa e não é facilmente parsexível, especialmente se você tiver discurso coloquial para analisar ou diferentes idiomas. Em alguns idiomas, pode nem ficar claro qual a distinção entre uma palavra e uma frase é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top