26
Apr
08

Ling - Indovina la lingua

ssh

Quanti di voi hanno mai avuto bisogno di sapere, in modo automatico, in che lingua è scritto un dato testo? Nessuno.

Bene, io ne avevo bisogno così mi sono messo a cercare per il web e ho trovato molta letteratura in merito e ho realizzato un piccolo servizio web per riconoscere la lingua di un testo reperibile a questo indirizzo: www.cli.di.unipi.it/~bacciane/ling/

Il metodo che ho utilizzato, e che vado a descrivere, è basato su analisi di frequenza dei 3-grammi estratti da un testo letterario molto lungo appartente alle lingue che si vogliono identificare.

Iniziamo quindi chiedendoci cosa sono gli n-grammi, in generale un n-gramma è una sottosequenza di n elementi di una sequenza più grande, detto così in effetti non è molto chiaro ma lo sarà con un semplice esempio.

Prendiamo la parola “Casapiddu” e produciamo un 3-gramma delle lettere, il risultato sarà

Cas, asa, sap, api, pid, idd, ddu

in alcuni casi si aggiungono anche i 3-grammi _Ca, du_, u__. (Dove _ indica lo spazio)

L’uso degli n-grammi è molto diffuso nell’elaborazione del linguaggio naturale, ma la loro invenzione si fa risalire agli studi di quello che dai più è ritenuto il nostro padre fondatore: Claude Shannon, egli infatti si chiese se data una sequenza di lettere in una frase si potesse prevedere quale sarebbe stata la prossima lettera della frase, il metodo degli n-grammi per quanto sottoposto a moltissime critiche si è rivelato nella pratica veramente potente in moltissimi ambiti in cui è possibile applicare modelli statistici o di Markov.

Insomma abbiamo capito che gli n-grammi sono una figata, ma la cosa ancora più stupefaciente è che ogni lingua ha una sua specifica distribuzione di frequenza di 3-grammi.

Intendo dire che valutando in modo statistico i 3-grammi più frequenti in un testo e confrontandoli con quelli di un’altra lingua possiamo capire se il testo è o non è in quella lingua.

Per esempio in italiano i primi 5 trigrammi più frequenti sono:

  1. _di
  2. to_
  3. la_
  4. _de
  5. di_

Ecco quindi il metodo utilizzato, prima di tutto dobbiamo avere da una parte la lista dei trigrammi più frequenti della lingua, e questa la possiamo ottenere analizzando brani molto lunghi di quella lingua, poi dato un testo lo convertiamo in trigrammi e lo confrontiamo con ogni lingua per vedere a quale è più vicina.

tabella di frequenza

Per testi lunghi questo metodo ha una precisione del 100%, certo assomiglia in un qualche modo alla distribuzione di frequenza delle lettere in ogni lingua, utilizzata spesso dagli hacker per decriptare i testi, o da me per vincere al gioco dell’impiccato, ma è molto più precisa.


1 Risposta a “Ling - Indovina la lingua”


  1. 1 Lorenzo M 27 Aprile 2008 alle 15:11:48

    bel lavoretto! io usavo http://www.lexicool.com/language-identifier-guesser.asp?IL=2
    testerò anche la bontà del tuo. muhuha.

Lascia una Risposta