PDA

Visualizza versione completa : Implementazione T9 su PC


c1p8
13-07-2004, 16.54.12
Avevo scritto il seguente articolo per un news-magazine online ma non era interessante, mi è stato detto. Lo posto qui, anche se, forse, non è il “posto” giusto dover metterlo… chissà che a qualcuno serva…

Il T9… questo sconosciuto
Una grande invenzione, certo, ma come funziona?
Quanti di voi si sono mai chiesti come funziona il T9, quel “magico” softwarino che, presente ormai in ogni telefonino nelle varianti più disparate, ci permette di scrivere le parole utilizzando un minor numero di ripetizioni per tasto.

A me la voglia di capirne il funzionamento è nata quando l’ennesima batteria del mio vecchio cellulare ha tirato le cuoia e, fatti due conti, mi conveniva di più comprarne uno nuovo che cambiarla nuovamente.
Così, presa confidenza con il nuovo, a confronto col vecchio, mostro supertecnologico, mi sono lasciato ammaliare dall’uso del T9 iniziando a chiedermi come potesse, un semplice cellulare, capire quale parola, in diverse lingue, l’utente intendesse digitare.
Scartata l’ovvia deduzione che nei nostri cellulari non si annida un software d’intelligenza artificiale, considerata la bassa velocità dei microprocessori che sovrintendono alle funzioni del telefonino, la soluzione doveva risiedere in un algoritmo semplice e veloce.

Ci ho perso alcuni giorni, nei momenti liberi, ma proprio non riuscivo a raccapezzarmi; poi, una notte l’illuminazione (dormire no, eh! direte voi…) e così il mattino dopo, di buona lena, mi metto al lavoro.

Creo un file di prova e lo chiamo T9.txt (che fantasia) buttandoci dentro una decina di nomi di parenti, amici, colleghi (in ordine sparso, non importa), poi con qbasic (si, proprio lui, quel linguaggio che ha accompagnato la storia dei vari MS-DOS e windows vari :) ) scrivo il seguente programmino.


'numero massimo di termini del dizionario
x = 50

'vocaboli caricati
DIM dizio(x) AS STRING
'codice numerico per ogni vocabolo
DIM diziot9(x) AS STRING

'cancello lo schermo
CLS
PRINT "Attendi: caricamento vocaboli... "

'indice per i vocaboli del dizionario
x = 1

OPEN "c:\t9.txt" FOR INPUT AS #1
'per ogni singola riga del file (= un vocabolo)...
WHILE NOT EOF(1)
INPUT #1, a$
'per ogni singolo carattere...
FOR i = 1 TO LEN(a$)
x$ = UCASE$(MID$(a$, i, 1))
'assegno il corrispondente codice numerico
SELECT CASE x$
CASE "A" TO "C"
t9 = 8
CASE "D" TO "F"
t9 = 9
CASE "G" TO "I"
t9 = 4
CASE "J" TO "L"
t9 = 5
CASE "M" TO "O"
t9 = 6
CASE "P" TO "S"
t9 = 1
CASE "T" TO "V"
t9 = 2
CASE "W" TO "Z"
t9 = 3
END SELECT
t9$ = t9$ + LTRIM$(STR$(t9))
NEXT
'e memorizzo il codice
diziot9(x) = t9$
'ed il vocabolo stesso
dizio(x) = a$
t9$ = ""
x = x + 1
WEND
CLOSE
x = x - 1
PRINT "Caricati "; x; " vocaboli"


