Cómo detectar si a una cadena le faltan espacios entre palabras

Solo puedo pensar en varias soluciones, pero no soy un experto y ninguna de ellas suena bien …

Si solo desea detectar hasta un espacio faltante, podría generar un diccionario que contenga la combinación de cada palabra con la otra palabra (incluida ella misma), y simplemente calcular la distancia de edición normalmente; debería darle una respuesta de 1, a saber, el espacio eliminado. Esto explotaría un diccionario de 20 000 palabras a 400 020 000 palabras, pero ¿probablemente podría podar esto de alguna manera? También reconocerá algunas palabras mal escritas como dos palabras correctas con un espacio perdido, incluso si eso no es lo que son. Supongo que necesitará una manera de comprender el significado de las oraciones para la poda y la detección de correcciones sin sentido.

También podría probar todas las variantes en las que podría faltar un espacio con un diccionario normal y buscar la suma más pequeña o algo así, pero esto significa que para una palabra de tamaño [math] n [/ math] deberá hacer [ math] 2 ^ {n-1} [/ math] consultas (hay posiciones [math] n-1 [/ math] donde un espacio puede estar presente o no). Si, de nuevo, desea que solo se detecte un espacio faltante, necesitará consultas [matemáticas] n [/ matemáticas].

Supongo que la tercera opción es tener solo frases en su diccionario, lo que dará como resultado un tamaño de diccionario razonable y solo una consulta por palabra.

No estoy seguro si pasa por “modificación”, pero ¿por qué no ejecutar palabras no reconocidas a través de una rutina de descomposición donde cada palabra se divide en coincidencias (y solo si encuentra todas las partes, puede considerar que se reconoce) y luego agregue el número de palabras unidas a la distancia de Levenshtein.

No hay cambio Las métricas de distancia funcionan en función de la cantidad de cambios de caracteres, y los espacios son caracteres. Si quisieras ignorar los espacios, deberías codificar eso en especial.

Debo agregar que en algunos idiomas, como en danés, algunas palabras se pueden agregar en una sola palabra, es decir, también necesita saber la clase de la palabra, por ejemplo, rugbrødsmotor, que se traduce en “motor de pan negro”, que significa utilizar el cuerpo humano para proporcionar energía! 🙂
En teoría, estas palabras pueden ser infinitamente largas.

Piensa en estas líneas. Necesitaría un diccionario de raíces y prefijos disponibles y enseñarle a su sistema qué tipo de prefijos puede tomar una palabra raíz, luego busque las palabras raíz en su cadena y busque hacia atrás. Si hay un espacio en blanco, entonces está listo; de lo contrario, debería ser un prefijo.