2010-07-12 85 views
34

Estoy tratando con una aplicación que está aceptando 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.¿Cómo detectar el idioma del texto ingresado por el 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 lenguaje por mí mismo (he visto un montón de blogs tratando de Haz 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 encontraron esta preguntas sobre SO (y algunos más):

How to detect language
How to detect language of text?

+1

favor, lea esto: http://stackoverflow.com/questions/1383503/how-to-determine-the-natural-language-of-a- documento –

+0

@ S.Lott: gracias, ya leí mucho, solo busco una lib de trabajo que funcione sin conexión, no quiero crear nada por mi cuenta. – ManBugra

+0

Reconocer de manera confiable el lenguaje natural se considera un problema difícil. Cualquier solución que se ajuste a su espacio de código y disco duro no es probable que sea muy buena. –

Respuesta

5

Google ofrece una API que puede hacer esto para 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 al 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.

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

EDIT 2: Si insiste en "fuera de línea": Una respuesta bien upvoted fue la sugerencia de Guess-Language. Es una biblioteca C++ y maneja aproximadamente 60 idiomas.

+0

this ? -> http://code.google.com/apis/ajaxlanguage/documentation/#Detect – potatopeelings

+0

¿funciona sin conexión? – ManBugra

+3

@ManBugra: Solo si tiene a mano una copia de seguridad de la instalación de almacenamiento de datos de Google;) –

2

Una alternativa es JLangDetect pero no es muy robusta y tiene una base de idiomas 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 here.

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, pocos idiomas).

+0

Ahora hay versión 0.3 y detecta incluso búlgaro. – nyxz

+0

Pardon, la versión 0.4 está disponible. – nyxz

2

Detect Language API también proporciona Java client.

Ejemplo:

List<Result> 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); 
+0

Este método requiere conexión a Internet, esto debe tenerse en cuenta antes de usarlo en su aplicación. –

0
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<Language> 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 

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

Cuestiones relacionadas