Thursday, October 6, 2011

Meu novo projeto: LTasks

Longo tempo sem posts, mas não estou parado! O CoGrOO Comunidade segue a todo vapor, assim como o Cogroo 4.0 está cada dia mais perto de ficar pronto.
Tenho trabalhando agora no projeto Apache OpenNLP. No final de 2009 eu entrei como contribuidor e hoje sou um dos principais committers. Prometo que vou começar a falar aqui sobre o que tenho feito lá.

Mas hoje gostaria de apresentar um projeto totalmente novo. É o LTasks (Language Tasks). Um projeto idealizado pelo Wesley Seidel e por mim, e que pretende desenvolver produtos de processamento de linguagem natural. Hoje temos já em BETA um poderoso extrator de entidades nomeadas. Veja a demonstração online em http://ltasks.com. Desenvolvedores e pequenos negócios podem usar gratuitamente. Experimente!

Tuesday, August 10, 2010

CoGrOO Comunidade


Em breve teremos uma novidade no CoGrOO: um portal comunitário.

Nesse portal os usuários da ferramenta poderão fazer suas contribuições para a evolução da ferramenta. Elas podem ser simples, como simplesmente avisar que num texto o corretor errou, até escrever novas regras de erros.

Quando fizermos o lançamento será possível apenas submeter erros, e um fórum de discussão sobre os erros. Nesse fórum poderemos classificar, priorizar etc. Outras funcionalidades serão incorporadas aos poucos.

Em breve volto com detalhes desse desenvolvimento!

Monday, January 11, 2010

Verificador Gramatical em um programa Java

Compatível apenas com CoGrOO 3.0.5, para versão de desenvolvimento veja aqui.
Que tal verificar a gramatica (crase, concordância etc) dos textos que o usuário do seu programa Java digitar? Isto é possível com o CoGrOO, o corretor gramatical para a língua portuguesa do BrOffice.org. Este pequeno tutorial pode servir como ponto de partida. Ele explica como utilizar o CoGrOO para verificar o texto digitado no console. Os requisitos são CoGrOO Base 3.0.5 e Java 1.5 ou melhor.
Obtenha o CoGrOO Base 3.0.5 aqui e extraia o conteúdo pasta. Isto resultará numa pasta com todos os jars necessários para executar o corretor gramatical, e ainda os arquivos de dados necessários (dicionários, modelos linguísticos e regras).
Todos os jars dessa pasta deverão ser incluídos no Java classpath do seu programa, e o diretório de execução deverá ser a raiz da pasta que contém os recursos (pastas bin, data e rules).
Vamos então criar nosso programa. Bem simples, ele aguarda o usuário digitar uma linha de texto e usa o método checkText da classe GrammarCheckerBrazilianPortuguese para obter a lista com dos possíveis erros. Dessa lista podemos extrair dados como o identificador da regra, texto de mensagem ao usuário (longo e curto), sugestões para correção (quando disponível) e a posição do erro no texto.
Vamos ao código. Crie o arquivo CorretorGramatical.java na pasta CoGrOOBase-3.0.5-bin com o seguinte conteúdo:
import java.util.List;
import java.util.Scanner;

import br.usp.pcs.lta.cogroo.entity.Mistake;
import br.usp.pcs.lta.cogroo.grammarchecker.GrammarCheckerBrazilianPortuguese;


public class CorretorGramatical {

public static void main(String[] args) {

// cria instância do corretor gramatical
GrammarCheckerBrazilianPortuguese corretorGramatical = new GrammarCheckerBrazilianPortuguese();
// prepara para obter o texto
Scanner kb = new Scanner(System.in);
System.out.println("Digite o texto seguido de Enter para verificar. Digite 't' seguido de Enter em uma nova linha para terminar: ");
String entrada = kb.nextLine();
// aguarda texto
while (!entrada.equals("t")) {
// verifica erros do texto
List<Mistake> erros = corretorGramatical.checkText(entrada);
int contador = 1;
// imprime detalhes de cada erro
for (Mistake erro : erros) {
System.out.println("Erro " + contador++ + " -");
System.out.println(" Regra '" + erro.getRuleIdentifier() + "'");
System.out.println(" Mensagem curta '" + erro.getShortMessage() + "'");
System.out.println(" Mensagem longa '" + erro.getFullMessage() + "'");
System.out.println(" Texto com erro '" + entrada.substring(erro.getStart(), erro.getEnd()) + "'");
System.out.print( " Sugestões " );
for (String sugestao : erro.getSuggestions()) {
System.out.print("[" + sugestao + "] ");
}
System.out.println();
}
// aguarda o próximo texto digitado
entrada = kb.nextLine();
}
}
}
Pronto, agora é só compilar e executar:
javac -classpath CoGrOOBase-3.0.5.jar CorretorGramatical.java
java -classpath CoGrOOBase-3.0.5.jar CorretorGramatical

