Reconocer el idioma de un texto

Los diferentes idiomas tienen características distintas por lo tanto cuando nos enfrentemos a realizar cualquier aplicación que use reconocimiento del lenguaje en múltiples idiomas lo primero será reconocer el idioma para saber que reglas aplicar.

Vamos a usar franc

Originalmente es una herramienta para node aunque tiene versión para navegador que se puede descargar aquí.

Una vez cargada la librería está tiene dos formas de usarse:

var lang = franc('hola es to es una prueba);                

Devuelve el idioma más probable.

 var langs = franc.all('hola esto es una prueba);                

Devuelve un listado con todos los idiomas y la probabilidad de que sea cada uno.

Como funciona

Los sistemas que reconocen el idioma básicamente se basan en buscar grupos de caracteres (n-gramas) representativos de ese idioma. Para ello se les entrena con diversos documentos.

En el fichero data.json de franc tenemos los datos que se han obtenido del proceso de aprendizaje, en este caso trigramas. Como curiosidad incluyo los del español:

de|os |de | la|la | y | a |es |ón |ión|rec|ere|der| co|e l|el |en |ien|cho|ent|ech|ció|aci|o a|a p| el|a l|al |as |e d| en|na |ona|s d|da |nte| to|ad |ene|con| pr| su|tod| se|ho |los| pe|per|ers| lo|o d| ti|cia|n d|cio| es|ida|res|a t|tie|ion|rso|te |do | in|son| re| li|to |dad|tad|e s|est|pro|que|men| po|a e|oda|nci| qu| un|ue |ne |n e|s y|lib|su | na|s e|nac|ia |e e|tra| pa|or |ado|a d|nes|ra |se |ual|a c|er |por|com|nal|rta|a s|ber| o |one|s p|dos|rá |sta|les|des|ibe|ser|era|ar |ert|ter| di|ale|l d|nto|hos|del|ica|a a|s n|n c|oci|imi|io |o e|re |y l|e c|ant|cci| as|las|par|ame| cu|ici|ara|enc|s t|ndi| so|o s|mie|tos|una|bre|dic|cla|s l|e a|l p|pre|ntr|o t|ial|y a|nid|n p|a y|man|omo|so |n l| al|ali|s a|no | ig|s s|e p|nta|uma|ten|gua|ade|y e|soc|mo | fu|igu|o p|n t|hum|d d|ran|ria|y d|ada|tiv|l e|cas| ca|vid|l t|s c|ido|das|dis|s i| hu|s o|nad|fun| ma|rac|nda|eli|sar|und| ac|uni|mbr|a u|die|e i|qui|a i| ha|lar| tr|odo|ca |tic|o y|cti|lid|ori|ndo|ari| me|ta |ind|esa|cua|un |ier|tal|esp|seg|ele|ons|ito|ont|iva|s h|d y|nos|ist|rse| le|cie|ide|edi|ecc|ios|l m|r e|med|tor|sti|n a|rim|uie|ple|tri|ibr|sus|lo |ect|pen|y c|an |e h|n s|ern|tar|l y|egu|gur|ura|int|ond|mat|l r|r a|isf|ote


Si alguien se molesta en mirarlos puede darse una sorpresa. ¿Dónde está la «ñ»?. La «ñ» es un carácter muy representativo del español pero aparece muy poco por eso el algoritmo no la ha «aprendido» como representativa en ningún trigrama. Esos casos quedarían como una mejora que seria considerar caracteres propios de ese idioma. Aunque en muchos casos no aparecerán más que en textos largos por lo que no aportarán demasiado a los resultados y podría inducir a error si por ejemplo hubiera un nombre de un idioma con unos de esos caracteres en un texto de ese idioma.