Message Boards Message Boards

Haz que Wolfram|Alpha funcione en cualquier idioma con TextTranslation

Posted 6 years ago

Nota: Esta publicación es una traducción de la publicación por Arnoud Buzing: Using TextTranslation to make WolframAlpha work with ANY language.

Algo que no me agrada mucho de Wolfram|Alpha es que solo funciona bien con entradas en inglés y no muy bien (o nada bien) en otros idiomas.

Cuando incluímos una nueva función de traducción en la versión 11.1, TextTranslation, inmediatamente pensé en usarlo con Wolfram|Alpha.

Cuando finalmente pude investigar esto, descubrí que los resultados son realmente sorprendentes, así que quiero compartir algunos resultados aquí.

Una manera muy fácil de probar esto es instalando el siguiente paclet de la siguiente página GitHub:

PacletInstall["https://github.com/arnoudbuzing/prototypes/releases/download/v0.2.3/Prototypes-0.2.3.paclet"]

O si no gusta instalar el paclet completo (porque también incluye docenas de otras funciones), puede usar las definiciones del código desde aquí: https://github.com/arnoudbuzing/prototypes/blob/master/Prototypes/WolframAlpha.wl

Veamos algunos ejemplos y cómo estos se comparan con la función WolframAlpha no traducida. Supongamos que queremos preguntarle a Wolfram|Alpha cuál es la capital de Japón (Tokio). Claramente, la consulta en inglés funciona de la siguiente manera:

WolframAlpha["what is the capital of Japan", "Result"]

(Esto retorna Tokio como respuesta). Pero ahora hagamos la pregunta en neerlandés:

WolframAlpha["wat is de hoofdstad van Japan", "Result"]

Ahora se obtiene una respuesta muy extraña: 18,4 millones de vehículos (estimación de 2004). Esto está claramente incorrecto, lo cual hace que Wolfram|Alpha sea completamente inútil para las preguntas en el idioma neerlandés.

Entonces, ahora pensemos en lo que se requiere para mejorar esta situación: primero debemos revisar si estamos lidiando con una entrada que no está en inglés y, de ser así, tenemos que traducirla a una entrada en inglés y ejecutarla a través de la función WolframAlpha. Este es el código de Wolfram Language que hace exactamente eso. Lo llamé WolframBeta para distinguirlo de la función original:

WolframBeta[ input_String, args___ ] := Module[{language, translation},
  language = LanguageIdentify[input];
  translation = If[language =!= Entity["Language", "English"], TextTranslation[input, language -> "English"], input];
  WolframAlpha[translation, args]
]

Ahora probemos esta función:

WolframBeta["wat is de hoofdstad van Japan", "Result"]

Es un poco más lento debido a la llamada a la función de traducción, ¡pero regresa el resultado correcto (Tokio)!

Y de inmediato funciona para muchos idiomas:

WolframBeta["cual es la capital de japón?", "Result"]
WolframBeta["??????????", "Result"]
WolframBeta["Was ist die Hauptstadt von Japan?", "Result"]
WolframBeta["????????", "Result"]

Todas estas preguntas retornan como resultado a Tokio, mientras que la función WolframAlpha falla de maneras distintas en cada idioma! (No incluiré los resultados aquí, pero son vergonzosos)

(Para obtener las traducciones en estos idiomas traduje del inglés, así que espero que sean correctas)

WolframAlpha también puede retornar "resultados hablados", una cadena de caracteres sencilla en inglés como respuesta. Por ejemplo:

WolframAlpha["what is the capital of Japan?", "SpokenResult"]

Esto retorna la cadena de caracteres en inglés: "La capital de Japón es Tokio, Japón"

Pero TextTranslation funciona en ambos sentidos (de hecho, funciona entre dos idiomas, pero en este contexto solo nos interesa la traducción desde y hacia inglés).

Aquí hay una modificación que a) traduce un idioma que no sea ingles a inglés, b) hace la consulta, y c) traduce el resultado hablado nuevamente al idioma original:

WolframBeta[ input_String, "SpokenResult", args___ ] := Module[{language, translation,result},
  language = LanguageIdentify[input];
  translation = If[language =!= Entity["Language", "English"], TextTranslation[input, language -> "English"], input];
  result = WolframAlpha[translation, "SpokenResult", args];
  If[language =!= Entity["Language", "English"], TextTranslation[result, "English" -> language], result]
]

Ahora echemos un vistazo a algunos ejemplos en español. Como entrada tenemos “¿Qué distancia hay entre Amsterdam y Rotterdam en kilómetros?”:

WolframBeta“¿Qué distancia hay entre Amsterdam y Rotterdam en kilómetros?”, "SpokenResult"]

Esto retorna (correctamente): " La respuesta es de 56,4 kilómetros"

Y ahora preguntemos, cuánta vitamina C hay en un vaso de jugo de naranja:

WolframBeta["¿cuánta vitamina C hay en un vaso de jugo de naranja?", "SpokenResult"]

Obtenemos el siguiente resultado: "La respuesta es aproximadamente 93 miligramos"

Ahora probemos algo con una respuesta un poco más compleja (producto interno bruto de México), al menos gramaticalmente (esta vez realmente me sorprendió):

WolframBeta["cual es el producto interno bruto de México?", "SpokenResult"]

Respuesta: "El producto interno bruto de México es de $ 1,05 trillones por año"

A veces al preguntar por el tiempo, se debe proporcionar el país además de la ciudad:

WolframBeta ["¿qué tan cálido es Monterrey, Mexico?", SpokenResult"]

Respuesta (en Farenheit): "La temperatura en Monterrey, Nuevo León, México es de 86 grados Fahrenheit"

Tambien podemos obtener respuestas a consultas matemáticas:

WolframBeta["¿Cuál es la derivada de seno de X?", "SpokenResult"]

Respuesta: "La respuesta es coseno de X"

Y preguntas sobre personas famosas y su relación con otras personas:

WolframBeta["¿Quiénes son los hijos del Príncipe William?","SpokenResult"]

Respuesta: "Los hijos de Prince William son Prince George de Cambridge; Carlota de Cambridge; y Luis de Cambridge"

Espero que esta o una versión de esta idea se pueda agregar oficialmente a Wolfram|Alpha en algún momento. Creo que sería útil hacer que Wolfram|Alpha se utilice más en todo el mundo para ayudar a las personas con su curiosidad computacional.

Déjame saber lo que piensas. Comentarios, sugerencias y pull requests son bienvenidos!

POSTED BY: Karla Santana
2 Replies
In[1]:= TextTranslation["Very cool, thanks for sharing and translating!", "Spanish", Method -> "Google"]
Out[1]= "Muy bueno, gracias por compartir y traducir!"
POSTED BY: Arnoud Buzing

Es esta la primera publicación en español acá? Merece un premio si es así :)

In[83]:= TextTranslation["Es esta la primera publicación en español acá? Merece un premio, si es así :)"]
Out[83]= Is this the first publication in Spanish here? It deserves a prize, if so :)

enter image description here

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract