traductor traducir para pagina inglés idioma español codigo cambiar boton java nlp

java - traducir - ¿Cómo puedo saber en qué idioma está escrito un archivo de texto sin formato?



codigo html traductor (10)

¿Tiene conexión a Internet? Si lo hace, entonces Google Language API sería perfecto para usted.

// This example request includes an optional API key which you will need to // remove or replace with your own key. // Read more about why it''s useful to have an API key. // The request also includes the userip parameter which provides the end // user''s IP address. Doing so will help distinguish this legitimate // server-side traffic from traffic which doesn''t come from an end-user. URL url = new URL( "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&" + "q=Paris%20Hilton&key=INSERT-YOUR-KEY&userip=USERS-IP-ADDRESS"); URLConnection connection = url.openConnection(); connection.addRequestProperty("Referer", /* Enter the URL of your site here */); String line; StringBuilder builder = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); while((line = reader.readLine()) != null) { builder.append(line); } JSONObject json = new JSONObject(builder.toString()); // now have some fun with the results...

Si no, hay otros métodos.

Supongamos que tenemos un archivo de texto con el contenido: "Je suis un beau homme ..."

otro con: "Soy un hombre valiente"

el tercero con un texto en alemán: "Guten morgen. Wie geht''s?"

¿Cómo escribimos una función que nos diría: con tal probabilidad que el texto en el primer archivo está en inglés, en el segundo tenemos francés, etc.?

Los enlaces a libros / soluciones listas para usar son bienvenidos. Escribo en Java, pero puedo aprender Python si es necesario.

Mis comentarios

  1. Hay un pequeño comentario que necesito agregar. El texto puede contener frases en diferentes idiomas, como parte de un todo o como resultado de un error. En la literatura clásica tenemos muchos ejemplos, porque los miembros de la aristocracia eran multilingües. Entonces, la probabilidad describe mejor la situación, ya que la mayoría de las partes del texto están en un idioma, mientras que otras pueden estar escritas en otro.
  2. API de Google - Conexión a Internet. Preferiría no usar funciones / servicios remotos, ya que necesito hacerlo yo mismo o usar una biblioteca descargable. Me gustaría hacer una investigación sobre ese tema.

Aunque es una solución más complicada de lo que estás buscando, puedes usar Vowpal Wabbit y entrenarlo con oraciones de diferentes idiomas.

En teoría, podría recuperar un lenguaje para cada oración en sus documentos.

http://hunch.net/~vw/

(No se deje engañar por el "en línea" en el subtítulo del proyecto; eso es solo mathspeak para aprender sin tener que tener todo el material de aprendizaje en la memoria)



Hay un paquete llamado JLangDetect que parece hacer exactamente lo que quieres:

langof("un texte en français") = fr : OK langof("a text in english") = en : OK langof("un texto en español") = es : OK langof("un texte un peu plus long en français") = fr : OK langof("a text a little longer in english") = en : OK langof("a little longer text in english") = en : OK langof("un texto un poco mas largo en español") = es : OK langof("J''aime les bisounours !") = fr : OK langof("Bienvenue à Montmartre !") = fr : OK langof("Welcome to London !") = en : OK // ...

Edición: como señaló Kevin, existe una funcionalidad similar en el proyecto Nutch provisto por el paquete org.apache.nutch.analysis.lang .


Los modelos de bigram funcionan bien, son fáciles de escribir, simples de entrenar y requieren solo una pequeña cantidad de texto para la detección. El identificador de lenguaje nutch es una implementación en java que encontramos y usamos con una envoltura delgada.

Tuvimos problemas con un modelo de bigrama para texto mixto en CJK e inglés (es decir, un tweet es principalmente japonés, pero tiene una sola palabra en inglés). Esto es obvio en retrospectiva al mirar las matemáticas (el japonés tiene muchos más caracteres, por lo que las probabilidades de cualquier par dado son bajas). Creo que podrías resolver esto con una comparación log-linear más complicada, pero hice trampa y usé un filtro simple basado en conjuntos de caracteres que son únicos para ciertos idiomas (es decir, si solo contiene Han unificado, entonces es chino, si contiene algunos Kana japonesa y Han unificada, entonces es japonesa).