Cosa fa in pratica, soprattutto per i non addetti ai lavori che, però, vogliono comprendere un po’ di più la tecnologia che hanno tra le mani: legge dal file di testo precedentemente creato tutti i vocaboli (max 50, poi il programma va in errore), uno per riga, e li trasforma in una serie numerica che dipende dal vocabolo stesso in funzione di dove compare la lettera sulla tastiera del telefonino, ad esempio:
CIAO = 8486
(rispetto al T9, dovendo utilizzare il tastierino numerico del PC, i numeri cambiano; 7=1, 8=2, 9=3, d'altronde non è mica colpa mia se i telefoni hanno la tastiera in un modo e i PC in un altro… ;) )

Quindi ho proseguito con la parte che riordina il dizionario risultante in ordine crescente per codice, NON per vocabolo, così il software deve confrontare solamente i primi “n” caratteri inseriti per verificare se esiste un vocabolo nel dizionario.

PRINT "Riordino vocabolario"
'riordino il vocabolario
FOR i = 1 TO x - 1
FOR j = i + 1 TO x
IF diziot9(i) > diziot9(j) THEN
SWAP dizio(i), dizio(j)
SWAP diziot9(i), diziot9(j)
END IF
NEXT
NEXT

Un po’ di aiuto per l’utente…

CLS
PRINT "Digita la stringa sul tastierino numerico usando il T9"
PRINT
PRINT " 7 8 9"
PRINT " ABC DEF"
PRINT
PRINT " 4 5 6"
PRINT " GHI JKL MNO"
PRINT
PRINT " 1 2 3"
PRINT " PQRS TUV WXYZ"
PRINT
PRINT " 0 <-- ESC"
PRINT " spazio cancella Esce"

E, finalmente, il cuore del programma vero e proprio…


1 DO
a$ = INKEY$
LOOP WHILE a$ = ""

'Tasto ESC = fine programma
IF a$ = CHR$(27) THEN
END
END IF

'Tasto 0 = SPAZIO
IF a$ = "0" THEN
t9$ = ""
p = p + l + 1
l = 0
GOTO 1
END IF

'codice ASCII 8 = BACKSPACE
IF a$ = CHR$(8) THEN
IF l > 0 THEN
t9$ = LEFT$(t9$, l - 1)
l = l - 1
'posiziono il cursore e cancello l'ultimo carattere
LOCATE 15, 1 + p + l: PRINT " "
LOCATE 20, 1 + p + l: PRINT " "
GOTO 1
END IF
END IF

IF a$ < "1" OR a$ > "9" THEN 1

t9$ = t9$ + LTRIM$(a$)

'numero di caratteri della stringa in esame
l = l + 1

'posiziono il cursore
LOCATE 15, 1 + p: PRINT t9$

LOCATE 20, 1 + p:
FOR i = 1 TO x
IF LEFT$(diziot9$(i), l) = t9$ THEN
PRINT LEFT$(dizio$(i), LEN(t9$))
EXIT FOR
END IF
NEXT

GOTO 1

Cosa fa questa parte: attende che l’utente prema un tasto, se è 0 (zero) allora considera terminato il vocabolo e vi permette di inserirne uno nuovo, se corrisponde a Backspace allora cancella un carattere a sinistra, se è ESC, termina il programma.

Se invece è compreso tra 1 e 9 cerca nel dizionario il corrispondente codice memorizzandolo nella stringa t9$.

Successivamente controlla nel dizionario dei vocaboli (diziot9$) se esiste una corrispondenza basandosi sul numero delle lettere inserite finora (se si toglie questa limitazione si può fargli anche scrivere una parola completa qualora la combinazione sia soddisfatta una sola volta, ma questa è tutta un’altra storia…), in tal caso la scrive, dinamicamente, man mano che una corrispondenza viene trovata nel dizionario.

Certo, è lo scheletro di base, non permette la selezione di vocaboli alternativi (però se nel dizionario i nomi propri sono inseriti in maiuscolo lui li scrive automaticamente in modo corretto, e questo il T9, almeno nella versione in mio possesso, non lo fa), non è nemmeno velocissimo, se non trova un vocabolo non scrive niente, però funziona…

Potete provare il programma utilizzando l’allegato ed il dizionario che, lo ribadisco, deve trovarsi nel direttorio principale del disco C:.

Spero di essere stato chiaro, aspetto i vostri commenti in merito; il programma è libero da copyright vari e può essere distribuito ed adattato senza problemi.

Qualcuno di voi si chiederà: ma cosa me ne faccio di un programma così sul pc? Risposta: provate a pensare ad un utente “diversamente abile”, con problemi di manualità, che magari può inserire le lettere una sola per volta sulla tastiera; poter utilizzare solo 9 tasti per farlo è sicuramente un grande vantaggio per la velocità d’inserimento.

Ciao

c1p8

P8257 WebMaster
13-07-2004, 17.09.59
Ciao,
interessante l'articolo (Y) .. complimenti.

Spero lo ritengano interessante anche i moderatori della sezione e valutino se pubblicarlo magari nella sezione FAQ .. o simile

Bye :cool:

Dav82
16-07-2004, 23.50.22
Me l'ero perso.. :S

Complimenti, veramente. E' molto interessante, sia dal punto di vista algoritmico (molti diranno: ma va, guarda come è semplice! Ma da soli non riuscirebbero mai ad immaginarsi una cosa del genere) che dal punto di vista dell'utilità (Y)

Guarda, è veramente bella come cosa.

Se fra tutti i mille e poi mille lavori che mi prendono mi rimane qualche oretta/giorno libera, provo a buttar giù qualcosa. Non nel linguaggio che hai usato tu - che non conosco - ma in java, che è quello che conosco meglio, per la gioia di Deep73! :)

