2009-09-23 8 views
17

¿Hay alguna biblioteca C# que pueda detectar el idioma de una determinada pieza de texto? es decir, para un texto de entrada "This is a sentence", debe detectar el idioma como "English". O para "Esto es una sentencia", debe detectar el idioma como "Spanish".Detectar lenguaje de texto

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

+0

El otro día vi una de mis páginas web de intranet en un PC con Google Traductor instalado. La página solo tiene algunas palabras como ** mean ** y ** stddev ** y algunos números. Google Translator me dijo que la página estaba en ** rumano ** y me preguntó si quería una traducción. Si no es un ** problema determinista **, ¿cómo puede el software hacer un buen trabajo? – pavium

+3

A veces hacen un buen trabajo. Por supuesto, habrá insumos por los que fracasan por completo, pero para los insumos más probables que funcionan razonablemente bien –

+2

http://stackoverflow.com/questions/1192768/return-the-language-of-a-given-string/1192802 # 1192802 –

Respuesta

0

Querrá un algoritmo de aprendizaje automático basado en cadenas de markov ocultas, procese un grupo de textos en diferentes idiomas.

Luego, cuando llega el texto no identificado, el idioma que tiene el puntaje más cercano es el ganador.

1

Aquí tienes un simple detector basado en estadísticas bigrama (básicamente significa aprender de un gran conjunto, que Bigramas ocurrir con mayor frecuencia en cada idioma y luego contar los de un fragmento de texto, en comparación con sus valores detectados previamente):

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

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

Por supuesto, funcionará peor que el algoritmo de Google o Bing (que a su vez no son geniales). Si necesita excelente rendimiento de detección, tendrá que realizar un trabajo arduo y una gran cantidad de datos.

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

+1

De hecho, este enfoque dará resultados bastante buenos. Se puede mejorar usando n-grams en lugar de bi-grams. Sin embargo, siempre será difícil distinguir lenguajes muy similares (por ejemplo, polaco y checo). Idiomas como el griego serán muy fáciles ... –

+0

Para evitar malentendidos, ¿qué llamarías bastante bueno en este contexto? –

2

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

Algunos lenguajes son mucho más fáciles de detectar que otros simplemente debido a los signos diacríticos y los dígrafos/trigrafos utilizados. Por ejemplo, double-acute accents se usan casi exclusivamente en húngaro. El dotless i ‘ ı ’, se usa exclusivamente [Creo] en turco, t-coma (no t-cedilla) se usa solo en rumano, y el eszett ‘ ß ’ aparece solo en alemán.

Algunos dígrafos, trigrafos y tetragrafías también son un buen obsequio. Por ejemplo, lo más probable es encontrar ‘ eeuw ’ y ‘ ieuw ’ principalmente en holandés, y ‘ tsch ’ y ‘ DSCH ’ principalmente en alemán, etc.

Más regalos incluyan palabras comunes o prefijos comunes/sufijos utilizados en un lenguaje particular. A veces, incluso la puntuación que se utiliza puede ayudar a determinar un idioma (estilo de cotización y uso, etc.).

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

+0

Debería pensar en un clasificador basado en n-grams más genérico basado en un corpus de entrenamiento. –

0

he encontrado que "textcat" es muy útil para esto.Utilicé una implementación de PHP, PHP Text Cat, basada en este this original implementation, y la encontré confiable. Si echas un vistazo a las fuentes, encontrarás que no es terriblemente difícil de implementar en el idioma que elijas. El trabajo arduo, las combinaciones de letras que son relevantes para un idioma en particular, está todo allí como datos.

26

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

No hay puertos en .Net. Así que he escrito uno: NTextCat (NuGet, Online Demo).

Es .NET Framework DLL puro + interfaz de línea de comando. Por defecto, usa un perfil de 14 idiomas.

¡Cualquier comentario es muy apreciado! Las nuevas ideas y peticiones son bienvenidos también :)

+1

¡Probé NTextCat hoy, y es muy fácil trabajar con él! –

+0

¡Gracias por usarlo! Cualquier comentario en particular es muy apreciado. Por favor, publique sus comentarios (si los hay) [en esta página] (http://ntextcat.codeplex.com/discussions) –

+0

Bueno, no reconoció el letón ... – Edgar

Cuestiones relacionadas