Desde que foi inicialmente criado, o Pagestacker sempre teve interfaces em português e em inglês (mas ainda não é isso que faz dele poliglota).

Quando estávamos perto de começar o nosso trabalho no Pagestacker, ficamos sabendo de um torneio mundial de programação em que os participantes tinham que construir um aplicativo web do zero em exatamente 48 horas.

Achamos que seria uma boa idéia participar e, de fato, dentre cerca de 200 projetos concorrentes, chegamos muito perto de vencer, tendo recebido uma vasta votação do público e uma menção honrosa ao seu final.

O torneio se chama Rails Rumble e a sua edição seguinte começou neste último final de semana.

Como o idioma oficial do torneio é o inglês, o aplicativo precisava ter interfaces nesse idioma.

Você pode ver abaixo um vídeo, em inglês, com a demonstração dessa primeira versão do Pagestacker (a criação deste vídeo fazia parte dos requisitos da competição) e notar o quanto nós evoluímos desde então, apesar de a maior evolução ter ocorrido mesmo na arquitetura e nos componentes de sistema que ficam “sob o capô” do aplicativo.

httpv://www.youtube.com/watch?v=NRR-XegqI50

Por outro lado, como desenvolvedores brasileiros, não queríamos construir um software cuja interface não estivesse disponível também em português (não havia restrições quanto a isso) e foi assim que o Pagestacker ganhou telas em dois idiomas.

Mas, como eu disse, ainda não é isso que faz do Pagestacker poliglota…

O Desafio

Nossa interface em inglês e o destaque internacional (ainda que breve) decorrente do nosso resultado no Rails Rumble nos trouxeram uma ativa comunidade de usuários estrangeiros, principalmente nos Estados Unidos e na Índia.

Por causa disso, os resultados do nosso mecanismo de busca e os rankings de páginas e de sites mais populares no Pagestacker quase sempre mostravam links de diferentes idiomas na mesma tela, independentemente do idioma de interface escolhido pelo usuário.

Nossos usuários nos avisaram de que isso era um grande incômodo para eles (mesmo para os que falam bem os dois idiomas) e decidimos tomar uma providência.

Aprendendo a falar vários idiomas

Em nossa pesquisa por métodos de detecção automática de idiomas, encontramos alguns modelos interessantes (como o de bloom filters), mas nenhum deles atingia resultados completamente satisfatórios para nós.

Finalmente, descobrimos o método estatístico das n-grams através do artigo científico abaixo:
“N-Gram Bases Text Categorization”, William B. Cavnar and John M. Trenkle (PDF Download)

Em seguida, procuramos por implementações desse método em software de código aberto (reuso de código é uma virtude).

Encontramos implementações em Perl e em C e fizemos testes de benchmark com elas. A primeira era até bem feita e tinha um índice de acerto razoável, mas era muito lenta. A segunda tinha uma boa performance, mas o algoritmo não estava bem implementado e por isso seus resultados deixavam a desejar.

Inconformados mas decididos, fizemos a nossa própria implementação. Para isso, usamos a linguagem Ruby (já que boa parte do Pagestacker é feita com o framework Ruby on Rails).

Resultados

Nossa implementação não só superou as demais nos mesmos testes de benchmark que tínhamos feito antes, tanto em performance como em taxa de acerto, como na verdade chegou a taxas de acerto muito próximas de 100%.

Alguns exemplos de resultados de testes abaixo:

>> "je suis an ingénieur".lang
=> [:fr] Francês
 
>> "お元気ですか".lang
=> [:ja] Japonês
 
>> "您好吗".lang
=> [:zh] Chinês
 
>> "idziemy".lang
=> [:pl] Polonês
 
>> "olla mundo".lang
=> [:es, :it] Espanhol, Italiano

No Pagestacker

Ao acessar o Pagestacker pela primeira vez, o idioma da interface que o usuário vê é definido pela sua localização geográfica.

Esse idioma pode ser facilmente alterado pelo usuário, se assim ele quiser, como indicado na imagem abaixo:

Além disso, durante o processo de criação da sua conta no Pagestacker, o usuário pode escolher o idioma da interface que quer ver quando estiver logado.

Daí em diante, sempre que o usuário voltar ao Pagestacker, o idioma da interface será aquele em uso na sua última visita (tenha ele criado uma conta, feito login ou nenhuma das duas ações).

Quanto ao idioma das páginas nos resultados de busca e nos rankings de páginas e de sites, ele é, a princípio, o mesmo idioma da interface. No entanto, o usuário pode expandir essa opção para incluir as páginas de todos os idiomas, como visto na figura abaixo:

Assim, sempre que o usuário desejar ver apenas as páginas em um dado idioma específico, ele só precisa mudar o idioma da interface tal como indicado na primeira das imagens.

No momento, apesar de já conseguirmos fazer a identificação automática de dezenas de idiomas, oferecemos interfaces apenas em Português e em Inglês.

Interfaces em mais idiomas estão a caminho. =D

Como o Google faz

Fizemos todo esse trabalho no Pagestacker de forma completamente independente e empírica, sem referências externas iniciais.

Pouco tempo depois de colocarmos esses resultados no ar, estivemos no evento do Google para webmasters, o Google Search Masters 2008, aqui mesmo em São Paulo.

Foi interessante descobrir durante uma das apresentações que a análise estatística com n-grams é utilizada também pelo Google e não só em seus serviços de tradução automática como também em outras funções como sugestão de correções ortográficas em termos de busca (aquele famoso “Você quis dizer:”) e reconhecimento de comandos de voz.

http://googleresearch.blogspot.com/2006/08/all-our-n-gram-are-belong-to-you.html

Posteriormente, descobrimos que as n-grams são ainda empregadas em outras áreas como em seqüenciamento genômico.

Concluindo

Este post acabou ficando mais longo do que eu gostaria, mas não mais que o mínimo necessário para fazer justiça a mais essa “aventura” que tive a oportunidade de vivenciar no dia-a-dia do Pagestacker.

Acredito que isso ilustra bem os tipos de problemas com que nos deparamos e nossa forma de trabalho para resolvê-los.

Nossa preocupação número 1 é sempre a qualidade da experiência de uso do nosso aplicativo e não medimos esforços para maximizá-la a fim de tornar o Pagestacker útil e relevante para todos os usuários.

Nossa equipe ainda é pequena e por isso ainda não pudemos fazer tudo aquilo que temos em nossa lista de prioridades nesse sentido, mas estamos avançando de forma sistemática e constante.

Não sabemos de tudo, mas abordamos os problemas de uma forma empírica que freqüentemente tem nos levado a boas soluções (não raramente as melhores possíveis), como no exemplo acima.

Por fim, se você se identifica com esse tipo de rotina e essa forma de trabalho, pode me procurar. =D

O escopo do que fazemos envolve não apenas software, mas também hardware, network, estatística, matemática e usabilidade.

Estamos à procura de engenheiros (e de programadores, designers, estatísticos, matemáticos e cientistas da computação) com esse perfil para nos ajudar em nossa missão com o Pagestacker.

Ainda somos um time de apenas 5 pessoas. Estamos só começando. =D

Tags: , , ,