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()
Considere este algoritmo , que en realidad es solo un caso degenerado de una cadena de Markov .
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.
Quizás te interese ¿Cómo puedo determinar si una cadena aleatoria suena como en inglés?
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.
Usar las cadenas de Markov es una manera fácil, como ya se señaló. Solo tenga cuidado de no terminar con un thedailywtf.com/articles/the-automated-curse-generator.aspx .
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.