Traducir cadenas en Python con TextBlob

En este tutorial, usaremos TextBlob con Python para realizar la traducción de cadenas y palabras en varios idiomas.

Introducción

La traducción de textos es un problema informático difícil que se vuelve mejor y más fácil de resolver cada año. Grandes empresas como Google están trabajando activamente para mejorar sus servicios de traducción de textos, lo que nos permite a los demás utilizarlos libremente.

Además de su gran uso personal, estos servicios pueden ser utilizados por desarrolladores a través de varias API. Este artículo trata sobre TextBlob, que utiliza una de estas API para realizar la traducción de texto.

¿Qué es TextBlob?

TextBlob es una biblioteca de procesamiento de texto escrita en Python. Según su documentación, se puede usar para etiquetar partes del discurso, analizar, analizar opiniones, corregir ortografía, traducir y más. En este artículo, nos centraremos en la traducción de texto.

Internamente, TextBlob se basa en la API de Google Translate. Esto significa que se requiere una conexión a Internet activa para realizar las traducciones.

Instalación de TextBlob {#instalación de TextBlob}

Comencemos instalando TextBlob usando pip y descargando el corpus de palabras que necesita para funcionar:

1
2
$ pip install -U textblob
$ python -m textblob.download_corpora

Usar TextBlob

Usar TextBlob es directo y simple. Simplemente lo importamos, asignamos una cadena al constructor y luego lo traducimos a través de la función translate():

1
2
3
4
from textblob import TextBlob

blob = TextBlob("Buongiorno!")
print(blob.translate(to='en'))

La función translate() acepta dos argumentos: from_lang y to. from_lang se configura automáticamente según el idioma que detecta TextBlob.

El ejemplo anterior utiliza la frase italiana Buongiorno que se traduce como Buenos días en inglés.

A veces, es posible que deseemos detectar un idioma para decidir si el texto necesita traducción. Para detectar el idioma de algún texto, se utiliza la función detect_language() de TextBlob:

1
2
3
4
5
from textblob import TextBlob

blob = TextBlob("Buongiorno!")
if (blob.detect_language() != 'en')
    blob.translate(to='en'))

Ejemplos de traducción y precisión

Traducción de oraciones del inglés al hindi

Como primer ejemplo, veremos qué tan bien se traduce el inglés al hindi:

1
2
blob = TextBlob('TextBlob is a great tool for developers')
print(blob.translate(to='hi'))

El resultado es el siguiente:

1
वलपर  ि एक बढ़ि  

Traducción de poesía rusa al croata

Veamos cómo TextBlob gestiona la poesía. El siguiente es el trabajo del poeta ruso Vladimir Mayakovsky, primero en ruso y luego en inglés:

1
2
3
4
5
6
Послушайте!  
Ведь, если звезды зажигают -  
значит - это кому-нибудь нужно?  
Значит - кто-то хочет, чтобы они были?  
Значит - кто-то называет эти плевочки  
жемчужиной?
1
2
3
4
5
6
Listen!  
See, if stars light up  
does it mean that there is someone who needs it?  
Does it mean that someone wants them to exist?  
It means that someone calls these little spits  
magnificent.

Enviaremos el poema original en cirílico a TextBlob y veremos qué tan bien se traduce al croata. Dado que tanto el ruso como el croata y los idiomas eslavos, se espera que la traducción sea relativamente buena:

1
2
3
4
5
6
from textblob import TextBlob

poem = 'Послушайте! Ведь, если звезды зажигают - значит - это кому-нибудь нужно? Значит - кто-то хочет, чтобы они были? Значит - кто-то называет эти плевочки жемчужиной?'

blob = TextBlob(poem)
print(blob.translate(to='hr'))

Al ejecutar el código anterior, obtenemos el siguiente resultado (formateado para mayor comodidad):

1
2
3
4
5
6
Slušati!
Uostalom, ako su zvijezde upaljene
znači li to nekome treba?
Dakle - netko želi da to budu?
Dakle - netko naziva ove pljuvačke
biserom?

La mayor parte de la traducción es buena excepto por la primera palabra que sonaría mejor si fuera Slušajte en lugar de Slušati, en vocativo. Aunque no es perfecto, podrías entender la traducción.

Traducir matriz de palabras alemanas al inglés

En algunos casos, no tendremos oraciones completas para traducir. Podríamos tener una lista o una matriz de palabras. Estos son mucho más fáciles de traducir, ya que no hay contexto para cambiar potencialmente la traducción:

1
2
3
4
5
6
7
from textblob import TextBlob

worter =  ['einer',  'zwei',  'drei',  'vier',  'fünf',  'sechs',  'sieben',  'acht',  'neun',  'zehn']

for w in worter:
    blob = TextBlob(w)
    print(blob.translate(to='en'))

El resultado es:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
one
two
three
four
five
six
seven
eight
nine
ten

¡Se ve bien!

Traducción de comida del inglés al francés

Finalmente, traduzcamos una palabra del inglés al francés:

1
2
3
4
from textblob import TextBlob

blob = TextBlob('An apple')
print(blob.translate(to='fr'))

La traducción al francés es Una manzana. ¡Buen provecho!

Conclusión

La traducción es un problema informático interesante pero difícil. El aprendizaje profundo y otros métodos de IA son cada vez más buenos para comprender el lenguaje y realizar la traducción automatizada de idiomas. TextBlob es una de las herramientas disponibles para los desarrolladores que se puede utilizar para realizar tales traducciones automáticas de idiomas.

Hay muchos beneficios en este tipo de enfoque, sin embargo, no todas las traducciones son perfectas. Estas técnicas aún están evolucionando y si necesita una traducción de alta calidad de gran importancia, siempre es mejor consultar con un traductor profesional.

Sin embargo, para todos los demás propósitos, las herramientas como TextBlob son más que suficientes para brindar comodidad para una traducción simple y satisfacer la curiosidad de los desarrolladores que las utilizan.