Iniciar sesión

Identificate con tu cuenta de DNM+ para acceder a tus artículos favoritos, perfil, suscripciones y mucho más a tu alcance que en la edición impresa.

Email

 

Password

 
¿olvidaste tu contraseña?
 

Registrate

Crea tu cuenta de DNM+ y podrás acceder a contenido exclusivo, tus suscripciones e integrar formar parte de nuestra comunidad de desarrolladores.

Email

Password

 

Repetir password

 
 

Recupera tus datos

¿Olvidaste tu password? No te preocupes, podemos ayudarte. Indicanos la dirección de correo electrónico con que te registraste.

Email

 
DNM+ Online
dotnetmania 2.0
Microsoft Translator API
En este artículo veremos cómo podemos sacar provecho de una herramienta no muy conocida, pero que hemos visto funcionar en muchos sitios, como MSDN Library: esa especie de traducción automática que podemos modificar como usuarios y mejorar la traducción. También se muestra cómo podemos hacer que nuestra aplicación “lea”. Todo ello, gracias a Microsoft Translator API.

Imaginemos por un momento que la barrera del lenguaje se ha superado, y ya no es necesario aprender idiomas. La barrera lingüística simplemente ya no existe. Que alguien tenga una idea, la pueda expresar y que todos lo entendamos sin temor a malas interpretaciones debe ser maravilloso. Ahora imaginemos cómo habría sido posible: tiene que haber tecnología de por medio, seguro, y qué mejor ejemplo que el diálogo que mantiene el Tío Owen con C3PO cuando se lo va a comprar a los Jawas:

C3PO: Soy C3PO, relaciones cibernéticas humanas, domino más de 6 millones de formas de comunicación y... Tío Owen: Sabes buskchi? _ _C3PO: Claro, es como un segundo idioma para mí. Precisamente estuve trabajando con...

¿Cómo podría haber empezado todo?

Es increíble lo que puede dar de sí una API de traducción instantánea; sin embargo, es muy costoso implementarla en un proyecto. Incluso aunque la tuviéramos hecha, el resultado final podrían ser gigas y gigas de bits quizás para una funcionalidad muy concreta. Puede no merecer el esfuerzo. Sin embargo, si esa API estuviese implementada en un servicio en la nube y fuese accesible fácilmente, la cosa cambiaría. Seguramente ésta sería la forma más manejable y óptima de utilizar.

Como desarrolladores o como propietarios de un sitio web, si queremos llegar a más personas, debemos preocuparnos por aspectos como éste. Y es que poner en la web lo que ofrecemos es una cosa; pero asegurarnos de que llegamos a personas en todo el mundo es otra. Aunque ni la mejor tecnología de traducción es capaz de sustituir a un traductor humano, también es cierto que las tecnologías de este tipo ya han alcanzado un nivel de calidad aceptable, y se van mejorando continuamente, por lo que adoptar desde ya soluciones basadas en ellas no es algo descabellado.

Para atacar este problema, desde Microsoft nos ofrecen la Microsoft Translator API, accesible desde cualquier lugar y desde cualquier aplicación por medio de servicios web estándar. La principal inquietud que esta API intenta resolver es que, aun cuando el mundo se ha hecho más pequeño debido a los métodos de comunicación modernos, las diferencias de lenguaje siguen constituyendo un problema de comunicación. Y para facilitar al máximo sus posibilidades de utilización, Microsoft ha creado una API accesible desde cuatro interfaces diferentes: un widget Web, AJAX, HTTP y SOAP.

A continuación, vamos a ver en detalle cómo podemos usar los servicios que se ofrecen desde Microsoft Translator API en dos de sus sabores.

Web Widget

Este widget nos permite incorporar a nuestros sitios web un traductor automático que traducirá la web completa al idioma que le indiquemos. El primer paso que debemos dar es ir al sitio http://www.microsofttranslator.com/widget/ (figura 1). Allí encontraremos un applet cuyo fin es el de generar un pequeño script que incorporaremos a nuestras páginas.

Figura 1.

Tan solo tenemos que indicar cuál es la URL del sitio y cuál es el lenguaje original de nuestro sitio. Seleccionamos el color y tamaño (además de aceptar las condiciones de uso de Microsoft Translator), y hacemos clic en el botón de generar el código del widget. Esto producirá un fragmento de código que podremos usar en nuestra web. El usuario solo tendrá que seleccionar el idioma al que desea traducir la página entera y hacer clic en el botón “play” del widget. Si quiere verlo en acción, puede entrar en http://speakingin.net y probar su funcionamiento (figura 2).

Figura 2.

Este widget incorpora otra funcionalidad que seguramente conoceréis: la traducción colaborativa disponible para todos en http://www.msdn.com. Por supuesto, también podremos dotar a nuestra web de esa misma funcionalidad, simplemente solicitando una invitación en el enlace indicado para ello en la propia web del widget (figura 3).

Figura 3.

