Itens compartilhados de Juliano

quarta-feira, 25 de junho de 2008

愛ちゃんと日本の友達みんなへ

最近、僕は日本のことがものすごく恋しいんだけど。日本語も。
韓国に来て、最初の一学期だけに日本語を使った。その時、韓国語もできず、英語や日本語しか使えなかったんだ。その次、4級のときに、韓国が段々身につけて喋れるようになって日本語を使う機会が段々少なくなってきちゃった。今は、日本語その物はもう喋れません。日本語で話そうと思ったら、韓国語の単語がぴょんぴょんと口から飛び出しちゃう。そうすると、僕がイライラしてもっと話せなくなる。うゎーーー。辛いよ、本当に。書く時は、時間がもっとあるから、日本語はなんとなく出るけど、以前と同じように思わずに書くのはもうできない。深ーく考えないとダメ。どうしよう?
その上に、日本に行きたくて行きたくて、時間がないので行けない気持ちはイヤだ。隣の韓国にいるから、もっと辛い。ブラジルにいた時は「まぁ、しようがないなぁ」って。でも、今は違うよ。メッチャ近くにいるのに、ブラジルよりも遠く感じる。それでは、日本の友達の皆さん、いつかは是非行くぜ。でも、いつって言うと、まだ分からない。早くだと期待いたします。
じゃ、今ちょっと日本語で書きたかったからなんか書いたね。ちょっと文句臭いかも知れないけど、それは今の気持ちです。もうすぐ、研究室に行かなきゃ。夏休みなのに。
また今度ね。コメントとか書いてくれるなら、うれしい^^。
チャオ!

Cada um no seu quadrado....

Gente, o que é que anda acontecendo por aí?

"Cada um no seu quadrado, cada um no seu quadrado..."
"Créu, créu, créu, créu, créu, créu, créu, créu..."
Mulheres frutas e o diabo a quatro...

Isso tudo me faz pensar muito se eu quero voltar para o Brasil depois. É um pouco medonha essa situação. Já comentei anteriormente em algum outro post, mas a situação vai de vento em popa a um destino que tenho medo de prever. Isso tudo me faz lembrar de um filme chamado "Idiocracy". Se puderem ver, vejam, pois é mais ou menos o que eu já imaginava e eu fiquei com medo quando vi minha imaginação retratada nesse filme...

Ai, ai, ai... O que será de nosso país daqui a alguns anos?

Quem viver verá.

segunda-feira, 23 de junho de 2008

14 dias sem notícias...

