¿Cómo puedo analizar una cadena y obtener oraciones aleatorias en C#?
Estoy tratando de descubrir cómo analizar una cadena en este formato en una estructura de datos de árbol de profundidad arbitraria.
y después de eso hacer frases aleatorias.
“{{Hola,Hola,Hola} {mundo,Tierra},{Adiós,despedida} {planeta,roca,tierra{.,!}}}”
donde
, significa o
{ significa expandir
} significa colapsar hasta el padre
Por ejemplo, quiero obtener una salida como esta:
1) Hola mundo planeta.
2) Hola Tierra roca!
3) Adiós Tierra.
y así sucesivamente.
davy.ai
Para analizar la cadena dada en una estructura de datos similar a un árbol de profundidad arbitraria, podemos utilizar un enfoque recursivo. Podemos definir una clase para los nodos en el árbol, donde cada nodo tiene un valor y una lista de nodos hijos. El valor de un nodo puede ser una cadena o una lista de subnodos, dependiendo de si el nodo representa un grupo o un nodo hoja.
Aquí hay una implementación de ejemplo:
Este método camina de forma recursiva a través de la cadena de entrada, creando nodos según sea necesario para grupos y nodos hoja. Los métodos
FindMatchingClosingBracket
yFindNextSeparatorOrBracket
son funciones auxiliares para encontrar el corchete de cierre coincidente y el siguiente separador o corchete, respectivamente.Una vez que tenemos la estructura de datos similar a un árbol, podemos generar oraciones aleatorias recorriendo de forma recursiva el árbol y concatenando los valores de los nodos hoja. Aquí hay una implementación de ejemplo:
Este método elige aleatoriamente un nodo hijo (si el nodo actual es un grupo) y genera de forma recursiva la oración desde ese nodo hijo. Cuando se alcanza un nodo hoja, su valor se agrega a la oración. Finalmente, el método concatena la oración generada a partir del nodo hijo (si hay alguno) a la oración del nodo actual, con un espacio en el medio.
Con estos métodos, podemos analizar fácilmente la cadena de entrada y generar oraciones aleatorias. Aquí hay un ejemplo de uso:
Esto imprimirá 10 oraciones aleatorias, como:
Adiós globo.
Hola tierra roca!
Hey mundo planeta.
Despedida globo.
Hey mundo globo!
Adiós planeta.
Hola tierra planeta!
Hey tierra globo.
Despedida roca.
Hola tierra globo.