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.
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:
- Cree un nuevo trabajo paralelo en el diseñador DataStage.
- 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.
- 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
- 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
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.
Tabla 1. Diversas propiedades de la etapa de transformador Java a ser establecidas
| Nombre de la propiedad | Valores a ser insertados |
|---|---|
| Classpath | Mencionar 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 transformador | Proporcionar 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
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.
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
tr4jde DataStage proporciona funciones que facilitan la depuración al registrar mensajes en el director de DataStage. Por ejemplo,error()einfo().
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.
Aprender
- Aprenda más sobre la biblioteca ICU e ICU4J en la página de inicio de ICU.
- Obtenga más información sobre DataStage en la publicación de IBM Redbooks® Flujo de Datos y Diseño de Trabajo de IBM InfoSphere DataStage.
- Obtenga los recursos que necesita en el área de Information Management en developerWorks, para mejorar sus habilidades en una amplia variedad de productos de IBM Information Management.
- Visite el área de InfoSphere en developerWorks para leer artículos y tutoriales, acceder a los foros y documentos y conectarse a otros recursos para expandir sus habilidades de InfoSphere.
- Aprenda más sobre Administración de la Información en la zona developerWorks Information Management. Encuentre documentación técnica, artículos "cómo hacer", educación, descargas, información de productos y más.
- Siga a DeveloperWorks en Twitter.
- Vea Demostraciones on demand de developerWorks
que van desde demostraciones sobre instalación y configuración de productos para principiantes, hasta funcionalidades avanzadas pera desarrolladores experimentados.
Obtener los productos y tecnologías
- Encuentre nuevos releases listos para descargarse en la sección de descargas del sitio de ICU.
- Conozca cómo puede usar InfoSphere DataStage e InfoSphere QualityStage en el Servicio Web de Amazon EC2.
- Construya su próximo proyecto de desarrollo con software de prueba IBM, disponible para descarga directamente desde developerWorks, o invierta unas cuantas horas en SOA Sandbox aprendiendo cómo implementar la Arquitectura Orientada a Servicios eficientemente.
Comentar
- Participar en el foro de debate.
- Consulte
blogs de developerWorks y participe en la Comunidad developerWorks.

Bharath 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.