Itens compartilhados de Juliano

quinta-feira, 20 de setembro de 2007

電算言語學 ou 전산언어학 ou Lingüística Computacional

Já foram 3 semanas de aula na SNU... ufa!
Tem um monte de coisa pra ler e pra fazer...
O mais divertido até agora é o curso de Lingüística Computacional.
Estamos começando a entrar de cabeça nas teorias malucas...
Ai, que saudade da matemática! Fazia tempo que eu não via essas coisas!
Por exemplo:
Para a próxima aula, temos que fazer um programa que mede a distância de Levens(h)tein entre duas strings. É definido por uma matriz formada por cada um dos caracteres de cada string comparados um a um. No final, é isso:

distância[i,j] = mínimo_valor { distância[i-1,j]+constante_de_inserção(alvoi-1), distância[i-1,j-1]+constante_de_substituição(alvoj-1, alvoi-1), distância[i-1,j]+constante_de_apagamento(alvoj-1) }

Divertido, né?

Nem parece lingüística... Mas é! ;)

No final, o programinha em Perl deu o seguinte:

use strict;

my $str1 = $ARGV[0];
my $str2 = $ARGV[1];

print "The distance is " . dist($str1, $str2) . ".\n";

sub dist($str1, $str2) {
my $len1 = length($str1);
my $len2 = length($str2);
my @chars1 = split("", $str1);
my @chars2 = split("", $str2);
my $cost;
my %matrix;

for (my $i = 0; $i <= $len1; ++$i) {
for (my $j = 0; $j <= $len2; ++$j) {
$matrix{$i}{$j} = 0;
$matrix{0}{$j} = $j;
}
$matrix{$i}{0} = $i;
}

for (my $i = 1; $i <= $len1; ++$i) {
for (my $j = 1; $j <= $len2; ++$j) {
if ($chars1[$i-1] eq $chars2[$j-1]) {
$cost = 0
}
else {
$cost = 2;
}
$matrix{$i}{$j} = min([$matrix{$i-1}{$j} + 1, $matrix{$i}{$j-1} + 1, $matrix{$i-1}{$j-1} + $cost]);
}
}

return $matrix{$len1}{$len2};
}

sub min {
my @list = @{$_[0]};
my $min = $list[0];

foreach my $i (@list) {
$min = $i if ($i < $min);
}
return $min;
}

Só para ilustrar, a distância entre "Juliano" e "Fabiano" (muita gente troca meu nome aí no Brasil...) é de "6", já a distância entre "Juliano" e "Serafina" é de "11", ou seja, é bem mais difícil alguém me chamar de Serafina do que de Juliano! ;) hehe
Batata e batatal, dá "1"; café e cafezal, "3"; milho e milharal, "5"... e por aí vai...

Esta é uma técnica usada na correção automática de editores de texto, vulgarmente conhecida como a "linha vermelha debaixo da palavra no M$Word". É claro que só esses numerinhos não servem de nada, mas, como de grão em grão a galinha enche o papo, isso mais um monte de outras coisas faz a correção ortográfica funcionar (mais ou menos). Pra quem pensa que é fácil, vai plantar batata (de preferência no batatal, que dá distância 1; se plantar batata no milharal, a distância de Levenshtein é de 10!)

Claro que eu tive uma ajudinha daqui e dali na internet... hehe Ninguém é de ferro. Mas o que eu tinha que fazer, eu fiz.
O meu grande problema com este programa é que eu não sabia mexer com matrizes em Perl... Mas no fim dá tudo certo.

Agora são 2 e meia da madrugada e eu tô com sono... Nem sei se o que eu tô escrevendo faz sentido ou não, mas eu só quero dizer a todos que eu estou muito feliz aqui na Coréia, estudando o que eu gosto, comendo bastante pimenta e me divertindo!

Torço para que cada um de vocês, meus amigos, não tenham medo de seguir seus sonhos e tentar ser feliz. Não se esqueçam de que a vida é curta e tem um monte de coisas que temos que fazer. Por que então não tentar ser feliz também?

Um grande abraço com muita saudade!

quarta-feira, 5 de setembro de 2007

Jamali cantando "Galopera" de Bangladesh



Este é o cara de Bangladesh que é da nossa turma de bolsistas em uma apresentação na Universidade de Kyung Hee.

Jogo dos sete erros



Vocês conseguem encontrar os únicos dois não-muçulmanos na foto acima??? ;)

segunda-feira, 3 de setembro de 2007

Pesquisar em blogues de brasileiros na Coreia

Resultado da pesquisa