Contenido


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

Comments

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
    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
    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
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 para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

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