Wednesday, August 5, 2009

Vai um corretor gramatical onipresente no browser?


Que tal verificar a gramática de seus textos numa combinação de comandos do Firefox Ubiquity, independente do contexto da navegação? É o que propõe o comando "gramática" que pode ser assinado no seu Firefox Ubiquity através do link http://apoema.net/langbot/pt_BR/gc.lb

Com este comando você consegue verificar e corrigir erros gramaticais - como mau uso da crase, regência e concordância - ao escrever e-mails, documentos no Google Docs, posts em fóruns, blogs, twitter... enfim, qualquer contexto! A funcionalidade está disponível em diversos idiomas, como português, inglês e espanhol. A análise gramatical é feita remotamente usando a técnologia do CoGrOO, para a língua portuguesa, e o LanguageTool para os demais idiomas.

Confira mais no blog do autor.

Wednesday, July 29, 2009

Você já conhece o Firefox Ubiquity?

A palavra Ubiquity remete a onipresença, que é a capacidade de estar em todos os lugares ao mesmo tempo. A definição da palavra reflete bem o que esta nova extensão do Firefox propõe - disponibilizar, em qualquer contexto na navegação, ferramentas úteis, acessíveis por uma simples combinação de teclas e um comando em linguagem natural, humana.

Não consegue imaginar do que está extensão é capaz? Que tal um exemplo?

Imagine que hoje você pretende convidar um amigo para visitar uma exposição no museu que você acabou de encontrar navegando na web pelo Firefox. Que tal enviar a ele um e-mail com um link para o site?

Simples - Abra o Ubiquity (CTRL + ESPAÇO) e digite "e-mail Vamos visitar esta exposição hoje? à Bruno Sant" e enter! Pronto! Você nem precisou completar o nome do remetente, o Ubiquity buscou o nome do seu amigo nos contatos do Gmail. Ao apertar Enter o Ubiquity gera o e-mail para você.


Digamos ainda que você queira indicar ao seu amigo o endereço do museu onde a exposição está acontecendo. Você copia e cola o endereço no corpo do e-mail. Mas como você é legal ainda inclui um mapa dos arredores.

Veja como é simples - selecione o texto no e-mail com o endereço, abra o Ubiquity e digite "mapa". O Ubiquity busca o endereço no Google Maps, você ajusta o mapa e insere no corpo do e-mail.



E ainda você pode surpreender seu amigo, fã da cultura oriental, arriscando uma frase em japonês. Trabalhoso? Que nada! Selecione a frase "Vamos ao Museu?" que está no corpo do e-mail e chame o comando traduzir: "traduzir de Portuguese à Japanese". (na versão que testei os idiomas ainda não estavam traduzidos). Depois de todo esse "trabalho" seu amigo terá que aceitar o convite!


Ele aceitou o convite? Agora você tem um novo compromisso - que tal adicionar à agenda? Basta abrir o Ubiquity e digitar "adicionar ao Google Ca 14h visita ao museu"


Claro que o Ubiquity não agrega apenas serviços do Google - basta abrir o Ubiquity e digitar "listar comandos do Ubiquity" para ter a lista de todos os comandos assinados.
Alguns comandos disponíveis na instalação padrão -

Comandos de busca:
Busca - Busca usando seus mecanismos de busca instalados
Google - Faz uma busca no Google.
wikipedia - Busca na Wikipedia.
imdb - Busca no IMDB (www.imdb.com) o filme ou ator desejado.

E ainda Yahoo, Amazon, Youtube etc

Comandos relacionados a redes sociais:
twitter - Posta uma mensagem de até 160 caracteres no Twitter.
digg - Envia página para o Digg. Se ela já existir no Digg, abre a entrada correspondente.
tinyurl - Substitui a URL selecionada com uma url curta.
compartilhar no delicious - Compartilha a página atual como um Favorito no delicious.com

E muitos outros!

Instalando o Ubiquity 0.5.1 (ou melhor)

Ele possui um novo interpretador de comandos que suporta internacionalização - você executa comandos no seu idioma. Português foi um dos primeiros idiomas suportados.
Para instalar é simples. Visite o site http://ubiquity.mozilla.com/ e clique no banner verde. Uma mensagem será exibida na parte superior do navegador, perguntando se deseja proseguir. Basta aceitar e seguir as instruções.


