testdome test online net knowledge examen español dome answers c# algorithm

net - test online c#



¿Cómo se crea una palabra como Inglés? (13)

¿Cómo creas palabras que no son parte del idioma inglés, pero que suenan en inglés? Por ejemplo: janertice, bellagom


Aquí hay un ejemplo de alguien que lo está haciendo . Hablan de las cadenas de Markov y de la prensa disociada .

Aquí hay un código que encontré . Puedes ejecutarlo en línea en el teclado.

import random vowels = ["a", "e", "i", "o", "u"] consonants = [''b'', ''c'', ''d'', ''f'', ''g'', ''h'', ''j'', ''k'', ''l'', ''m'', ''n'', ''p'', ''q'', ''r'', ''s'', ''t'', ''v'', ''w'', ''x'', ''y'', ''z''] def _vowel(): return random.choice(vowels) def _consonant(): return random.choice(consonants) def _cv(): return _consonant() + _vowel() def _cvc(): return _cv() + _consonant() def _syllable(): return random.choice([_vowel, _cv, _cvc])() def create_fake_word(): """ This function generates a fake word by creating between two and three random syllables and then joining them together. """ syllables = [] for x in range(random.randint(2,3)): syllables.append(_syllable()) return "".join(syllables) if __name__ == "__main__": print create_fake_word()



La cadena de Markov es el camino a seguir, ya que otros ya han publicado. Aquí hay una visión general del algoritmo:

  • Sea H un diccionario que asigna letras a otro diccionario que asigna letras a la frecuencia con la que aparecen.
  • Inicialice H escaneando un corpus de texto (por ejemplo, la Biblia o los datos públicos de desbordamiento de pila). Este es un conteo de frecuencia simple. Una entrada de ejemplo podría ser H [''t''] = {''t'': 23, ''h'': 300, ''a'': 50}. También cree un símbolo de "inicio" especial que indique el comienzo de una palabra y un símbolo de "fin" para el final.
  • Genere una palabra comenzando con el símbolo de "inicio", y luego seleccione aleatoriamente una siguiente letra en función de los conteos de frecuencia. Genera cada letra adicional basada en la última letra. Por ejemplo, si la última letra es ''t'', entonces seleccionará ''h'' con probabilidad 300/373, ''t'' con probabilidad 23/373 y ''a'' con probabilidad 50/373. Detente cuando pulses el símbolo "final".

Para hacer que su algoritmo sea más preciso, en lugar de asignar una letra a las siguientes, puede asignar dos letras a la siguiente.


No puedo pensar en ninguna forma cromulenta de hacer esto.


Nota: la lingüística es un pasatiempo, pero de ninguna manera soy un experto en eso.

Primero necesitas obtener un "diccionario" para hablar de fonemas en inglés.

Entonces simplemente los encadenas.

Si bien no es la solución más compleja y precisa, debería llevarlo a un resultado generalmente aceptable.

Es mucho más sencillo de implementar si no comprende las complejidades de las otras soluciones mencionadas.



Si decide utilizar un enfoque simple como el código sugerido por Andy West, puede obtener resultados aún mejores al ponderar las frecuencias de las vocales y las consonantes para que correspondan con las que ocurren normalmente en el idioma inglés: Wikipedia: Letter Frequency

Incluso puedes ir tan lejos como para ver las frecuencias de las letras emparejadas o las secuencias de tres letras, pero en ese momento estás implementando la misma idea que la cadena de Markov que otros han sugerido. ¿Es más importante que las "palabras falsas" parezcan potencialmente auténticas para los humanos, o son las propiedades estadísticas de las palabras más importantes, como en las aplicaciones criptográficas?


Tome el comienzo de una palabra en inglés y el final de otra y concatene.

P.ej

Fortuna + totalidad = fortalidad

Es posible que desee agregar algunas reglas más como solo cortar las palabras en los límites de las consonantes-vocales y así sucesivamente.


Un enfoque que es relativamente fácil y efectivo es ejecutar un generador de cadena de Markov por carácter en lugar de por palabra, utilizando un gran corpus de palabras en inglés como material de origen.


Una práctica común es construir una Cadena de Markov basada en las transiciones de letras en un "conjunto de entrenamiento" formado por varias palabras (¿noums?) De un léxico inglés, y luego dejar que esta cadena produzca palabras "al azar" para usted.



Use n-grams basado en los corpus ingleses con n> 3, que le da una aproximación.


Creo que esta historia responderá muy bien a tu pregunta.

Describe bastante bien el desarrollo de un algoritmo de cadena de Markov, incluidos los escollos que surgen.