Debe escribir un programa o función que determine el idioma de una palabra determinada.
La tarea es reconocer algunas de las 5000 palabras más comunes en 4 idiomas:
- Inglés
- alemán
- italiano
- húngaro
Las listas de palabras se pueden encontrar en este repositorio de GitHub.
Se le permite cometer errores en el 40% de los casos de prueba proporcionados . Es decir, puede clasificar erróneamente 8000 de las 20000 entradas.
Detalles
- Las listas solo contienen palabras con letras minúsculas,
a-z
por ejemplo,won't
ymöchte
no están incluidas. - Aparecen algunas palabras en varios idiomas, lo que significa que su código no siempre puede adivinar la salida esperada correctamente.
- Para mayor comodidad, puede descargar todos los casos de prueba en una sola lista . En cada línea, un número indica el idioma de la palabra. (
1
para inglés,2
alemán,3
italiano y4
húngaro). - Las lagunas estándar no están permitidas.
- El uso de listas de palabras de nuestros datos similares proporcionados por su lenguaje de programación está prohibido.
Entrada
- Una cadena que contiene solo letras minúsculas en inglés (az).
- La nueva línea final es opcional.
Salida
- Puede clasificar las palabras proporcionando una salida distinta y coherente (siempre la misma) para cada idioma. (Por ejemplo,
1
para inglés,2
para alemán,3
para italiano y4
para húngaro).
Este es el código de golf, por lo que gana el programa o la función más corta.
Pregunta relacionada con el código de golf: ¿Es esta una palabra?
Las listas de palabras fueron tomadas de wiktionary.org y 101languages.net.
code-golf
natural-language
word
classification
randomra
fuente
fuente
all_languages
archivo incluye docenas de palabras en mayúsculas (Mr
,Gutenberg
, etc.) y los que no son palabras "" (cadena vacía) y "]] | -". ¿Supongo que está bien poner en minúscula la primera y eliminar la segunda?Respuestas:
Retina , 51 bytes
Se me ocurrieron las expresiones regulares y @ MartinBüttner hizo la conversión a / golf en Retina, así que ... ¿hurra por el esfuerzo del equipo?
El mapeo es
1 -> Italian, 2 -> German, (empty) -> Hungarian, 4 -> English
, con la cantidad clasificada en cada categoría4506 + 1852 + 2092 + 3560 = 12010
.Pruébalo en línea! El | Versión multilínea modificada
Explicación
En primer lugar, el Python equivalente es algo como esto:
Déjame decir eso
o$
es un excelente indicador del italiano.La versión Retina es similar, con pares de líneas que forman etapas de reemplazo. Por ejemplo, las dos primeras líneas.
reemplaza las coincidencias de la primera línea con el contenido de la segunda.
Las siguientes tres líneas hacen lo mismo, pero usando el modo anti-grep de Retina - anti-grep (especificado con
A`
) elimina la línea si coincide con la expresión regular dada, y las siguientes dos líneas son un reemplazo de una línea vacía a la salida deseada.La siguiente línea usa anti-grep nuevamente, pero no reemplaza la línea vacía, dando la salida fija para húngaro.
Finalmente, las dos últimas líneas.
reemplaza una línea no vacía sin dígitos con
4
. Todas las sustituciones solo pueden suceder si no se activó ninguna sustitución previa, simulando unaif/else if
cadena.fuente
LabVIEW, 29 primitivas de LabVIEW y 148.950 bytes
recorre los idiomas y coloca el iterador en una matriz si la palabra está allí. Esto se verifica mediante el bucle interno, seleccionando la línea i-ésima y haciendo
=
. En LabVIEW solo da un verdadero si las cadenas son exactamente iguales.Ahora tome el primer elemento de la matriz de salida para que el inglés pase al resto.
La salida por ahora es
0
para inglés,1
alemán,2
italiano y3
húngaro.fuente
Java, 3416 bytes, 62%
esta es mi solución, analizo la lista de palabras dadas y encuentro 60 bigrams y trigrams más comunes para cada idioma. Ahora estoy comprobando mis n-gramas con la palabra, y elijo el idioma con la mayoría de los n-gramas en la palabra.
y este es mi caso de prueba
fuente