Trabalho
de Formatura Supervisionado
MAC 499
preSotaq
Nome:
Julio Shnaider Gejer – shnaider@linux.ime.usp.br
Orientador:
Arnaldo Mandel – am@ime.usp.br
1. Definição
sobre o desenvolvimento
3. Funcionalidades
do preSotaq
5. Situação Atual e
Planejamento Futuro
Vamos apresentar aqui o sistema preSotaq e o ambiente que nos levou a
desenvolvê-lo. Temos uma breve descrição funcional do sistema Sotaq para
entendermos o contexto envolvido e a importância desse novo sistema. Após isto
temos uma descrição funcional do sistema e por fim, uma análise subjetiva do relacionamento
entre este projeto e o curso de Ciência da Computação do IME.
O preSotaq é um sistema que tem como objetivo melhorar a preparação de dados para serem processados pelo programa Sotaq.
O programa Sotaq permite testes de modelos, baseados na Teoria de
Otimalidade, para localização de acentos secundários. Na prática, o “Sotaq é um
programa que lê uma coleção de frases e imprime para cada uma delas uma
decomposição em segmentos rítmicos”. A validação desses modelos requer um
confronto com grande quantidade de dados reais que até então eram preparados e
anotados manualmente o que se torna uma tarefa inviável.
Então o preSotaq viabilizará esta preparação de dados, pelos
lingüistas, através de uma interface gráfica amigável e intuitiva.
O planejamento para o desenvolvimento do preSotaq contou com várias
etapas porém simples e rápidas. Houve muita liberdade para a escolha de todos
os itens que estão descritos abaixo.
1. Definição sobre o desenvolvimento
A primeira etapa do planejamento e análise dos requisitos contou com a escolha da linguagem e do ambiente de desenvolvimento. A escolha natural foi pela linguagem Java 2, no ambiente de desenvolvimento Netbeans, uma IDE desenvolvida por estudantes da república Tcheca e depois comprada pela Sun Microsystems, que por fim, deixou como “open source”.
A escolha pela linguagem Java 2 foi devida principalmente a sua portabilidade, já que possivelmente os usuários utilizarão sistemas operacionais diferentes (Windows e Unix).
A escolha pela IDE Netbeans foi pela sua facilidade e integração com
as classes Swing JFC, facilitando assim, o desenvolvimento da parte visual do
sistema e, portanto, sua integração com o usuário.
Após estas escolhas foi necessário decidirmos a forma de entrada e
saída de dados. A primeira opção seria mantermos os tipos de arquivos
utilizados pelo Sotaq, que são arquivos texto com uma formatação pré-definida,
porém optamos por utilizar o formato XML (Extensible Markup Language) pois além
de estar amplamente definido é facilmente estendido. Além disso existe uma
integração muito natural entre Java e XML, sendo muito simples tanto ler,
quanto gravar arquivos neste formato.
Porém com essas definições criamos um certo problema que é como
comunicar o preSotaq com o Sotaq. A solução foi simples criando um conversor de
arquivos do formato XML para o formato do sotaq, e vice-versa. Apesar disso, já
está planejada para a próxima versão do sotaq o tratamento direto de arquivos no
formato XML.
Então agora temos definido a linguagem (Java), o ambiente de
desenvolvimento (Netbeans), o formato de arquivos (XML), e a forma de
comunicação entre os sistemas (conversão de arquivos).
3. Funcionalidades do preSotaq
Para citarmos as funcionalidades do preSotaq precisamos relembrar seu objetivo: facilitar a preparação de dados. Assim, devemos ter um editor de textos e um selecionador de propriedades para as sílabas de nosso texto e desta maneira podemos citar as funcionalidades que o sistema deve ter no momento de sua entrega:
·
Abrir arquivo com frases no formato XML.
·
Visualizar frases no modo normal (sem separação de
sílabas).
·
Visualizar frases com sílabas separadas e com as devidas
propriedades.
·
Editar propriedades das sílabas.
·
Editar separação de sílabas (juntar e separar).
·
Separação automática de sílabas.
·
Detecção automáticas de algumas propriedades (como início
de palavra).
·
Incluir, Excluir e Editar frase.
·
Salvar alterações.
Como o cronograma foi alterado diversas vezes ao longo do projeto e
tivemos mais implementações do que o planejado inicialmente, abaixo segue um
relato das fases envolvidas e sua duração.
1. Desenvolvimento de um conversor de XML para o formato do Sotaq e vice-versa: conforme explicado, consiste no conversor que possibilitará a comunicação entre o Sotaq e o preSotaq (junho a julho / 2003).
2. Desenvolvimento
do protótipo da tela inicial para termos uma base de layout para o sistema (julho /
2003).
3. Desenvolvimento
do protótipo do resto do sistema de acordo com as funcionalidades desejadas (agosto
/ 2003).
4. Aprovação
do protótipo do sistema e eventuais alterações (setembro / 2003).
5. Implementação
de algumas funcionalidades entre elas, abrir arquivo com frases, navegabilidade entre
as janelas, entre outras (outubro / 2003).
6. Implementação
das demais funcionalidades: todas as demais funcionalidades descritas no item
3.3 (novembro / 2003 até a entrega).
7. Refatoração
do código: momento de melhoria no código desenvolvido, conforme necessário (janeiro
e agosto / 2004)
8. Testes do
sistema e eventuais alterações: testes de todo o sistema para que funcione
perfeitamente e caso necessário desenvolvimento de pequenas alterações (janeiro
/ 2004 e a cada nova entrega de funcionalidades).
9. Documentação:
documentação de todo o código desenvolvido para o sistema (fevereiro e agosto / 2004).
10. Entrega:
entrega através de uma ferramenta de instalação para Windows e Unix (outubro / 2004).
Este cronograma tem
sido atualizado de acordo com o andamento do projeto e a cobrança para seu
cumprimento tem sido bastante tranqüila contando com bastante compreensão do
orientador em relação às dificuldades que passamos ao longo de todo o processo
de desenvolvimento. Os prazos estão bem esparsos porém com a condição de
estendê-lo até o término de todo o desenvolvimento, mesmo que isso leve a
alguns meses a mais, como é o caso, pois o projeto tem duração além de um ano.
5. Situação Atual e Planejamento Futuro
O preSotaq chegou ao final conforme as especificações iniciais e as
demais que foram agregadas ao longo de todo o processo. Assim agora este
programa pode ser utilizado por usuários finais e também pode ser adaptado para
futuras implementações. Um grande destaque ao produto como se encontra hoje é
sua fácil adapatação visual que não necessita alteração em código java, precisando
apenas alterar propriedades de um arquivo de cofiguração. Dentre as propriedades
configuráveis podemos destacar :
·
Tamanho e posição das janelas.
·
Cores, tipos e tamanhos fontes.
·
Definição das propriedades das sílabas.
·
Textos dos menus, botões, janelas de perguntas (como salvar).
·
Localização dos arquivos de ajuda.
Temos abaixo as principais janelas do sistema, onde podemos ver a versão final
delas.
Começamos com a tela inicial do sistema. Através dela podemos
ver:
·
um menu acima com 4 informações : "Arquivo" que possibilita
trabalhar informações relativas ao arquivo de dados; "Ajuda" que possibilita visualizar
uma janela de ajuda no formato html; "Arquivo Atual" que diz o nome do arquivo que está
atualmente aberto; "Arquivo backup" que indica, após salvar, o nome do arquivo de backup
atual.
·
uma frase com informações sobre o que o usuário deve fazer :
selecionar uma frase abaixo ou selecionar um arquivo com frases.
·
uma tabela com as frases atuais : estas frases podem ser
selecionadas para edição.
·
dois botões para que a frase seja editada ou para que as propriedades
das sílabas sejam editadas.
·
um asterisco vermelho que indica que houve alterações e que
é necessário salvar para guardar as informações.
(As frases que se encontram duplicadas estão de acordo com o arquivo
fornecido para a entrada do programa.)
O usuário pode, através do menu “Arquivo”, fazer as seguintes tarefas:
·
criar um novo arquivo sem nenhuma frase.
·
abrir um arquivo com frases já existente.
·
criar uma frase nova no arquivo atual.
·
excluir a frase selecionada.
·
salvar as alterações no arquivo atual e conseqüentemente criar um
arquivo de backup.
·
sair do sistema.
Caso o usuário clique no botão "Editar" na janela principal, a seguinte
janela aparecerá:
A partir dessa janela conseguimos visualizar a frase e algum eventual
comentário desta frase que aparece com as separações de sílabas indicadas
por um ponto no meio da linha. O usuário pode alterar a frase livremente e se
desejar que seja feita uma separação de sílabas automática, basta clicar no botão
"Separar Sílabas". Caso deseje inserir uma separação de sílabas manualmente (ou
retirar uma) basta clicar em "Inserir Separação" ou clicar com o botão esquerdo
do mouse junto com a tecla "Control" pressionada. Além disso é possível obter uma
"Ajuda", "Voltar" (guardando as alterações) ou simplesmente "Cancelar" tudo e voltar a
tela principal.
A partir da tela principal o usuário pode também clicar no botão
"Propriedades" que o levará a tela de edição de propriedades das sílabas, conforme
janela abaixo.
Nesta janela podemos selecionar as propriedades de cada sílaba bastando
para isso clicar na propriedade correspondente. Da mesma forma como as outras janelas,
nesta podemos obter uma rápida "Ajuda", e podemos também da mesma forma que na edição
de frases, "Voltar" guardando em memória as alterações ou simplesmente "Cancelar" e não
guardar as alterações.
Por fim, foi desenvolvido um instalador em java que permite ao usuário
selecionar o local de destino dos arquivos a serem instalados. Sua janela está
reproduzida abaixo.
Desta maneira conseguimos atingir o objetivo do sistema,
implementando todas as funcionalidades previstas e deixando o sistema
facilmente utilizável pelos usuários e configurável para futuros
administradores do sistema.
Um dos grandes destaques deste sistema é sua facilidade de
configuração, através de arquivos de configuração de propriedades. Assim, não
é necessário refazer o código nem sequer recompilar o sistema, sendo necessário
somente passar os parâmetros corretos na inicialização do sistema.
A separação de sílabas que o PreSotaq proporciona ao usuário é baseada
no algoritmo (não publicado) de C.L.L. Lucchesi, J. Stolfi e T. Kowaltoski, e adaptada
do código gentilmente cedido pelo Prof. Cláudio Lucchesi (e escrito originalmente
em C).
Abaixo temos os principais lugares que ajudaram no desenvolvimento do
preSotaq:
1. Sotaq - http://www.ime.usp.br/~tycho/prosody/sotaq/index.html
- informações sobre o Sotaq, suas funcionalidades, aplicações, instalação e
utilização.
2. J2SE API
– http://java.sun.com/j2se/1.4.2/docs/api/index.html
- documentação básica sobre Java 2, apresentando suas classes e sintaxe.
3. Java
Swing Tutorial – http://java.sun.com/docs/books/tutorial/uiswing/
- tutorial simples sobre a utilização do Swing.
4. XML - http://www.w3.org/XML/ - documentação sobre a
padronização do XML. Referência importante porém de pouco auxílio neste
projeto.
5. DTD - http://www.w3schools.com/dtd/ - um
pequeno tutorial sobre DTD e sua utilização com XML.
6. DTD e
XML - http://www.xmlfiles.com/dtd/ -
mais um pouco sobre DTD e XML.
7. Netbeans
– http://www.netbeans.org/ - site
oficial do NetBeans, de onde é possível fazer o download gratuito desta
ferramenta.
Para o desenvolvimento do preSotaq algumas disciplinas ajudaram muito,
entre elas Laboratório de Programação II onde pude aprender o início da sintaxe
de Java e Programação Extrema onde o desenvolvimento de um projeto prático era
um objetivo primordial, além de aprender a utilizar a IDE Netbeans. Além disso,
durente o desenvolvimento, houve um enorme aprendizado na manipulação de
arquivos XML e um aprimoramento no desenvolvimento de sistemas utilizando a
linguagem Java. Vale um grande destaque para a disciplina Linguagens Formais e
Autômatos pois agora pude ver uma aplicação bem prática de sua utilização
(que é o caso da separação de sílabas).
Contudo, toda a formação neste curso juntamente com outras
experiências pessoais, entre elas um estágio, possibilitaram um aprendizado
ainda maior.
Para o preSotaq não houve um grupo de desenvolvimento, que tem as
desvantagens de não haver interação entre o próprio grupo, divisão de trabalho,
entre outras coisas, porém traz uma responsabilidade maior pois sabemos que
todo o trabalho fica atribuído a apenas uma pessoa.
A pequena frustração é que este projeto, apesar de sua grande importância,
explora pouco o nosso aprendizado durante o curso de graduação, porém é um
ponto pequeno perto de tudo que ele envolve.
Acredito ter contribuído para a realização de projetos acadêmicos e
auxiliado no desenvolvimento de novas teorias, que ajudarão nossa comunidade
num futuro próximo e, desta maneira, fica uma pequena contribuição para futuros
pesquisadores.