Automatic conversion between simplified and traditional Chinese/pt

From Meta, a Wikimedia project coordination wiki

Esta página descreve o mecanismo de conversão entre do sistemas de escrita implementado atualmente na Wikipédia chinesa (zh). O mecanismo tem estado em uso desde 23 de dezembro de 2004[1] e em geral tem sido bem aceito pela comunidade chinesa. Houve interesse em implementar mecanismos parecidos em outros idiomas, e espera-se que esta página possa fornecer alguma indicação de uma abordagem para utilizar a infraestrutura que já foi desenvolvida no sistema de conversão chinês.

Para um ensaio expondo alguns dos problemas com o atual sistema de conversão, consulte «Problemas com a tradução no MediaWiki de chinês para chinês no lado do servidor (em inglês).»

Em adição à Wikipédia chinesa, o Wikcionário, o Wikiquote e o Wikilivros chineses utilizam o mesmo sistema. Quando o Wikisource multilingual hospedava textos em todos os idiomas sem usar o sistema chinês, houve problemas em relação a como tratar o chinês simplificado e o chinês tradicional. No entanto, uma vez que o Wikisource chinês foi aberto em 2005, com a tendência de abertura de subdomínios específicos para os idiomas, o problema foi resolvido.

Sites multilinguais tais como o Meta, o Wikimedia Commons, e o Wikisource multilingual não possuem conversão automática entre o chinês simplificado e o chinês tradicional. Além disso, o Wikisource multilingual não aceita mais textos em chinês, e deste modo eles devem ser enviados para o Wikisource chinês.

Motivação[edit]

Atualmente os a comunidade chinesa utilizam dois sistemas de escrita - o simplificado e o tradicional. Os caracteres do chinês tradicional são usados principalmente na república da China (Taiwan), Hong Kong, Macau, e entre a diáspora na América do Norte. O chinês simplificado é usado na China continental e em Singapura. O chinês escrito na Malásia, apesar de não haver um estatuto oficial, geralmente também é simplificado.

Exemplos de diferenças entre os sistemas de escrita chineses
Tradicional Simplificado

A conversão automática entre as duas formas é crítica para o futuro da Wikipédia chinesa. Ferramentas atuais de conversão como libiconv convertem caracteres entre duas codificações diferentes (GB e BIG5), mas no caso do chinês o mapeamento é entre caracteres do conjunto do Unicode, que inclui tanto caracteres do chinês simplificado e tradicional.

Para a maioria dos caracteres do chinês simplificado e tradicional, há uma correspondência biunívoca, mas ainda há cerca de 100 pares de caracteres do chinês tradicional e do simplificado que não se correspondem um a um. Além disso, devido à inexistência de espaço entre duas palavras adjacentes em uma frase em chinês, a interpretação do código torna-se mais complexa. Uma conversão completamente automática exigiria recursos de inteligência artificial, e seria difícil. Em vez disso, foi possível introduzir um novo tipo de marcação para resolver o problema.

Descrição Técnica[edit]

Conversão[edit]

O conversor implementado na Wikipédia chinesa é bastante simples, sem empregar recursos extravagantes de inteligência artificial (IA). Em vez disso, ele explora a natureza wiki da Wikipédia e dos projetos correlatos para a construção de conhecimento coletivo, como discutido posteriormente.

A conversão acontece quando uma página é renderizada. Ela não detecta em que variante a página está escrita. De fato, uma página pode ser escrita em uma mistura de variantes.

Atualmente são suportadas sete variantes do idioma chinês:

  • zh (sem conversão)
  • zh-hans (simplificado genérico)
  • zh-hant (tradicional genérico)
  • zh-cn (China continental; simplificado)
  • zh-tw (Taiwan; tradicional)
  • zh-hk (Hong Kong e Macau; tradicional)
  • zh-sg (Singapura e Malásia; simplificado)