Después de identificarnos en el sitio correspondiente con nuestra cuenta de Windows Live, obtendremos un código de invitación. Y una vez que introduzcamos este código en la página del widget, se nos habilitará la opción de las traducciones colaborativas a la hora de generar el script a incorporar a nuestras páginas. Con ello dispondremos en nuestra web de esta opción, que personalmente se me antoja más que interesante.

Interfaz SOAP

El widget que hemos descrito anteriormente consume un servicio web disponible al público y que puede ser accedido directamente desde nuestras aplicaciones. Para poder usarlo, debemos obtener primero un Bing Developer AppID en http://www.bing.com/developers/appids.aspx a partir de nuestra cuenta de Windows Live.

Como ejemplo de utilización de este servicio, veamos cómo solicitar los archivos .wav para reproducir el sonido de una letra, palabra o frase que queramos en un idioma específico. Para comenzar, crearemos un proyecto de consola de C# y agregaremos una referencia al servicio web: http://api.microsofttranslator.com/V2/Soap.svc. Llamaremos a esa referencia TalkingToMe, y nos fijaremos desde ya en dos métodos que son los que usaremos en el ejemplo (figura 4). Estos métodos son:

Figura 4.

  • GetAppIdToken: Nos devuelve un token que usaremos como parámetro en los demás métodos del servicio web. Los parámetros de entrada de este método son:

    • appId: Nuestro Bing Developer AppId.
    • minRatingRead: Un entero que define la calificación mínima que deben tener las traducciones que se obtengan. El valor recomendado es 5, que incluirá solo traducciones automáticas y traducciones aprobadas.
    • maxRatingWrite: Un entero que define la calificación máxima que se le podrá dar a una traducción con el token obtenido. El valor recomendado es de 1 a 4 para usuarios anónimos, y de 6 a 10 para usuarios autorizados.
    • expireSeconds: Define el tiempo (en segundos) durante el que el token obtenido será válido. El valor puede estar entren 1 y 86400 (24 horas).
  • Speak: Nos devuelve una cadena con la URL de la que descargar el archivo .wav con la reproducción del texto que le indiquemos. Los parámetros de entrada de este método son:

    • appId: El token obtenido mediante el método GetAppIdToken.
    • text: El texto cuyo .wav queremos obtener.
    • language: Una cadena con el código del idioma del texto. El código deberá estar presente en la lista de códigos que devuelve el método GetLanguagesForSpeak.
    • format: Opcional, una cadena que indica el tipo de archivo que queremos obtener. Actualmente sólo está permitido el valor “audio/wav”.

Con tan solo estas dos funciones podremos crear una aplicación que nos obtenga un .wav con el texto leído, cuyo código se presenta en el listado 1. En él, primero se crea una instancia del servicio de traducción; inmediatamente después, se llama a GetAppIdToken para obtener el token necesario para las llamadas subsiguientes. A partir de ese momento, ya podremos llamar a los métodos que queramos del servicio web. El código restante solicita una vocalización en castellano y serializa el resultado a un fichero.

class Program
{
    static void Main(string[] args)
    {
        LanguageServiceClient traductor = new LanguageServiceClient();
        
        string appid = traductor.GetAppIdToken("<AquíTuBingAppID>", 5, 5, 100);

        string resut = traductor.Speak(appid, "Mi casa tiene un color especial", 
            "es", "audio/wav");

        WebRequest web = HttpWebRequest.Create(resut);
        WebResponse resp = web.GetResponse();
        using (Stream str = resp.GetResponseStream())
        {
            using (FileStream flstr = File.OpenWrite("miSonido.wav"))
            {
                CopyStream(str, flstr);
            }
        }
    }

    /// <summary>
    /// Copia el contenido de input en output, sin cerrar ningún stream
    /// </summary>
    public static void CopyStream(Stream input, Stream output)
    {
        byte[] buffer = new byte[8 * 1024];
        int len;
        while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            output.Write(buffer, 0, len);
        }
    }
}
Listado 1.

Conclusión

Este tipo de API colaborativas me hacen reflexionar un poco, por no decir demasiado; y es que no sabría decir si poco a poco (o más bien, a pasos agigantados), la tecnología nos va descubriendo nuevas formas de interactuar los unos con los otros. Nos abre unas puertas que hasta hace unos días ni siquiera imaginábamos que existían.

Esto me recuerda mucho al hacedor de llaves de la película “Matrix”. Me gusta pensar que como hacedores de llaves podemos hacer de este mundo un mundo mejor. Sin embargo, hay una escena de esa película en la que el agente Smith le dice al señor Anderson que el universo elegido para Matrix fue el apogeo de la civilización humana en los años 90, ya que cada vez que intentaban recrearlo en una fecha más adelantada, el sistema se degradaba a pasos agigantados. ¿Una profecía quizás? No lo sé, pero lo que si sé es que en nuestras manos hay mucha responsabilidad sobre cómo va a ser el mundo que nos espera, ya no a nuestros hijos, sino a nosotros mismos.

Espero que les haya gustado esta API que Microsoft ha publicado, y que ya he integrado en mi blog personal (http://speakingin.net) para llegar aún a más personas.

blog comments powered by Disqus