c# language-detection

c# - Detectar idioma del texto



language-detection (7)

Aquí tiene un detector simple basado en estadísticas de bigram (básicamente significa aprender de un conjunto grande qué bigrames ocurren con mayor frecuencia en cada idioma y luego contarlos en un trozo de texto, en comparación con sus valores detectados anteriormente):

http://allantech.blogspot.com/2007/07/automatic-language-detection.html

Esto es probablemente lo suficientemente bueno para muchas aplicaciones (¿la mayoría?) Y no requiere acceso a Internet.

Por supuesto, se desempeñará peor que el algoritmo de Google o Bing (que a su vez no son excelentes). Si necesita un excelente rendimiento de detección, tendría que hacer mucho trabajo duro y grandes cantidades de datos.

La otra opción sería aprovechar las API de Google o Bing si su aplicación tiene acceso a Internet.

Esta pregunta ya tiene una respuesta aquí:

¿Hay alguna biblioteca de C # que pueda detectar el idioma de un fragmento de texto en particular? es decir, para un texto de entrada "This is a sentence" , debería detectar el idioma como "English" . O para "Esto es una sentencia" debería detectar el idioma como "Spanish" .

Entiendo que la detección de lenguaje a partir de texto no es un problema determinista. Pero tanto Google Translate como Bing Translator tienen una opción de "Detección automática", que adivina mejor el idioma de entrada. ¿Hay algo similar disponible públicamente, preferiblemente en C #?




He encontrado que "textcat" es muy útil para esto. He utilizado una implementación de PHP, PHP Text Cat , basada en esta implementación original , y la encontré confiable. Si observa las fuentes, descubrirá que no es una cosa terriblemente difícil de implementar en el idioma que elija. El trabajo duro, las combinaciones de letras que son relevantes para un idioma en particular, está todo ahí como datos.


La detección del lenguaje es algo muy difícil de hacer.

Algunos idiomas son mucho más fáciles de detectar que otros simplemente por los signos diacríticos y los dígrafos / trígrafos utilizados. Por ejemplo, los acentos dobles agudos se utilizan casi exclusivamente en húngaro. El i ''ı'' sin puntos, se usa exclusivamente [creo] en turco, t-coma (no t-cedilla) se usa solo en rumano, y el eszett ''ß'' ocurre solo en alemán.

Algunos digraphs, trigraphs y tetragraphs también son un buen regalo. Por ejemplo, lo más probable es que encuentre ''eeuw'' y ''ieuw'' principalmente en holandés, y ''tsch'' y ''dsch'' principalmente en alemán, etc.

Más obsequios incluirían palabras comunes o prefijos / sufijos comunes utilizados en un idioma en particular. A veces, incluso la puntuación que se usa puede ayudar a determinar un idioma (estilo de cita y uso, etc.).

Si tal biblioteca existe, me gustaría saberlo, ya que estoy trabajando en una.


Querrás un algoritmo de aprendizaje automático basado en cadenas ocultas de Markov, procesar un montón de textos en diferentes idiomas.

Luego, cuando llega al texto no identificado, el idioma que tiene la ''puntuación'' más cercana es el ganador.


Sí, TextCat es muy bueno para la identificación del idioma. Y tiene muchas implementaciones en diferentes idiomas.

No había puertos en .Net. Así que he escrito uno: NTextCat ( NuGet , Demo en línea ).

Es puro .NET Framework DLL + interfaz de línea de comandos para ello. Por defecto, utiliza un perfil de 14 idiomas.

Cualquier comentario es muy apreciado! Nuevas ideas y solicitudes de características son bienvenidas también :)