Mira las cadenas de Markov.

Básicamente, necesitará muestras estadísticamente significativas de los idiomas que desea reconocer. Cuando obtenga un nuevo archivo, vea cuáles son las frecuencias de sílabas o fonemas específicos, y compare la muestra precalculada. Elige el más cercano.


NGramJ parece estar un poco más actualizado:

http://ngramj.sourceforge.net/

También tiene perfiles orientados a caracteres y orientados a bytes, por lo que también debe ser capaz de identificar el conjunto de caracteres.

Para los documentos en varios idiomas, debe identificar el conjunto de caracteres ( ICU4J tiene un CharsetDetector conjunto de caracteres que puede hacer esto), luego dividir el texto en algo que pueda CharsetDetector como múltiples saltos de línea, o párrafos si el texto está marcado.


Para corpiños de textos más grandes, usualmente utiliza la distribución de letras, dígrafos e incluso trígrafos y compare con distribuciones conocidas para los idiomas que desea detectar.

Sin embargo, es muy probable que una sola oración sea demasiado corta para producir medidas estadísticas útiles. Es posible que tenga más suerte al hacer coincidir palabras individuales con un diccionario, entonces.


Prueba el identificador de idioma de Nutch. Está capacitado con perfiles de n-gramas de idiomas y el perfil de idiomas disponibles se combina con el texto de entrada. Lo interesante es que puedes agregar más idiomas, si lo necesitas.


Si está interesado en el mecanismo por el cual se puede realizar la detección de idioma, le remito al siguiente article (basado en Python) que utiliza un método (muy) ingenuo, pero es una buena introducción a este problema en particular y al aprendizaje automático (solo un palabra grande) en general.

Para las implementaciones de Java, JLangDetect y Nutch como sugieren los otros carteles son bastante buenos. También eche un vistazo a Lingpipe , JTCL y http://ngramj.sourceforge.net/ .

Para el problema en el que tiene varios idiomas en la misma página, puede usar un detector de límites de oraciones para cortar una página en oraciones y luego intentar identificar el idioma de cada oración. Suponiendo que una oración contenga solo un idioma (principal), todavía debería obtener buenos resultados con cualquiera de las implementaciones anteriores.

Nota: un detector de límite de oración (SBD) es teóricamente específico del lenguaje (problema de huevo de gallina ya que necesita uno para el otro). Pero para los idiomas basados ​​en escritura latina (inglés, francés, alemán, etc.) que utilizan principalmente puntos (aparte de exclamaciones, etc.) para delimitar oraciones, obtendrá resultados aceptables incluso si utiliza un SBD diseñado para inglés. Escribí una SBD en inglés basada en reglas que ha funcionado muy bien para el texto en francés. Para implementaciones, eche un vistazo a OpenNLP .

Una opción alternativa a usar el SBD es usar una ventana deslizante de, por ejemplo, 10 tokens (delimitado por espacios en blanco) para crear una pseudo-oración (PS) e intentar identificar el borde donde cambia el idioma. Esto tiene la desventaja de que si su documento completo tiene n fichas, realizará aproximadamente n-10 operaciones de clasificación en cadenas de longitud de 10 fichas cada una. En el otro enfoque, si la oración promedio tiene 10 fichas, habría realizado aproximadamente n / 10 operaciones de clasificación. Si n = 1000 palabras en un documento, está comparando 990 operaciones contra 100 operaciones: un orden de diferencia de magnitud.

Si tiene frases cortas (menos de 20 caracteres), la precisión de la detección del idioma es mala en mi experiencia. Particularmente en el caso de los nombres propios, así como los nombres que son iguales en todos los idiomas como "chocolate". Por ejemplo, ¿"Nueva York" es una palabra en inglés o una palabra en francés si aparece en una oración en francés?