Transliteración como un trabajo de ETL usando etapas Java de InfoSphere DataStage y ICU4J

Integrando el módulo de transliteración Java con la etapa de transformador Java de DataStage

Con la siempre creciente importancia de la calidad de los datos en los mercados en crecimiento, existe una necesidad inmediata de limpiar los datos sucios y sin estructura. Sin embargo, uno de los retos durante este ejercicio es que los países pueden tener varios idiomas que crean un reto para manejar efectivamente los datos lingüísticos. Por ejemplo, en la India, el idioma oficial de cada estado es distinto y los datos están disponibles tanto en inglés como en los idiomas locales, lo que agrava el problema de la consistencia de datos. Este artículo describe cómo tener consistencia durante el proceso de transliteración, y usar IBM® InfoSphere® Information Server DataStage® para preparar datos lingüísticos como parte de un extracto, después transformar y cargar un escenario (ETL).

Bharath Kumar Devaraju, Software Engineer, IBM China

Photograph of author BharathKumar DevarajuBharath Kumar Devaraju ha trabajado con IBM desde 2009 y actualmente está trabajando en los datos como un servicio como parte de la iniciativa de computación en nube de IBM. También es desarrollador de soluciones certificado de QualityStage. Ha trabajado extensamente en POCs de clientes y ayuda en actividades de preventas para mercados en crecimiento.


Nivel de autor contribuyente en developerWorks

15-08-2011

Introducción

En una región de mercado en crecimiento, el primer reto que cualquier proveedor de limpieza o proveedor de soluciones encuentra es la inconsistencia en dialectos y lingüística de los datos disponibles. El primer paso que debe realizar es la transliteración para tener consistencia en los datos antes de proceder con las actividades de limpieza de datos. La cantidad de datos que están involucrados en una solución de limpieza es normalmente grande, por lo que un ejercicio como este es llevado a cabo normalmente durante los proyectos de depósito de datos, y es mejor utilizado durante una operación de ETL. IBM DataStage ofrece varias etapas de Java™ y la biblioteca tr4j para ayudar en el desarrollo e integración de programas Java con trabajos de ETL. La biblioteca tr4j viene en un paquete con el instalador de DataStage.

La biblioteca ICU4J (International Components for Unicode) es una biblioteca de código abierto para Java, ampliamente usada por diversos proveedores de software para proporcionar soporte de globalización y unicode.

Este artículo muestra los pasos para desarrollar el programa Java de transliteración usando bibliotecas icu4j y tr4j, e integrarlo con el transformador Java de DataStage.

Prerrequisitos

Para seguir las instrucciones en este artículo, necesitará el siguiente software:

  • InfoSphere DataStage e Information Services Director (ISD) 8.5
  • ICU4J (vea la sección Recursos para obtener un enlace)

Además, necesitará tener habilidades básicas sobre el diseño y ejecución de trabajos de ETL desde el diseñador DataStage, así como habilidades de nivel intermedio en programación Java. El archivo de entrada debe ser codificado en formato UTF-8 o UTF-16.


Diseñando un trabajo de ETL usando la etapa de transformador Java

El primer paso es diseñar un trabajo de ETL que lea la entrada de un archivo de origen y tenga una etapa de transformador Java para realizar las transformaciones. El destino puede ser un archivo, una base de datos o cualquier otro paso de procesamiento.

Realice los siguientes pasos para diseñar el trabajo:

  1. Cree un nuevo trabajo paralelo en el diseñador DataStage.
  2. En la paleta, elija las etapas de trabajo requeridas. Por ejemplo, un archivo secuencial como origen y como destino, y la etapa de transformador Java.
  3. Para la etapa del archivo de entrada, configure los metadatos y la ubicación del archivo de origen. Haga doble clic en la etapa de archivo, y en la pestaña Stage elija NLS map. Aquí también debe elegir el tipo de codificación para el archivo de entrada. Para este ejemplo, elija UTF-8 como se muestra en la Figura 1.
    Figura 1. Especificando el tipo de codificación del archivo de entrada
    Especificando el tipo de codificación del archivo de entrada
  4. Repita estos pasos para la etapa del archivo de salida. Al final su trabajo deberá verse como en la Figura 2.
    Figura 2. Diseño de trabajo de ETL de transliteración
    Diseño de trabajo de ETL de transliteración

