¿Cómo detectar el idioma del texto ingresado por el usuario?

Estoy tratando con una aplicación que acepta la entrada del usuario en diferentes idiomas (actualmente 3 idiomas fijos). El requisito es que los usuarios puedan ingresar texto y no molestarse en seleccionar el idioma a través de la casilla provista en la interfaz de usuario.

¿Hay una biblioteca Java existente para detectar el idioma de un texto?

Quiero algo como esto:

text = "To be or not to be thats the question." // returns ISO 639 Alpha-2 code language = detect(text); print(language); 

resultado:

 EN 

No quiero saber cómo crear un detector de idioma por mi cuenta (he visto muchos blogs tratando de hacer eso). La biblioteca debe proporcionar un APi simple y también funcionar completamente fuera de línea. El código abierto o comercial cerrado no importa.

También encontré estas preguntas en SO (y algunas más):

Cómo detectar el lenguaje
¿Cómo detectar el idioma del texto?

Aquí hay dos opciones

  • LanguageIdentifier
  • Identificador de idioma Rosette

Esta biblioteca de detección de idiomas para Java debería ofrecer más del 99% de precisión en 53 idiomas.

Alternativamente, está Apache Tika , una biblioteca para el análisis de contenido que ofrece mucho más que solo la detección de idiomas.

Google ofrece una API que puede hacer esto por usted. Me encontré con esto ayer y no mantuve un enlace, pero si tú, umm, busca Google, deberías encontrarlo.

Esto estaba en algún lugar cerca de la descripción de su API de traducción, que traducirá el texto para usted en el idioma que desee. Hay otra llamada solo para adivinar el idioma de entrada.

Google se encuentra entre los líderes mundiales en traducción mecánica; ellos basan sus cosas en corpus de texto extremadamente grandes (la mayor parte de Internet, un poco) y un enfoque estadístico que generalmente “lo hace” bien simplemente por el hecho de tener un gran espacio de muestra.

EDITAR: Aquí está el enlace: http://code.google.com/apis/ajaxlanguage/

EDIT 2: Si insistes en “fuera de línea”: una buena respuesta al alza fue la sugerencia de Guess-Language . Es una biblioteca C ++ y maneja aproximadamente 60 idiomas.

Detect Language API también proporciona un cliente Java .

Ejemplo:

 List results = DetectLanguage.detect("Hello world"); Result result = results.get(0); System.out.println("Language: " + result.language); System.out.println("Is reliable: " + result.reliable); System.out.println("Confidence: " + result.confidence); 

Una alternativa es el JLangDetect pero no es muy robusto y tiene una base de lenguaje limitada. Lo bueno es que es una licencia de Apache, si cumple con sus requisitos, puede usarla. Estoy adivinando aquí, pero ¿liberas la tecla espacio entre el evento de salto simple y doble? La versión 0.2 ha sido lanzada aquí .

En la versión 0.4 es muy robusto. He estado usando esto en muchos proyectos propios y nunca tuve ningún problema importante. Además, cuando se trata de velocidad, es comparable a detectores de lenguaje muy especializados (por ejemplo, solo algunos idiomas).

aquí hay otra opción: Language Detection Library para Java

esta es una biblioteca en Java.

 Just a working code from already available solution from cybozu labs: package com.et.generate; import java.util.ArrayList; import com.cybozu.labs.langdetect.Detector; import com.cybozu.labs.langdetect.DetectorFactory; import com.cybozu.labs.langdetect.LangDetectException; import com.cybozu.labs.langdetect.Language; public class LanguageCodeDetection { public void init(String profileDirectory) throws LangDetectException { DetectorFactory.loadProfile(profileDirectory); } public String detect(String text) throws LangDetectException { Detector detector = DetectorFactory.create(); detector.append(text); return detector.detect(); } public ArrayList detectLangs(String text) throws LangDetectException { Detector detector = DetectorFactory.create(); detector.append(text); return detector.getProbabilities(); } public static void main(String args[]) { try { LanguageCodeDetection ld = new LanguageCodeDetection(); String profileDirectory = "C:/profiles/"; ld.init(profileDirectory); String text = "Кремль россий"; System.out.println(ld.detectLangs(text)); System.out.println(ld.detect(text)); } catch (LangDetectException e) { e.printStackTrace(); } } } Output: [ru:0.9999983255911719] ru 

Los perfiles se pueden descargar desde: https://language-detection.googlecode.com/files/langdetect-09-13-2011.zip