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




Difendi Rebeldia!

Aggiungi ai tuoi feed

 RSS Feed
Add to Google
Add to My Yahoo!
Add to Technorati Favorites!
Add to netvibes

Blog Stats

  • 150,641 hits

Pidduisti on-line

hit counters


Made on a Mac
Last.fm

SocialVibe


Giveaway of the Day
highlightInterests("ProfileMusica");
Musicatable.lfmWidget8f0839bdbf919d97305135788e54986d td {margin:0 !important;padding:0 !important;border:0 !important;}table.lfmWidget8f0839bdbf919d97305135788e54986d tr.lfmHead a:hover {background:url(http://cdn.last.fm/widgets/images/en/header/chart/weeklytracks_regular_blue.png) no-repeat 0 0 !important;}table.lfmWidget8f0839bdbf919d97305135788e54986d tr.lfmEmbed object {float:left;}table.lfmWidget8f0839bdbf919d97305135788e54986d tr.lfmFoot td.lfmConfig a:hover {background:url(http://cdn.last.fm/widgets/images/en/footer/blue.png) no-repeat 0px 0 !important;;}table.lfmWidget8f0839bdbf919d97305135788e54986d tr.lfmFoot td.lfmView a:hover {background:url(http://cdn.last.fm/widgets/images/en/footer/blue.png) no-repeat -85px 0 !important;}table.lfmWidget8f0839bdbf919d97305135788e54986d tr.lfmFoot td.lfmPopup a:hover {background:url(http://cdn.last.fm/widgets/images/en/footer/blue.png) no-repeat -159px 0 !important;}

pages

 

Aprile 2008
L M M G V S D
« Mar   Mag »
 123456
78910111213
14151617181920
21222324252627
282930