Peczenyj's Blog

Just Another /Perl|Ruby|C++|Java|Python|JavaScript|Flash|Bash/ Hacker

Sobre O FISL E Tudo Mais

Rapidamente, foi ótimo reencontrar os amigos de Porto Alegre. Os ultimos dias do FISL me cansaram demais, porém foi ótimo conversar pessoalmente com o Aurélio (alias o livro dele é ANIMAL! vale a pena adquirir!), rever o Julio Neves, a galera do Tchelinux, sem falar na galera que eu conheci no evento (que eu insistia em trocar o nome, procedência, etc). Um abraço especial pro Marcelo Martins, que deve estar em Torres agora.

Destaque para a palestra do Guilherme Chapiewski.

Devo me preparar melhor para os próximos eventos, tanto em Poa ano que vem quanto os próximos eventos (como o FLISOL dia 26 de Abril na PUC-RJ, sem falar no Hack’n Rio). To doido pra ir no Javauy 2008 mas acho que não vai rolar :( Estou cheio de ideias!

Peço desculpas a todos que não conseguiram me encontrar ou que não pude conversar direito! Forte Abraço!

Comments

Tiago Albineli Motta
O Fisl foi bom demais!
Aurélio Jargas
Daê Thiago, legal te conhecer também cara, valeu pela força, abração!
Tiago Peczenyj
“art of testing” ??
The Art of Testing
Grande Peczenyj, foi muito bom conversar contigo cara. Varias e grandes idéias trocadas. Abração cara!!1

Um Corretor Ortográfico Em Gawk

Ano passado eu publiquei uma pequena nota sobre um pequeno corretor ortográfico feito em Python.

No artigo do Peter Norwig, ele explica o principio estatístico do algoritmo. No final, ele mostra varias implementações do algoritmo (em D, Java, Ruby e até Erlang).

Depois de muito pesquisar, decidi fazer uma versão em gawk. A primeira tinha 30 linhas e não funcionava muito bem, arrumando e testando cheguei a esta forma final com apenas 15 linhas.

Eu chamo de linha um statement completo do awk. Perceba que nenhuma linha dessas possui o separador de statement ; (ponto-e-virgula), exceto quando estou utilizando o for no estilo C.

# Usage: gawk -v word=something -f thisfile.awk [ big.txt [ big2.txt ... ]]
# Gawk version with 15 lines -- 04/13/2008
# Author: tiago (dot) peczenyj (at) gmail (dot) com
# Based on : http://norvig.com/spell-correct.html
function edits(w,max,candidates,list, i,j){
for(i=0;i< max ;++i) ++list[substr(w,0,i) substr(w,i+2)]
for(i=0;i< max-1;++i) ++list[substr(w,0,i) substr(w,i+2,1) substr(w,i+1,1) substr(w,i+3)]
for(i=0;i< max ;++i) for(j in alpha) ++list[substr(w,0,i) alpha[j] substr(w,i+2)]
for(i=0;i<= max ;++i) for(j in alpha) ++list[substr(w,0,i) alpha[j] substr(w,i+1)]
for(i in list) if(i in NWORDS) candidates[i] = NWORDS[i] }

function correct(word ,candidates,i,list,max,temp){
edits(word,length(word),candidates,list)
if (!asort(candidates,temp)) for(i in list) edits(i,length(i),candidates)
return (max = asorti(candidates)) ? candidates[max] : word }

BEGIN{ if (ARGC == 1) ARGV[ARGC++] = "big.txt" # http://norvig.com/big.txt
while(++i<=length(x="abcdefghijklmnopqrstuvwxyz")) alpha[i]=substr(x,i,1)
IGNORECASE=RS="[^"x"]+" }

{ ++NWORDS[tolower($1)] }

END{ print (word in NWORDS) ? word : "correct("word")=> " correct(tolower(word)) }


Veja o script em funcionamento:
$ time gawk -v word=somethink -f spelling.awk
correct(somethink)=> something

real 0m4.862s
user 0m4.702s
sys 0m0.093s

Comments

Rael
Tiago, mais uma vez, parabéns!
É muito divertido mexer com estas coisas, não?
Ah, eu não esqueci de te mandar a versão otimizada em Java… eu só não achei seu email pra enviar! :P
Me manda um email, e eu te dou reply!
Tiago Albineli Motta
Corretor ortográfico, tatuagem… esse foi um final de semana divertido pra você heim! hahahha

Venha Tomar Um Chimarrão No Estande Da Globo.com!

Acompanhando o post do Guilherme, dia 18 eu devo aparecer por Porto Alegre, para o FISL.

Venha Tomar um Chimarrão no Estande da Globo.com durante o FISL!

Comments

Tiago Albineli Motta
É claro que irei :)
Luis Eduardo Bohrer da Silva
Muito legal Tiago.

Nos veremos lá.
Para tomar um chimarrão e falar um pouco de tecnologia. :-D

Até mais.