Antes de ver el código, analicemos un poco la situación. Partimos de una cadena de texto almacenada en una variable en Python, y nuestro objetivo es averiguar el idioma en el que se encuentra dicho texto. Para ello haremos uso de las stopwords, o "palabras vacías", que son palabras que no contienen ningún significado por sí solas, como son los artículos o las preposiciones.
La razón del uso de estas stopwords es que puede encontrarse un conjunto de ellas en casi todos los idiomas, y aunque no aporten significado a los textos, permiten la unión de palabras más influyentes entre ellas, lo que las hace imprescindibles en el lenguaje natural.
Entonces, nuestro objetivo será analizar el texto proporcionado, palabra a palabra, contando el número de stopwords que se encuentran en él para cada idioma. Pero ¿de dónde obtenemos las stopwords en los diferentes idiomas? Fácil solución, del módulo NLTK (Natural Language Toolkit) de Python (sigue las instrucciones para instalarlo facilmente aquí). Además, es necesario instalar el NLTK Data, que no es más que una enorme base de datos de archivos con textos históricos, palabras...y por supuesto, stopwords.
Una vez instalado y configurado el módulo NLTK, podemos pasar a ver el código que realiza esta tarea:
1: import nltk # Importar la librería nltk2:3: # Lista de idiomas disponibles en la nltk
4: languages = ["spanish","english","dutch","finnish","german","italian","portuguese","turkish","danish","french","hungarian","norwegian","russian","swedish"]5:6: # Texto a analizar
7: text_to_detect = "Texto a analizar y del cual detectar el idioma en el que se encuentra"
8:9: # Dividimos el texto de entrada en tokens o palabras únicas
10: tokens = nltk.tokenize.word_tokenize(text_to_detect)11: tokens = [t.strip().lower() for t in tokens] # Convierte todos los textos a minúsculas para su posterior comparación12:13: # Creamos un dict donde almacenaremos la cuenta de las stopwords para cada idioma
14: lang_count = {}15:16: # Por cada idioma
17: for lang in languages:18: # Obtenemos las stopwords del idioma del módulo nltk
19: stop_words = unicode(nltk.corpus.stopwords.words(lang))20: lang_count[lang] = 0 # Inicializa a 0 el contador para cada idioma
21:22: # Recorremos las palabras del texto a analizar
23: for word in tokens:24: if word in stop_words: # Si la palabra se encuentra entre las stopwords, incrementa el contador25: lang_count[lang] += 126:27: # Obtiene el idioma con el número mayor de coincidencias
28: detected_language = max(lang_count, key=lang_count.get)29:30: print detected_language
Aunque seguramente no será el mejor método de detección de idiomas, es un sistema bastante fiable, rápido y, sobre todo, fácil de implementar. Además, éste método permite detectar textos en idiomas muy extendidos como el castellano o el inglés, y algunos poco habituales como el húngaro, el turco o el danés.
Y tú, ¿qué algoritmo para la detección de idiomas empleas en Python o en otros lenguajes?