2009-12-11 9 views
20

Come si creano parole che non fanno parte della lingua inglese, ma suono l'inglese? Ad esempio: janertice, bellagomCome si crea una parola simile alla lingua inglese?

+0

Perché dovresti farlo? – dacracot

+12

Una catena di Markov costruita da un database di sillabe inglesi sembra un approccio ragionevole. Cosa hai provato fino ad ora? –

+11

Non lo so, ma ho visto alcuni altri utenti qui che sembrano aver imparato quest'arte. –

risposta

0

Una pratica comune è quella di creare un Markov Chain basato sulle transizioni di lettere in un "set di allenamento" composto da più parole (noum?) Da un lessico inglese, e quindi lasciare che questa catena produca parole "casuali" per te.

2

Un approccio relativamente semplice ed efficace consiste nell'eseguire un numero di caratteri per Markov chain generator anziché per parola, utilizzando un grande corpus di parole inglesi come materiale di origine.

3

Ecco uno example of somebody doing it. Parlano di Markov chains e dissociated press.

Ecco alcuni code I found. È possibile run it online al codepad.

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() 
+0

Questo post mi ricorda i post del blog di Raymond Che (con tutti i link);) – RCIX

+1

Oops, Raymond * Chen * ... – RCIX

2

Nota: Linguistica è un hobby, ma sono in alcun modo un esperto in esso.

Per prima cosa è necessario ottenere un "dizionario" per così dire dei fonemi inglesi.

Quindi li stringa semplicemente insieme.

Pur non essendo la soluzione più complessa e accurata, dovrebbe portare a un risultato generalmente accettabile.

Molto più semplice da implementare se non si capisce la complessità delle altre soluzioni citate.

3

L'utilizzo delle catene Markov è un modo semplice, come già sottolineato. Basta fare attenzione che non si finisce con uno Automated Curse Generator.

3

Penso che this story risponda alla tua domanda abbastanza bene.

Descrive lo sviluppo di un algoritmo di catena di Markov abbastanza bene, comprese le insidie ​​che si presentano.

14

Prendere l'inizio di una parola inglese e la fine di un'altra e concatenare.

E.g.

Fortune + totalità = fortality

Si potrebbe voler aggiungere più regole come solo tagliare le parole sui confini consonante-vocale e così via.

+1

Invisito per semplicità. – esac

+0

Sono d'accordo. Le persone riorganizzano prefissi/infissi/suffissi in ogni momento inconsciamente per creare nuove parole inglesi. È un algoritmo eccezionalmente semplice (euristico?) Nella mente, quindi non sarebbe difficile da implementare nel codice. Sono felice di contribuire a upvotedness di questo post =) –

+0

E quindi controllare il dizionario per assicurarsi che non sia reale. – Tatarize

0

La catena di Markov è la strada da percorrere, come altri hanno già pubblicato. Ecco una panoramica dell'algoritmo:

  • Sia H un dizionario che mappa le lettere in un altro dizionario che mappa le lettere con la frequenza con cui si verificano.
  • Inizializza H mediante la scansione di un corpus di testo (ad esempio, la Bibbia o i dati pubblici Overflow dello stack). Questo è un semplice conteggio delle frequenze. Una voce di esempio potrebbe essere H ['t'] = {'t': 23, 'h': 300, 'a': 50}. Crea anche uno speciale simbolo "start" che indica l'inizio di una parola e un simbolo di "fine" per la fine.
  • Generare una parola iniziando con il simbolo "start" e quindi selezionando a caso una lettera successiva in base ai conteggi di frequenza. Genera ogni lettera aggiuntiva in base all'ultima lettera. Ad esempio, se l'ultima lettera è "t", allora scegli "h" con probabilità 300/373, "t" con probabilità 23/373 e "a" con probabilità 50/373. Fermati quando colpisci il simbolo "fine".

Per rendere l'algoritmo più accurato, anziché mappare una lettera alle lettere successive, è possibile mappare due lettere alla lettera successiva.

2

Utilizzare n-gram basati sui corpora inglesi con n> 3, per ottenere un'approssimazione.

2

Non riesco a pensare a modi cromatici per farlo.

+2

;-) Questo tipo di umorismo è molto gradito in SO. (Ci aiuta a rimanere con materiale altrimenti essenziale e ci impedisce anche di prenderci troppo sul serio. Questo ha detto che questo tipo di linee dovrebbero essere poste come commento alla domanda, non come risposta! Grazie. – mjv

0

Se si decide di andare con un approccio semplice come il codice Andy West suggerito, si potrebbe ottenere risultati ancora migliori ponderando le frequenze di vocali e consonanti a corrispondere con quelli che si verificano normalmente in lingua inglese: Wikipedia: Letter Frequency

Potresti persino spingermi a guardare le frequenze di lettere accoppiate o sequenze di tre lettere, ma a quel punto stai implementando la stessa idea della catena di Markov che altri hanno suggerito. È più importante che le "false parole" sembrino potenzialmente autentiche per gli esseri umani, o le proprietà statistiche delle parole più importanti, come nelle applicazioni crittografiche?

Problemi correlati