Essas duas últimas semanas foram o ó do borogodó... Pra não falar coisa bem pior... Mas, no fim, tudo se resolve. A gente aí no Brasil costuma dizer q brasileiro deixa tudo pra última hora e tal, mas aqui é o mesmo, ou até pior. A diferença é q, de uma forma geral, as coisas acabam funcionando. Principalmente nas questões burocráticas. Mas, no dia-a-dia, é demais. Aqui as pessoas primam a velocidade, a qualidade ficando em segundo plano. Um trabalho q deveria ser feito por um grupo de várias pessoas, em um período de alguns meses, normalmente é feito por uma ou duas pessoas durante uma semana ou duas. Além disso, ninguém discute. Só se jogam cegamente a fazer o q tem q ser feito, sem pensar bem o q é ou como poderia ser feito de forma mais eficiente. Não há discussões (no sentido positivo). Há o problema que há de ser resolvido. Como? Problema seu! Nesse estilo... É claro que há excessões, mas de uma forma geral, é mais ou menos assim. Principalmente no meu redor. Meu orientador normalmente só desorienta, jogando um monte de coisa em nossas mãos (minhas e do pessoal do Laboratório de Lingüística Computacional). Resultados? Sim, pra ontem. Modo de fazer? Se vira.
Bem, isso é meio um desabafo, mas é também um pensamento de como nós, brasileiros, nos rebaixamos sem muita razão. Sempre pensamos que não somos bons, que as outras culturas, os outros países são melhores... Mas não é bem assim não. O que muda um pouco é que aqui não existe "medo" de trabalhar. A Coréia é um (se não "o") país com a mais longa jornada média de trabalho do mundo, 48 horas semanais. Se isso fosse bem administrado, com uma alta taxa de eficiência, não teria pra ninguém. Mas, o que acontece, na verdade, é que muita gente "passa" muito tempo no local de trabalho, não necessariamente "trabalhando". Só vai fazer o que tem de ser feito mesmo, quando a bunda começa a pegar fogo... hehe
Às vezes, não dá pra entender, mas como "uma andorinha não faz verão", não sou eu que vou mudar a tradicional forma milenar coreana de trabalhar. Eu é que tenho de me adaptar. E assim vamos...
Quanto ao trabalho, acabou dando bons resultados. Principalmente porque eu pensei que não íamos conseguir. Fiz junto com meu colega de lab, o Munhyong, que cuidou da transformação do corpus que possuíamos, marcado morfologicamente, em um corpus marcado semanticamente. Temos esse corpus que faz parte do projeto do Dicionário Eletrônico "Sejong" da Língua Coreana que reúne em um corpus os textos de 4 anos seguidos dos artigos de um jornal daqui da Coréia. Todo esse texto foi analisado morfologica e sintaticamente, primeiro por computador e depois checado manualmente. É um trabalho difícil, já que são uns bons milhões de linhas de texto afinal. Esse era o corpus que precisávamos para nosso experimento. O problema é que, além da marcação morfológico-sintática, necessitávamos tbm de uma marcação semantica, marcando cada sentido diferente das palavras homógrafas, no estilo "manga" de camisa e "manga" de chupar. Tínhamos um corpus com tais marcações, mas o problema é que esse só era marcado sintaticamente. O que fizemos foi unir os dois. Primeiro, é claro, tentamos fazê-lo automaticamente, mas por falta de padronização no formato dos textos, isso mostrou-se só parcialmente efetivo. Então, partimos para a feitura manual do resto que não deu certo... Lembram-se dos milhões de linhas? Pois é... Mas quem acabou pegando isso foi o Munhyong, e eu acabei com o programa para fazer os cálculos.
Pra quem não se lembra, no mês passado, eu estava aprendendo a programar em Python e acabei fazendo tudo em Python mesmo. E no final deu certo mesmo. Nem acredito. É claro que é muito provável que não fiz como deveria ter feito, o programa deve ter ficado feio às vistas de um programador experiente, mas o negócio é que funcionou e eu aprendi muuuuito com isso. Muito mais do que os 3 meses e meio de aulas que tivemos.
Pelo menos pra isso valeu.
Agora, temos que dar uma polida nos resultados e comparar com resultados anteriores de outros trabalhos. A pedido do nosso orientador. Temos até o dia 30 pra apresentar os resultados.
Ah, e o nosso trabalho é sobre "similaridades entre palavras". O computador lê um texto, analisa as relações entre as palavras e decide quais palavras são mais relacionadas em uma escala de 0 a 1, sendo 0 nehuma similaridade e 1 similaridade total, isto é, identidade. Nosso laboratório é o primeiro a fazer isso com a língua coreana e precisamos disso para criar dicionários para ajudar no processamento computacional da língua coreana, em campos como Tradução Automática, Ontologia, Pesquisa Web e Web Semântica, entre outros. Se conseguirmos, nosso trabalho vai facilitar a vida de muita gente que tem de fazer isso manualmente.

Bem por enquanto é só. Depois escrevo mais.

Um abraço pra quem fica.

segunda-feira, 9 de junho de 2008

Novo programa