Para configurar o idioma do interpretador de comandos abra o configurador do Ubiquity e na aba Settings siga até o Language Settings. Configure para o idioma de sua preferência.


Assinando comandos criados pela comunidade

A incrível abordagem adotada pelo Ubiquity de iteragir com o usuário tem empolgado desenvolvedores de software livre, e já existem disponíveis diversos novos comandos.

Um lugar para buscar comandos é a página https://wiki.mozilla.org/Labs/Ubiquity/Commands_In_The_Wild, e em breve estará disponível um diretório público chamado Ubiquity Herd: https://ubiquity.mozilla.com/herd/.
Comandos são assinados, e não adicionados. Isto porque quando um desenvolvedor resolve atualizar o comando os assinantes são atualizados automaticamente. Isto é bom para desenvolvedores e também é bom para usuários, mas implica em um problema de segurança que explicarei mais para frente, por isso a atualização automática é opcional.

Vamos assinar um comando? Que tal o screengrab? Este comando é capaz de "tirar uma foto" da página corrente e guardar na área de transferência.

Primeiro visitamos a página do comando: http://www.watersheep.org/~markh/screengrab.html. Assim que abrirmos a página uma mensagem será exibida na parte superior do navegador:



Esta mensagem significa em uma tradução livre: "Esta página contém comandos do Ubiquity. Caso você queira assinar estes comandos, clique no botão à direita". Ao clicar neste botão, uma mensagem de aviso será exibida na sua tela:



A tela seguinte assusta o usuário, ela tem como objetivo alertar que comandos do Ubiquity tem acesso aos recursos de seu navegador e pessoas mal intencionadas podem criar comandos com código malicioso para roubar suas senhas ou seu número de cartão de crédito. Comandos do Ubiquity devem ser instalados de fontes seguras das quais se tem plena confiança. Lembre que o comando pode ser atualizado automaticamente, isto implica que ele pode se tornar malicioso depois de você já ter verificado o código.

Ao aceitar ("I know what I'm doing. Subscribe to it!"), você tem o comando assinado e pronto para uso.

NOTA: A equipe do Ubiquity ponderou e optou pela funcionalidade em detrimento da segurança ao implementar o plug-in. Quando o Ubiquity Heard estiver pronto será mais fácil, pois os comandos serão avaliados pelos usuários e ganharão notas quanto sua confiabilidade. Por hora use comandos terceiros com cuitado ;)

Pronto temos o screengrab instalado. Vamos testar - digamos que você navegava pela Internet e encontra um site com uma imagem do BigLinux. Você decide mandar para seu amigo a tela. É simples! Abra o Ubiquity e digite "screengrab" para copiar uma imagem do site para a área de transferência, em seguida use o comando "email à Bruno Sant O BigLinux no Wikipedia Commons!" para gerar um e-mail. Finalmente cole a imagem no corpo do e-mail:


Espero que se divirta com o Ubiquity. Em breve volto com a analise de mais comandos já disponibilizados pela comunidade!

Agradeço ao Bruno Sant'Anna pela colaboração na confecção deste post.

Sunday, June 21, 2009

CoGrOO Banner for FISL 2009

Getting ready for my presentation at FISL. Now I have only 3 days. I'm planning to talk about the following:

Corretor Gramatical CoGrOO - Além da correção ortográfica nos editores de textos livres (CoGrOO Grammar Checker - Beyond spell checking in free text editors)
  • Sobre o projeto (About the project)Além da correção ortográfica (Beyond spell checking...)
  • Como funciona o CoGrOO (How does CoGrOO works)
  • Demonstração / Módulos (Demonstrations of the modules)
  • O CoGrOO 3.1 e o CoGrOO 3.2 (What to expect from future versions 3.1 and 3.2)
  • Como fazer o melhor corretor gramatical (How can we do the best grammar checker)O papel da comunidade (The role of community)
  • Além da correção gramatical (Beyond grammar checking...)
  • Conclusões (Conclusion)
Of course I prepared the CoGrOO shirt, now with long sleeve because it will be winter and FISL will be at Rio Grande do Sul.

Tuesday, April 8, 2008

Keep your copyright/license headers updated with a nice maven2 plug-in

Isn't it boring to keep the copyright/licenses headers of your code updated?
I just found a nice Maven2 plug-in that can do the job for you. It scans your code for file types like .java, .xml., .xsd, .ssh, .sql and many others and add the header formatted according to the file type.
There are many configurations available but the defaults for me were OK. I just had to create a file with the text of my license header and change my pom.
The plug-in site is: http://code.google.com/p/maven-license-plugin/
If you want my pom as sample, you can see it here, just search for "START: LICENSE PLUGIN"