Come faccio a tradurre l'input dell'utente in un linguaggio fittizio?

3

Per ragioni sperimentali, sto cercando di convertire l'input dell'utente in un linguaggio fittizio. Tutta la traduzione può essere 1: 1.

Preferirei se riuscissi a farlo con PHP.

Dovrei usare gettext e poedit? Il linguaggio fittizio non è molto grande, immagino di poter fare la maggior parte della traduzione 1: 1

Ho setacciato i googles, ma ho trovato solo codice datato e localizzazione.

    
posta Alex Waters 26.09.2012 - 09:26
fonte

3 risposte

4

gettext è lo strumento sbagliato per quel lavoro. È inteso per tradurre un insieme di messaggi preformattati potenzialmente ampio ma finito, possibilmente con inserimenti variabili, tra le lingue. L'input dell'utente in linguaggio naturale non è un insieme così definito. È meglio definire le trasformazioni che è necessario apportare in termini generali e applicarle all'ingresso ottenuto, ad es. come un insieme di trasformazioni regex memorizzate in una mappa di coppie da-a. Questo è facilmente fatto in PHP.

Ma nota che ci saranno quasi certamente cose che non puoi ottenere con sostituzioni così semplici. "tutti voi" potrebbe essere di solito trasformato in "y'all", ma che dire di "Lascia che ti mostri tutti i nostri più grandi venditori"? A seconda di quanto sia convincente il risultato, il compito potrebbe essere stupendamente più difficile di quanto possa sembrare a prima vista. La traduzione in linguaggio naturale, anche se è solo un "dialetto", è un T. Rex in veste di pecora.

    
risposta data 26.09.2012 - 09:45
fonte
4

Ho fatto questo per un programma di chat una volta. Non hai bisogno di un kit di strumenti. Basta analizzare il testo che è stato inserito (cioè separato da spazi) e mantenere le parole in una matrice. Quindi inizia a lavorare su di loro, guardando le parole e le parole successive. Abbina le sequenze con il tuo dialetto / gergo e, per qualsiasi abbinamento, fai la sostituzione. Quindi, mentre lavori sulle parole, costruisci la stringa di output sia dalla parola originale, sia dalle eventuali sostituzioni che hai trovato.

Potrebbe aiutare a mantenere due array, uno che mantiene il caso e la punteggiatura, e l'altro che converte il testo in minuscolo per semplificare i controlli rispetto al dizionario. Assicurati che i loro indici di array corrispondano. In questo modo quando non trovi una corrispondenza nell'array con testo in minuscolo, puoi stampare il testo originale non modificato.

Per il dizionario, in PHP, puoi sfruttare i suoi array, magari costruiscilo come $words['find'] = 'replace' . O per le sequenze multi-parola, rendilo un array annidato.

Questo dovrebbe darti un discreto primo passaggio a un traduttore. Probabilmente dovrai valutare come gestire cose come "testo tra virgolette" e altri segni di punteggiatura.

    
risposta data 26.09.2012 - 10:03
fonte
3

Stai cercando qualcosa come questo chef / jive / val / pig traduttore ( c'è c / lex fonte lì).

Il traduttore piglatin lavora su ogni parola e riordina i personaggi.

I jive e val traduttori identificano alcune parole intere e le sostituiscono con parole intere alternate (con qualche randomizzazione lanciata a volte).

link funziona sulla traduzione di una grammatica lex in perl (e tra l'altro, funziona sul file chef.l dal primo link). Collega il sorgente perl per una traduzione completa che può essere utile per un programmatore php.

    
risposta data 26.09.2012 - 15:37
fonte

Leggi altre domande sui tag