Home

Alessandro Graps mi ha chiesto consigli su come classificare il contenuto di un file excel, correggendo, se possibile gli errori in modo automatico. La sua idea iniziale era di utilizzare la logica  Fuzzy per correggere gli errori di battitura. A mio avviso delle reti neurali o delle semplici correlazioni avrebbero risolto il problema.
Con le reti neurali avrebbe dovuto, prima di tutto far apprendere alla sua rete le parole da riconoscere, ma queste non sono note a priori. Sarebbe necessaria quindi una rete in grado di apprendere in modo autonomo. Tra l’altro mi ritroverei delle reti molto grandi e un numero notevole di simboli catalogati.
Gli propongo di provare a calcolare la distanza tra le parole.

La prima parola ricevuta finisce in un archivio di simboli; la seconda parola viene confrontata con la prima e si calcola la distanza tra le due. Nel caso la distanza sia inferiore ad un numero prefissato, i due simboli si considerano uguali, altrimenti un nuovo simbolo è generato.
La distanza? si, in effetti è possibile calcolare la distanza tra parole. Tra l’altro proprio Alessandro ha postato recentemente sull’argomento. Io pensavo a qualcosa tipo la distanza di Hamming in uso nei codici numerici. In effetti esistono algoritmi specifici per il linguaggio naturale. L’algoritmo citato da Alessandro è quello che su Google propone le correzioni sui termini ricercati (la distanza di Levenshtein o distanza di edit ).
Quando il numero di simboli cresce, dovrò eseguire un grande numero di paragoni, calcolando di volta in volta la distanza tra le parole.

Distanza tra due punti senza alcun riferimento assoluto

In effetti non è molto prestante. Per migliorare potrei però calcolare la distanza tra ogni parola (anche la prima ricevuta) ed una parola neutra.

Calcolo la distanza di ogni parola da una parola campione P0

Vediamo un esempio.
Ricevo la prima parola: “abate” e ne calcolo la distanza con una parola campione per esempio: “aaaaa”.
Utilizzando la la distanza di Levenshtein ottengo: 3 [Si può verificare online!]
Salverò in una tabella sia la parola “abate” che la distanza calcolata.

parole
name distanza
3 abate
3 casa
4 mela
6 pattern

Quando riceverò la seconda parola: “abete”. Ne calcolo la distanza rispetto ad “aaaaa”: 4. Per verificare la vicinanza alle parole presenti nel sistema mi è sufficiente una query in cui filtro direttamente sulle distanze vicine a 4 (nell’intorno di 4).

select name, distanza from parole where  3 < distanza < 5

E’ critica la scelta del parametro da utilizzare per determinare l’intorno in cui considerare 2 simboli identici o no.

Attendo conferme da Alessandro!

[fonte immagine: http://www.cabap.org/science/measure-and-estimate-the-weight-length-or-volume-of-objects%5D

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...