Adios! :)

unomichisiada
17-07-2004, 02.05.44
Mi associo nel farti i complimenti,e nel dire che se mi rimane un po di tempo dopo gli esami mi tento una riscrittura ed eventualmente un potenziamento in C o C++.nel caso ti farò avere il risultato del mio lavoro postandolo quì sul forum.Per ora rimane solo un proposito.Ciao ciao

victor-vis
14-11-2010, 12.49.46
Ciao, mi chiamo Vittorio e ho letto il tuo post sull' Implementazione T9 su PC: non conosco linguaggi di programmazione ma sono molto interessato ad un programmino che simuli la tastiera del telefonino per poter scrivere sul pc col T9.
Ti chiedo troppo di farmi tu il programmino? :-)
oppure sai indicarmi qalche programmino già fatto da qualcuno?

Grazie mille in anticipo e aspetto tua risposta!

Sergio Neddi
15-11-2010, 13.14.23
E' un thread del 2004... non so se avrà risposta.

c1p8
15-11-2010, 14.11.38
Ciao, mi chiamo Vittorio e ho letto il tuo post sull' Implementazione T9 su PC: non conosco linguaggi di programmazione ma sono molto interessato ad un programmino che simuli la tastiera del telefonino per poter scrivere sul pc col T9.
Ti chiedo troppo di farmi tu il programmino? :-)
oppure sai indicarmi qalche programmino già fatto da qualcuno?

Grazie mille in anticipo e aspetto tua risposta!

Ciao Vittorio, il programmino in realtà è quello pubblicato nel forum, non è il massimo ma lo scopo non era certo quello di permettere ad un utente di usare il pc per scrivere col T9 (anche se una successiva implementazione del programma stesso è stata incorporata in un software per semplificare la scrittura da parte di disabili).

Sinceramente non ho il tempo di dedicarmi ad un ottimizzazione dello stesso (altrimenti l'avrei già fatto e messo in commercio ;) )

Mi spiace, però puoi sempre provare a rivolgerti a qualche tuo amico/conoscente che conosce qualche linguaggio di programmazione per implementarlo... anche perchè il listato è ampiamente commentato...

Ciao!

victor-vis
15-11-2010, 16.36.26
grazie lo stesso! ;-) non conosco nessuno che sappia implementare il codice....ho trovato FastWrite in trial version e sembra sia proprio quello che fa al caso mio ma com erial non funziona bene e cmq è un software vecchio e lo stesso autore non è piu' interessato a venderlo! :-)

afibi
21-07-2012, 17.56.27
Ciao ci1p8 leggo che un'implementazione del programma è stata incorporata in un software per semplificare la scrittura da parte dei disabili.
Sono il padre di una ragazza disabile e penso che una funzionalità del genere sarebbe utile per mia figlia.
Mi puoi dare qualche ragguaglio e a chi rivolgermi?

c1p8
21-07-2012, 23.23.14
Ciao afibi, potresti dare un'occhiata a questo sito: http://koti.mbnet.fi/korsu/ft.html

Ma che esigenze hai in particolare?

afibi
23-07-2012, 14.07.27
Attualmente uso per la comunicazione facilitata un comunicatore manuale
di cui ti allego la foto. Le dimensioni sono quelle di un foglio A4 disposto in orizzontale.
E' impostato, come vedi, come la tastiera del telefonino.
Ma devo fare tutto manualmente.
Ho bisogno che diventi una specie di tablet (dimensioni formato A4) del tipo touch screen. Man mano che si digitano i vari tasti, compone la parola, applicando il software T9 o simili. Il testo composto compare in un apposito spazio, da individuare.
Non sono un programmatore, ma se serve posso cercare del personale esperto.
Ti aggiungo che un amico programmatore ha modificato l'app it9sms per Ipad che applica la tastiera T9 su Ipad e ha ingrandito la dimensione della
tastiera.
Ma l'Ipad è un po' piccolo ed ho bisogno di una tastiera sulla quale digitare delle
dimensioni, per l'appunto, di un formato A4 (20 - 30 cm. circa).
In pratica quindi dovrei comprare un tablet o simili delle dimensioni appropriate, che consenta il touch screen.
Applicare quindi una settorizzazione degli spazi come da fotografia ed applicare la funzione T9.
Grazie per tutti i consigli che mi potrai dare.

afibi