Assim, o sistema mantém quatro tabelas de conversão, uma para cada variante. A tabela de conversão consiste em regras de mapeamento simples. Por exemplo, na tabela zh-hans, pode haver uma regra:


Esta regra diz que ao exibir em zh-hans, o caractere (que significa país), que está escrito na forma tradicional, deve ser convertido para , seu correspondente na escrita simplificada. Para acomodar usos diferentes do mesmo conceito em variantes distintas do chinês, a tabela também permite regras parra converter frases, como por exemplo:

电脑计算机

Esta regra diz que ao exibir em zh-cn, qualquer ocorrência da frase 电脑, a tradução comum de "computador", ou literalmente "cérebro eletrônico" em Taiwan e Hong Kong, deve ser convertida para 计算机, ou "dispositivo de armazenamento e contagem", que é a tradução comumente usada na China Continental.

As tabelas de conversão inicial foram criadas de forma semi-automatizada. O banco de dados Unihan é usado para criar correspondências entre caracteres do chinês simplificado e do chinês tradicional. Três dicionários de frases empacotados com SCIM e libtabe foram usados para criar as tabelas iniciais de mapeamento de frases.

Usando esta abordagem, algumas frases que nunca devem ser convertidas podem ser especificadas usando também a tabela personalizável, através do mapeamento das palavras para si mesmas. Por exemplo:

电脑电脑

Isso evitará que a frase 电脑 seja convertida.

Estas regras são armazenadas em uma matriz associativa. A conversão é feita com a função PHP strtr(). Isso causa problemas relacionados a segmentação ambígua de palavras no idioma chinês, que atualmente não é tratada pelo sistema.

O código da implementação destas funções estão disponíveis em trunk/phase3/includes/ZhConversion.php e trunk/phase3/languages/ do SVN do MediaWiki.

Tabelas de conversão[edit]

A abordagem acima depende obviamente da precisão e completude das tabelas de conversão. Infelizmente, não há tabelas de conversão padronizadas disponíveis em geral que sejam precisas ou completas. Desde modo, a decisão foi tomada na comunidade da Wikipédia chinesa para fornecer um sistema que permitisse aos usuários a modificação das tabelas de conversão, e tal sistema foi implementado posteriormente. As tabelas personalizáveis de conversão são armazenadas na forma de uma página wiki normal do espaço nominal MediaWiki, em um formato simples que permite que sejam definidas as regras de conversão.

Há atualmente na comunidade uma política vigente para que qualquer usuário regular possa propor alterações às tabelas de conversão personalizáveis, e os administradores podem editar as páginas wiki correspondentes para implementar as alterações.

Links (ligações) para as tabelas de conversão:

Criação de links internos (ligações internas)[edit]

Um problema comum na Wikipédia chinesa é que o título de um artigo pode ser renderizado de forma diferente sob diferentes variantes do idioma, podendo causar confusão ao criar links (ligações) para artigos conforme as variantes de usuários diferentes. A implementação atual tenta localizar links em outras variantes. Assim, por exemplo, uma palavra "abc" em zh-cn é equivalente a uma outra palavra "xyz" em zh-tw. Se alguém escreve um artigo chamado "Abc", os usuários que escolhem zh-tw verão o título "Xyz" quando o artigo for renderizado. Além disso, quando um usuário "zh-tw" escreve um link [[xyz]], ele será ligado ao artigo "Abc" automaticamente.

Marcação manual[edit]

Algumas vezes uma regra de conversão é usada em situações raras. Colocar tais regras nas tabelas personalizáveis gera um custo desnecessário durante o processamento de outras páginas. Por este motivo, foi implementada uma marcação manual para permitir que regras de conversão fossem especificadas manualmente no código wik. A sintaxe geral da marcação é a seguinte:

-{código do idioma 1:texto 1; código do idioma 2:texto 2; ...:...}-

Por exemplo:

-{zh-cn:计算机; zh-tw:电脑}-

