Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Transliteração como tarefa de ETL usando estágios de InfoSphere DataStage Java e ICU4J

Integrando o módulo de transliteração Java ao estágio Java Transformer do DataStage

Bharath Kumar Devaraju, Software Engineer, IBM
Photograph of author BharathKumar Devaraju
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.

Resumo:  Com a importância crescente para a qualidade dos dados em mercados em crescimento, há uma necessidade imediata de limpar dados sujos, não estruturados. No entanto, um dos desafios durante esse exercício é que os países podem ter vários idiomas, que criam um desafio para a manipulação eficaz de dados linguísticos. Na Índia, por exemplo, o idioma oficial de cada Estado é diferente, e os dados estão disponíveis tanto em inglês como nos idiomas locais, o que agrava o problema da consistência dos dados. Este artigo descreve como obter consistência durante o processo de transliteração e como usar o IBM® InfoSphere® Information Server DataStage® para preparar dados linguísticos como parte de um extrato e, em seguida, transformar e carregar um cenário (ETL).

Data:  11/Jul/2011
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  1016 visualizações
Comentários:  


Introdução

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.

Pré-requisitos

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:

  1. Crie uma tarefa paralela no designer DataStage.
  2. 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.
  3. 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


  4. 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 propriedadeValores 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.


Condições excepcionais

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 tr4j do DataStage fornece funções que facilitam a depuração ao registrar mensagens no diretório do DataStage. Por exemplo, error() e info().

Conclusão

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.


Recursos

Aprender

Obter produtos e tecnologias

Discutir

Sobre o autor

Photograph of author BharathKumar Devaraju

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.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management, Software livre, Tecnologia Java
ArticleID=715601
ArticleTitle=Transliteração como tarefa de ETL usando estágios de InfoSphere DataStage Java e ICU4J
publish-date=07112011
author1-email=bhdevara@in.ibm.com
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).