Pois é. No último post eu estava aprendendo como programar em Python... Agora o negócio é pra valer. Este é o primeiro programa que estamos usando para ler um corpus de quase 200.000 frases e extrair as marcações sintáticas de cada palavra em relação à palavra à qual esta está subordinada. Tipo, no caso de "João viu o macaco", eu tenho que mostrar as informações como viu: sujeito(João), viu: objeto(macaco). Estamos focando em substantivos e verbos. Depois de fazer essa lista, vamos processar um outro corpus que, ao invés de marcações sintáticas, possui marcações semânticas, isto é, diz se "macaco" no caso acima se trata do animal ou da ferramenta usada para trocar pneus de automóveis... Com isso, vamos cruzar as duas informações e procurar por "campos semânticos", isto é, conjunto de palavras que possuem uma certa similaridade e são usadas em determinados contextos, criando um banco de dados que possa vir ser usado no futuro como base de um programa de tradução automática, por exemplo. Por enquanto, ainda está bem cru, mas não parece impossível que cheguemos lá. A propósito, resolvemos fazer juntos esse projeto, eu e o carinha que também trabalha lá no laboratório de lingüística computacional, o Kim Munhyeong. Ah, e outro detalhe, a pesquisa é com um corpus de língua coreana. o.O

Aí vai o leitor/processador do primeiro corpus:
#!/usr/bin/python
#encoding: utf-8
import sys, re, codecs

class ForestWalker:
def __init__(self, file):
self.file = file
def __iter__(self):
return self
def readtree(self):
# read sentence form line
line = self.readline()
tree = Tree(line.split(' ')[0])
# make list of nodes
list_of_nodes = []
line = self.readline()
while (line):
(ord, dep, tag1, tag2, wordform, morph_string) = line.split("\t")
morphs = self.parse_morph_string(morph_string)
word = Word(ord, wordform, morphs, morph_string)
list_of_nodes.append(Node(ord, dep, tag1, tag2, word))
line = self.readline()
# make tree with list of nodes
# set parent-child relations
for n in list_of_nodes:
if n.dep == n.ord:
tree.set_root(n)
else:
p = list_of_nodes[int(n.dep)-1]
n.parent = p
p.add_a_child(n)
tree.nodes = list_of_nodes
return tree
def parse_morph_string(self, morph_string):
morphs = []
m = morph_string
for m in morph_string.split('+'):
m = m.strip()
if m == "" :
pass
else :
if m == "/SW":
form, pos = "+", "SW"
elif m[0:2] == "//":
form, pos = "/", m[2:]
else :
try :
form, pos = m.split("/")
if pos == "" : pos = "_ERR_"
except :
form, pos = m, "_ERR_"
morphs.append(Morph(form,pos))
return morphs
def readline(self):
line = self.file.readline()
# EOF
if (line == '') : sys.exit(0)
return line.strip()
fields = line.strip().split("\t")
if len(fields) == 6 :
return fields
else :
return line.strip()
def next(self):
return self.readtree()

class TreeBank:
pass

class Tree:
def __init__(self, id):
self.id = id
self.nodes = []
self.root = None
self.terminals = []
def set_root(self, node):
self.root = node
def get_terminals(self):
if self.terminals :
pass
else:
for n in self.nodes:
if not n.children :
self.terminals.append(n)
return self.terminals

class Node:
def __init__(self, ord, dep, tag1, tag2, word):
self.parent = None
self.children = []
self.ord = ord
self.dep = dep
self.tag1 = tag1
self.tag2 = tag2
self.form = word.form
self.word = word
def add_a_child(self, node):
self.children.append(node)

class Morph:
def __init__(self, form, pos):
self.form = form
self.pos = pos

class Word:
def __init__(self, ord, form, morphs, morph_string):
self.ord = ord
self.form = form
self.morphs = morphs
self.morph_string = morph_string
def add_morph(self, morph):
self.morphs.append(morph)
def has_pos(self, pos):
for m in self.morphs:
if m.pos == pos :
return True
return False
def __str__(self):
str = ""
for m in self.morphs:
if str == "":
str = m.form
elif m.pos[0] == "S" :
str += m.form
else :
str += "-" + m.form
return str
#return reduce(lambda x,y: x.form+"-"+y.form, self.morphs)