Esta marcação também pode ser utilizada para especificar que determinado texto não deve sofrer qualquer conversão, bastando não indicar qualquer código de idioma:

-{texto que não deve sofrer conversão de uma variante para a outra}-

Uma regra de conversão pode ser declarada de modo que se aplique ao artigo como um todo, usando a seguinte sintaxe:

-{A| zh-cn:xyzw; zh-tw:abcd}-

Quaisquer "xyzw" ou "abcd" no restante do texto serão convertidos de acordo com esta regra (isso está no CVS HEAD mas não no 1.4 por enquanto).

Os títulos dos artigos podem ser convertidos manualmente, especificando-se uma regra de conversão no corpo do artigo com a seguinte marcação:

-{T| zh-cn:xyzw; zh-tw:abcd}-

Quando o artigo é exibido, um usuário zh-cn verá "xyzw" no título do artigo, enquanto um usuário zh-tw verá "abcd".

Além disso, esta marcação pode ser usada para converter para um título específico, independentemente de qualquer variante, através da sintaxe abaixo:

-{T|xyzw}-

Isso é útil quando o título está em um idioma e a primeira letra do artigo não está em maiúsculas.

Também foram introduzidas duas palavras mágicas para evitar a conversão automática do título ou do texto de um artigo:

  • __NOTC__: impede que o título do artigo seja convertido automaticamente.
  • __NOCC__: impede que o artigo como um todo seja convertido automaticamente.

Implementando sistemas de conversão semelhantes para outros idiomas[edit]

No MediaWiki 1.4[edit]

A maioria das funções relacionadas com a conversão são implementadas no objeto Language. No caso do idioma chinês, isso acontece no arquivo LanguageZh.php. No mínimo, o objeto Language deve sobrescrever os seguintes métodos para oferecer suporte à diversas variantes:

  • getVariants
function getVariants() {
        return array('zh', 'zh-cn', 'zh-tw', 'zh-sg', 'zh-hk');
}

Esta função retorna uma matriz com as variantes do idioma que são suportadas, Deve existar arquvos Language para cada uma de tais variantes.

  • getPreferredVariant()
function getPreferredVariant()

Esta função deve retornar a variante escolhida por um usuário.

  • convert()
function convert( $text, $isTitle=false )

Esta função implementa a conversão do texto propriamente dita. O parâmetro isTitle indica quando o texto de entrada é o título do artigo. No idioma chinês, alguns títulos são convertidos de forma um pouco diferente. Esta função é chamada perto do fim do interpretador (Parser.php). Qualquer coisa que é interpretada por ele será convertida. Note que a interpretação da marcação manual também é feita por esta função. Isto provavelmente deve ser separado de modo que outros idiomas também possam reutilizá-lo facilmente.

  • getExtraHashOptions()
function  getExtraHashOptions() {
        $variant = $this->getPreferredVariant();
        return '!' . $variant ;	   
}

Esta função retorna uma string com a variante preferida pelo usuário. Ela é usada para criar um cache.

Note que algumas destas funções não são específicas para o idioma chinês, por exemplo getExtraHashOptions() e getPreferredVariant(), e o código para a interpretação da marcação manual existente na convert(). Algum remanejamento pode ser feito se e quando houver necessidade de implementar conversores para outros idiomas.

O código que oferece o suporte às tabelas de conversão está um pouco bagunçado no momento. Está sendo feita alguma limpeza no código e seu uso poderá ser atualizado aqui em breve.

No MediaWiki 1.5[edit]

(Todos os links estão quebrados no momento)

A versão 1.5 do MediaWiki que está para chegar incluirá um objeto LanguageConverter que encapsulará a maior parte das funcionalidades relacionadas à conversão. Tem-se trabalho intensivamente em um conversor para o idioma sérvio, e um site para testes preliminares está online e em execução no seguinte endereço:

Também há um site de teste que suporta a conversão para a língua inglesa, apenas por diversão, aqui:

Ver também[edit]

Links de referência - Em chinês[edit]