Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Algoritmo riconoscimento parole simili
Forum - Algoritmi - Algoritmo riconoscimento parole simili

Avatar
Tinwor (Normal User)
Newbie


Messaggi: 3
Iscritto: 16/02/2015

Segnala al moderatore
Postato alle 15:19
Martedì, 24/02/2015
Lavorando a stretto contatto nel mondo dell'IoT mi è venuta la malsana idea(più che altro è una martellata in testa) di codificare un'applicazione che permette l'input di linguaggio natuale, e.g. Jemma open the door(lingua scelta è l'Inglese per la relativa semplicità della grammatica), e una volta riconosciuto il comando viene inviata una richiesta via API al framework in questione.
E fino a questo punto ci arrivo senza troppi problemi. Visto che l'applicazione è leggera e non consuma troppe risorse mi è venuta un'idea ancora peggiore: "se l'utente sbaglia l'input, ad esempio doorluck anzichè doorlock, perchè non posso implementare qualcosa che gli consiglia la parola che più si avvicina?"
Ho pensato di implementare l'algoritmo di Levenshtein e poi quello di Sift3 ma ho pensato "dal momento che non è farina del mio sacco perché non posso reinventare la ruota?"
E allora ho dato libero sfogo alla mia fantasia, sono andato in memory leak un paio di volte, e dopo parecchio tempo ho concepito questa idea: perchè non fare una matrice con all'interno la disposizione delle lettere nella tastiera(caricata poi da un file, per comodità l'ho pensato in QWERTY) e dare un peso(costante) ad ogni singola cella?
Esempio: mi aspetto in input S e invece mi Arriva Q. Nella matrice S è situato nella cella [1,1] mentre Q nella cella[0,0]. Dopo essermi calcolato la distanza(|Xq-Xs|+|Yq-Ys| = 2) lo moltiplico per C(la costante) e sommo il risultato in una variabile esterna al ciclo di comparazione.
Esempio ancora più pratico:
Input AWERTY
Diionario interno: QWERTY, QWIRTA, QWEFGH
Prima comparazione: solo una differenza, accettabile, salvo parola e risultato della comparazione in un oggetto(parola ideale? String e int)
Seconda comparazione: due differenze, accettabile? si, comparo il risultato int ottenuto con quello salvato in precedenza? E' maggiore? Si, risultato non accettabile.
E via discorrendo fino a che non ho finito il dizionario(naturalmente comprareò solamente le parole di ugual lunghezza). A questo punto prendo la parola che più si avvicina nel mio dizionario ricompongo la frase e gli scrivo: forse non stavi cercanfo QWERTY?
Avete consigli? Volete chiamare un'ambulanza e farmi ricoverare? Scrivetelo qua sotto :rofl:

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 22:25
Martedì, 24/02/2015
Potrebbe interessarti questo:
http://www.drdobbs.com/database/ternary-search-trees/18441 ...

trovi l'implementazione della struttura dati nella prima pagina

PM Quote
Avatar
Tinwor (Normal User)
Newbie


Messaggi: 3
Iscritto: 16/02/2015

Segnala al moderatore
Postato alle 23:12
Martedì, 24/02/2015
Già implementato ma è diventa pesante per sistemi embedded :d

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 0:23
Mercoledì, 25/02/2015
Testo quotato

Postato originariamente da Tinwor:sistemi embedded :d


Estremamente generico, un sistema embedded non è per forza un sistema con poche risorse e bassa potenza di calcolo.

PM Quote
Avatar
lollo 97 (Member)
Rookie


Messaggi: 50
Iscritto: 27/06/2011

Segnala al moderatore
Postato alle 1:36
Mercoledì, 25/02/2015
Se vuoi creare un chatbot o anche un bot con funzionalità più pratiche che non solo conversarci puoi provare AIML, un linguaggio di markup molto semplice da usare e crearne un lettore!

Trovi esempi in C# e vari altri linguaggi..
Qui in C#: http://sourceforge.net/projects/aimlbot/



PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 12:50
Mercoledì, 25/02/2015
Testo quotato

Postato originariamente da Tinwor:

Lavorando a stretto contatto nel mondo dell'IoT mi è venuta la malsana idea(più che altro è una martellata in testa) di codificare un'applicazione che permette l'input di linguaggio natuale, e.g. Jemma open the door(lingua scelta è l'Inglese per la relativa semplicità della grammatica), e una volta riconosciuto il comando viene inviata una richiesta via API al framework in questione.
E fino a questo punto ci arrivo senza troppi problemi. Visto che l'applicazione è leggera e non consuma troppe risorse mi è venuta un'idea ancora peggiore: "se l'utente sbaglia l'input, ad esempio doorluck anzichè doorlock, perchè non posso implementare qualcosa che gli consiglia la parola che più si avvicina?"
Ho pensato di implementare l'algoritmo di Levenshtein e poi quello di Sift3 ma ho pensato "dal momento che non è farina del mio sacco perché non posso reinventare la ruota?"
E allora ho dato libero sfogo alla mia fantasia, sono andato in memory leak un paio di volte, e dopo parecchio tempo ho concepito questa idea: perchè non fare una matrice con all'interno la disposizione delle lettere nella tastiera(caricata poi da un file, per comodità l'ho pensato in QWERTY) e dare un peso(costante) ad ogni singola cella?
Esempio: mi aspetto in input S e invece mi Arriva Q. Nella matrice S è situato nella cella [1,1] mentre Q nella cella[0,0]. Dopo essermi calcolato la distanza(|Xq-Xs|+|Yq-Ys| = 2) lo moltiplico per C(la costante) e sommo il risultato in una variabile esterna al ciclo di comparazione.
Esempio ancora più pratico:
Input AWERTY
Diionario interno: QWERTY, QWIRTA, QWEFGH
Prima comparazione: solo una differenza, accettabile, salvo parola e risultato della comparazione in un oggetto(parola ideale? String e int)
Seconda comparazione: due differenze, accettabile? si, comparo il risultato int ottenuto con quello salvato in precedenza? E' maggiore? Si, risultato non accettabile.
E via discorrendo fino a che non ho finito il dizionario(naturalmente comprareò solamente le parole di ugual lunghezza). A questo punto prendo la parola che più si avvicina nel mio dizionario ricompongo la frase e gli scrivo: forse non stavi cercanfo QWERTY?
Avete consigli? Volete chiamare un'ambulanza e farmi ricoverare? Scrivetelo qua sotto :rofl:



L'idea mi sembra buona :k:


If ok Then GOTO Avanza else GOTO Inizia

PM Quote