class Encode:
def __init__(self, stdout, enc):
self.stdout = stdout
self.encoding = enc
def write(self, s):
self.stdout.write(s.encode(self.encoding))

def get_output_string1(morphs) :
str = ""
pos_arr = []
morphform_arr = []
for m in morphs:
pos_arr.append(m.pos)
morphform_arr.append(m.form)
str = ''.join(morphform_arr)
return str

def get_output_string2(morphs) :
str = ""
pos_arr = []
morphform_arr = []
for m in morphs:
pos_arr.append(m.pos)
morphform_arr.append(m.form)
str = ''.join(morphform_arr)
return str

def get_verbform(words):
v = re.compile(r".*?/")
w = ''.join(words)
arr = v.findall(w)
str = ''.join(arr)
return str

sys.stdout = Encode(sys.stdout, "utf8")

for s in ForestWalker(codecs.open(sys.argv[1], encoding="utf8")):
for n in s.nodes:
if re.compile(r'[ NV][PSQ]_[^C]').match(n.tag2):
if n.parent:
tg = re.compile('.*?_')
if re.compile(r'N.?').match(n.parent.tag2):
print "%s\t%s\t%sN" % (get_output_string1(n.word.morphs), tg.sub(r'', n.tag2), n.parent.word.morph_string.split(r'/')[0])
elif re.compile(r'V.?').match(n.parent.tag2):
print "%s\t%s\t%sV" % (get_output_string1(n.word.morphs), tg.sub(r'', n.tag2), get_verbform(n.parent.word.morph_string))

Na verdade, o programa em si, são só as últimas linhas. Todas as classes presentes aqui, são de outro projeto chamado KLTK (Korean Language Toolkit), feito por um doutorando daqui. Esse KLTK está sendo feito nos moldes do NLTK (Natural Language Toolkit) para o processamento da língua coreana e do novo dicionário eletrônico que foi feito recentemente, o Grande Dicionário Eletrônico Sejong... Como diria o Thiago, tá mais pra o Milenar Grande Dicionário... hehe

Faltam 2 dias para apresentar o projeto e 8 dias para entregar o paper com tudo bonitinho. Parece que ainda falta um século...

Um abraço pra quem não está ocupado e pra quem está também. ;)

Fui...

segunda-feira, 2 de junho de 2008

Casa nova!

Sábado fez uma semana que eu estou morando na minha casa nova!
É claro que sinto saudade do outro dormitório, dos amigos que deixei por lá, mas minha qualidade de vida por aqui é beeem melhor.
Primeiro: espaço. Aqui é um apartamento mesmo. Tem cara de casa. É grande. Tem lugar pra organizar minhas tralhas todas e ainda sobra espaço. Tem cozinha e banheiro dentro. Tudo o que eu não tinha antes no outro dormitório.
Segundo: novo. O prédio aqui é bem mais novo do que o outro onde morava antes. Os móveis, o piso, as paredes, a geladeira, o fogão... tudo novinho. Dá até gosto.
Terceiro: localização. Dentro da faculdade. Quer melhor que isso? Antes eu demorava mais de uma hora pra chegar no meu departamento. Agora, de 10 a 15 minutos. Além disso, como o campus fica um pouco fora da cidade, a qualidade do ar, a paisagem são bem melhores que antes.
Tenho mais tempo pras minhas coisas, tenho mais tempo pros estudos... Tudo bem melhor... Mas, como não existe nada perfeito, tem um grande "porém": o preço. Aqui tenho que pagar praticamente o triplo do que pagava antes. Vai ficar um pouco mais difícil de juntar dinheiro, mas só pelo conforto e bem-estar, acho que já vale a pena.

Aí vão algumas fotos que tirei no segundo ou terceiro dia que estava por aqui. Alguma coisinha já mudou, mas basicamente é isso aí:











Não é uma belezinha???

Se quiserem me visitar, agora já tenho espaço para hospedar! :)

Pesquisar em blogues de brasileiros na Coreia

Resultado da pesquisa