Em uma região de crescimento do mercado, o primeiro desafio que qualquer fornecedor ou prestador de solução de limpeza encontra é a inconsistência em dialetos e na linguística dos dados disponíveis. A primeira etapa que se deve realizar para obter consistência de dados antes de prosseguir com as atividades de limpeza de dados é a transliteração. A quantidade de dados envolvida em uma solução de limpeza geralmente é grande, por isso, esse tipo de exercício normalmente é realizado durante projetos de armazém de dados, e é mais bem usado durante uma operação de ETL. O IBM DataStage oferece diversos estágios Java™ e a biblioteca tr4j para ajudar no desenvolvimento e integração de programas Java a tarefas ETL. A biblioteca tr4j vem em um pacote configurável com o instalador do DataStage.
A biblioteca ICU4J (International Components for Unicode) é uma biblioteca de software livre para Java, amplamente utilizada por vários fornecedores de software para fornecer suporte a globalização e a Unicode.
Este artigo mostra as etapas para o desenvolvimento do programa em Java de transliteração usando as bibliotecas icu4j e tr4j , e como integrá-las no estágio Java Transformer do DataStage.
Para acompanhar as instruções deste artigo, são necessários os seguintes softwares:
- InfoSphere DataStage e Information Services Director (ISD) 8.5
- ICU4J (consulte a seção Recursos para obter um link)
Além disso, é necessário ter habilidades de nível básico no projeto e na execução de tarefas ETL para o designer DataStage, bem como de nível intermediário em programação Java. O arquivo de entrada deve ser codificado em formato UTF-8 ou UTF-16.
Projetando uma tarefa ETL usando o estágio Java Transformer
A primeira etapa consiste em projetar uma tarefa ETL que leia a entrada de um arquivo de origem, e fazer com que um estágio Java Transformer execute as transformações. O destino pode ser um arquivo, um banco de dados ou qualquer outra etapa de processamento.
Execute as seguintes etapas para projetar a tarefa:
- Crie uma tarefa paralela no designer DataStage.
- Na paleta, escolha as etapas necessárias para a tarefa. Por exemplo, um arquivo sequencial como origem e destino, e o estágio Java Transformer.
- Para o estágio de arquivo de entrada, configure os metadados e a localização do arquivo de origem. Dê um clique duplo no estágio de arquivo e, na guia Stage escolha NLS map. Ali, também é necessário escolher o tipo de codificação para o arquivo de entrada. Para esse exemplo, escolha UTF-8 como mostrado na Figura 1.
Figura 1. Especificando o tipo de codificação do arquivo de entrada
- Repita essas etapas para o estágio do arquivo de saída. No fim, sua tarefa deve ser parecida à Figura 2.
Figura 2. Projeto de tarefa ETL de transliteração
Programa Java para executar a transliteração usando as bibliotecas ICU4J e tr4j
Icu4j fornece um conjunto de classes que proporciona suporte à regionalização. As principais classes que suportam recursos de transliteração são Transliterator e Normalizer. Veja abaixo mais informações sobre essas classes.
- Transliterator: Essa classe fornece uma função transliterate() capaz de converter a cadeia de caractere de um script de idioma em outro. A função transliterate é stateless e, assim, não retém informações de chamadas anteriores. Antes de usar a função transliterate(), é necessário inicializar a instância Transliterator fornecendo-lhe o idioma de origem e de destino necessários, separados por traço (-). Por exemplo:
Transliterator.getInstance("Hindi-Latin"); - Normalizer: Essa classe fornece funções para normalizar a saída da função de transliteração em forma composta ou decomposta. Por exemplo, os caracteres latinos como Á são normalizados como um único A) no formato composto ou AA) duplo em forma decomposta.
Para que um programa Java seja integrado aos estágios Java do DataStage, ele deve estar no formato especificado na Listagem 1. A função de processo deve conter toda a lógica de processamento a ser executada pelo estágio Java.
Lista 1. Formato para um programa Java ser integrado ao estágio Java Transformer
public class <classname> extends Stage{
public void initialize() {
trace("TableSource.initialize");
}
public void terminate() {
trace("TableSource.terminate");
}
public int process() {
.....
}
}
|
A Listagem 2 mostra o programa de amostra para a realização de transliteração usando as bibliotecas icu4j e tr4j
. Esse código de amostra demonstra que a entrada em qualquer idioma é transliterada para o alfabeto latino e normalizada. As linhas de entrada são lidas em formato UTF-8.
Lista 2. Operação real de transliteração escrita dentro da função de processo
public String toBaseCharacters(final String sText) {
if (sText == null || sText.length() == 0)
return sText;
final char[] chars = sText.toCharArray();
final int iSize = chars.length;
final StringBuilder sb = new StringBuilder(iSize);
for (int i = 0; i < iSize; i++) {
String sLetter = new String(new char[] { chars[i] });
sLetter = Normalizer.normalize(sLetter, Normalizer.NFKD);
try {
byte[] bLetter = sLetter.getBytes("UTF-8");
sb.append((char) bLetter[0]);
} catch (UnsupportedEncodingException e) {
}
}
return sb.toString();
}
public int process() {
try {
// do {
Transliterator t=Transliterator.getInstance("Any-Latin");
Row inputRow = readRow();
if (inputRow == null) {
return OUTPUT_STATUS_END_OF_DATA;
}
boolean reject = false;
int columnCount = inputRow.getColumnCount();
Row outputRow = createOutputRow();
for (int columnNumber = 0; columnNumber < columnCount; columnNumber++)
{
String value = inputRow.getValueAsString(columnNumber,"UTF-8");
if ((value == null) || (value.indexOf('*') >= 0)) {
reject = true;
outputRow.setValueAsString(columnNumber, value);
} else {
outputRow.setValueAsString(
columnNumber,toBaseCharacters(
t.transliterate(value)));
}
}
if (reject) {
rejectRow(outputRow);
} else {
writeRow(outputRow);
}
......
|
Integrando o programa Java ao estágio Java Transformer da tarefa ETL
Na página de propriedades do estágio Java Transformer, forneça os detalhes mostrados na Tabela 1.
Tablela 1. Várias propriedades do estágio Java Transformer que devem ser configuradas
| Nome da propriedade | Valores a serem inseridos |
|---|---|
| Caminho de classe | Mencione o caminho das entradas do arquivo jar icu4j |
| Especifique o caminho da pasta que contém o pacote Java Programs implementado no exemplo acima é /opt | |
| Nome de classe Transformer | Forneça o nome de classe do programa Java de transliteração |
A Figura 3 mostra a tela onde essas propriedades são configuradas.
Figura 3. Página de propriedades do estágio Java Transformer
Após essa etapa você está pronto para lançar sua tarefa ETL de transliteração. Compile e execute a tarefa. Também é possível usar a saída da tarefa como entrada para operações de limpeza.
Esteja atento às seguintes condições excepcionais que podem ocorrer:
- Se a tarefa for concluída, mas o arquivo de saída não contiver a saída transliterada, verifique se o arquivo de entrada foi salvo como algo diferente da codificação UTF, por exemplo, UCS. Caso contrário, use um editor adequado e mude a codificação do arquivo de entrada.
- A biblioteca
tr4jdo DataStage fornece funções que facilitam a depuração ao registrar mensagens no diretório do DataStage. Por exemplo,error()einfo().
Este artigo tratou da questão de como executar a transliteração usando a biblioteca ICU4J e os vários ajustes de configuração que devem ser executados. Ele mostrou como obter a transliteração usando o InfoSphere Information Server DataStage.
A transliteração serve como componente-chave para resolver vários desafios linguísticos e fornece uma base comum para desenvolver um conjunto de regra de padronização com previsibilidade. Assim, este artigo mostrou como resolver desafios de transliteração usando o Information Server DataStage.
Aprender
- Saiba mais sobre a biblioteca ICU e ICU4J na página inicial de ICU.
- Obtenha mais informações sobre DataStage no IBM Redbook® IBM
InfoSphere DataStage Data Flow and Job Design.
- Obtenha os recursos necessários na área de Information Management no developerWorks, para melhorar suas habilidades em uma grande variedade de produtos do IBM Information Management.
- Visite a área do InfoSphere
no developerWorks para ler artigos e tutoriais, acessar fóruns e documentação, e se conectar a outros recursos com a finalidade de expandir suas habilidades em InfoSphere.
- Saiba mais sobre Information Management na zona de Information Management no developerWorks. Encontre documentação técnica, artigos de instruções, treinamento, downloads, informações de produtos, e muito mais.
- Siga o DeveloperWorks no Twitter.
- Acompanhe Demos on demand do developerWorks
que abrangem desde demos de instalação e configuração de produtos para iniciantes até funcionalidade avançada para desenvolvedores experientes.
Obter produtos e tecnologias
- Encontre novas versões prontas para download na seção de downloads do site de ICU.
- Aprenda a usar o InfoSphere DataStage and InfoSphere QualityStage on the Amazon EC2
Web Service.
- Crie seu próximo projeto de desenvolvimento com a versão de testes do software IBM, disponível para download diretamente no developerWorks, ou passe algumas horas no SOA Sandbox , aprendendo a implementar de forma eficiente a Arquitetura Orientada a Serviços.
Discutir
- Participar do fórum de discussão.
- Confira o blogs do developerWorks e participe da comunidade do developerWorks.

Bharath Kumar Devaraju trabalha com a IBM desde 2009, e atualmente trabalha em dados como serviço, como parte da iniciativa de computação em nuvem da IBM. Ele também é desenvolvedor de soluções com certificação QualityStage. Ele já trabalhou extensivamente em POCs de cliente e auxilia em atividades pré-venda para mercados em crescimento.