Programa de Java para realizar la transliteración usando las bibliotecas ICU4J y tr4j

Icu4j proporciona un conjunto de clases que dan soporte de regionalización. Las clases principales que soportan posibilidades de transliteración son Transliterator y Normalizer. Más adelante hay información sobre estas clases.

  • Transliterator: esta clase proporciona una función transliterate() que puede convertir la cadena de caracteres de un lenguaje de script a otro. La función de transliteración no tiene estado y por lo tanto no retiene información de llamadas previas. Antes de usar la función transliterate(), debe inicializar la instancia Transliterator al proporcionarle el lenguaje de origen y el lenguaje de destino requeridos, separados por un guión (-). Por ejemplo: Transliterator.getInstance("Hindi-Latin");
  • Normalizer: esta clase proporciona funciones para normalizar la salida de la función de transliteración en forma compuesta o descompuesta. Por ejemplo, caracteres latinos tales como A-acute son normalizados a una (A) en formato compuesto, o a doble (AA) en forma descompuesta.

Para que un programa Java sea incorporado en las etapas de Java de DataStage, debe estar en el formato especificado en el Listado 1. La función de proceso debe contener toda la lógica de procesamiento que debe ser realizada por la etapa de Java.

Listado 1. Formato para que el programa de Java sea incorporado en la etapa de transformador Java
public class <classname> extends Stage{
	  public void initialize()    {
	        trace("TableSource.initialize");
	       
	    }

	    public void terminate()    {
	        trace("TableSource.terminate");
	    }
    public int process()    {
				.....
		}
		}

El Listado 2 muestra el programa de muestra para realizar la transliteración usando las bibliotecas icu4j y tr4j. Este código de muestra presenta esa entrada en todos los lenguajes en que está siendo transliterada al alfabeto latino y normalizada. Las filas de entrada son leídas en formato UTF-8.

Listado 2. Operación real de transliteración escrita dentro de la función de proceso
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 el programa Java con la etapa de transformador Java del Trabajo de ETL

En la página de propiedades de la etapa de transformador Java, proporcione los detalles mostrados en la Tabla 1.


Diversas propiedades de la etapa de transformador Java a ser establecidas

Nombre de la propiedadValores a ser insertados
ClasspathMencionar la vía de acceso de las entradas de icu4j jar
Especificar la ruta de acceso de la cartea que contiene el paquete de Programas Java implementado en el ejemplo anterior es /opt
Nombre de clase de transformadorProporcionar el nombre de clase del programa Java de transliteración

La Figura 3 muestra la pantalla donde estas propiedades son establecidas.

Figura 3. Página de propiedades de la Etapa de Transformador Java
Página de propiedades de la Etapa de Transformador Java

Después de este paso, ya está listo para lanzar su trabajo de ETL de transliteración. Compile y ejecute el trabajo. También puede usar la salida del trabajo como entrada para las operaciones de limpieza.


Condiciones de excepción

Tenga en cuenta las siguientes condiciones de excepción que pueden ocurrir:

  • Si se completa el trabajo, pero el archivo de salida no contiene la salida transliterada, verifique si el archivo de entrada fue salvado como algo distinto a la codificación UTF, por ejemplo UCS. De ser así, entonces use el editor apropiado y cambie la codificación del archivo de entrada.
  • La biblioteca tr4j de DataStage proporciona funciones que facilitan la depuración al registrar mensajes en el director de DataStage. Por ejemplo, error() e info().

Conclusión

Este artículo atendió la pregunta de cómo realizar la transliteración usando la biblioteca ICU4J y los diversos valores de configuración que debe realizar. Le ha mostrado cómo conseguir la transliteración usando InfoSphere Information Server DataStage. La transliteración servirá como un componente clave para resolver varios retos de lingüística, y proporciona una base común para que construya un conjunto de normas de estandarización con previsibilidad. Por lo tanto, este artículo le ha mostrado a resolver sus retos de transliteración usando Information Server DataStage.

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt, tecnologia Java
ArticleID=964825
ArticleTitle=Transliteración como un trabajo de ETL usando etapas Java de InfoSphere DataStage y ICU4J
publish-date=08152011