Bologna, 27 giugno 1998
Jcue e' un software client server per la gestione di Corpus Linguistics, grandi collezioni di testi in formato elettronico che devono poter essere consultati efficientemente per ricerche linguistiche.
Antefatto
La Corpus Linguistics
Il server
Jcue
Dettagli di implementazione
Documentazione tecnica
Riferimenti
Antefatto
La moderna ricerca linguistica sfrutta in maniera sempre piu' intensa
le tecnologie informatiche per eseguire analisi e ricerche. In particolare
la Corpus Linguistics esamina l'uso di parole e frasi ricercandole all'interno
di vasti database di testi.
A tal proposito il Professor John Sinclair ed il dottor Oliver Jackobs
dell'Universita' di Birmingham hanno sviluppato
il software CUE (Corpus Universal Examiner) che offre un potente e veloce
strumento per gestire un elevata quantita' di dati opportunamente indicizzati.
Questo software pero' e' disponibile unicamente per macchine Sun Solaris.
Con l'inizio della collaborazione del professor Sinclair con il CILTA,
centro di linguistica dell'Universita' di Bologna, avvenuta nell'autunno
del 1996, sono sorte nuove esigenze. Il professor Sinclair, ideatore della
ricerca e delle teorie sui Corpus linguistici,
ha promosso l'utilizzo di questo strumento nella didattica delle lingue,
richiedendo la possibilita' di sfruttare un software come CUE anche per
gli studenti.
Da tutto questo e' nata la necessita' di realizzare una versione client
server di CUE in cui la parte client potesse essere eseguita su qualsiasi
computer dei laboratori didattici del CILTA.
La Corpus Linguistics
Un Corpus e' una collezione di testi di linguaggio naturale,
selezionati e ordinati in base a specifici criteri lingustici in modo da
caratterizzare una varieta' di linguaggio. Una concordanza e' l'indice
ad una parola nel testo ed e' il centro della Corpus Linguistics in quanto
permette di esaminare le strutture del linguaggio per la parola in esame.
Il server
Per la realizzazione del server e' stato sfruttato il software CUE:
non sono state apportate particolari modifiche tranne la scissione dell'interfaccia
grafica (realizzata per X-Window) dalla parte gestionale vera e propria
e la realizzazone di un protocollo di comunicazione basata su socket per
poter richiamare
le funzionalita' dal client.
Il server realizza piu' sessioni concorrenti, in modo da poter essere
utilizzato da piu' client contemporaneamente. Ogni sessione infatti e'
a stati, i quali vengono mantenuti sul server: un client puo' selezionare
su quali corpus operare, eseguire elaborazoni sulle concordanze appena
recuperate, approfondire le query, il tutto mantenendo localmente la minor
quantita' possibile di informazioni.
Questa scelta e' stata fatta per ridurre le capacita' di calcolo dei
computer client e soprattutto per abbreviare i tempi di trasferimento delle
informazioni. Dopo una prima analisi, infatti, e' risultato chiaro che
per query su parole comuni, se la gestione fosse stata affidata ai client
la quantita' di tempo necessaria a trasferire i dati avrebbe allungato
notevolmente i tempi di esecuzione rendendone l'utilizzo molto lento.
Jcue
Jcue e' propriamente il client per l'interrogazione del server CUE.
Realizza l'interfaccia grafica per l'immissione dei comandi da parte dell'utente,
la comunicazione via socket con il server, la visualizzazione dei dati
recuperati.
Le linee guida per la realizzazione di jcue sono state:
Facilita' di utilizzo: il software sara' sfruttato da linguisti, persone
che potrebbero anche essere completamente digiune nell'utilizzo di personal
computer.
Portabilita': all'interno del CILTA sono utilizzati computer MS Windows,
Apple Mcintosh, Sun Solaris: il client deve poter essere utilizzato su
qualsiasi piattaforma sempre con la medesima interfaccia.
Efficienza: il software deve garantire performance accettabile senza
tempi morti che potrebbero scoraggiare l'utente dall'utilizzare il software.
Per la facilita' di utilizzo si e' cercato di migliorare la gia' abbastanza
semplice interfaccia di CUE, semplificando le parti poco chiare e arrichendola
con descrizioni piu' dettagliate e pagine di help. La portabilita' e' stata
realizzata scrivendo il programma in Java usando
le classi del SDK 1.0.2 della Sun Microsystem anche se su questo
fronte sono state riscontrate alcune difficolta'.
Comunicazioni
La comunicazione tra client e server avviene sfruttando un socket
Tcp/Ip. Essendo il server disponibile su una macchina permanentemente collegata
ad Internet sono stati implementati dei meccansismi di sicurezza per cui
oltre ad un nome utente e password da inserire all'inizio del collegamento,
il client stesso deve autenticarsi inviando un codice di riconoscimento.
La trasmissione dei dati delle successive elaborazioni avviene in
chiaro. Il protocollo di comunicazione ideato prevede che ad ogni transazione
il client invia l'identificativo della funzione necessaria, gli eventuali
parametri ed un End Of Transmision (EOT), ponendosi poi eventualmente in
attesa dei dati richiesti che saranno terminati sempre da un EOT.
Interfaccia
L'interfaccia e' stata sviluppata utilizzando l'AWT 1.0.2 di Sun, senza
utilizzare alcun ambiente di programmazione visuale.
Portabilita'
La portabilita' del software e' stato uno dei problemi maggiori che
si e' dovuto affrontare. Nonostante quanto viene affermato, la realizzazione
delle macchine virtuali sulle diverse piattaforme hardware differisce in
maniera evidente. Sono state riscontrate infatti diverse incongruenze dovute
forse ad errori implementativi per cui componenti che funzionano su una
piattaforma non funzionano su un'altra e viceversa.
La macchina virtuale che forse e' piu' conforme alle specifiche e'
quella per il sistema operativo Solaris; quella con maggior deficienze
e' quella per Apple Macintosh.
La portabilita' si e' raggiunta con compromessi, non utilizzando componenti
con evidenti problemi di funzionamento e semplificando l'interfaccia.
Altro problema e' stato il salvataggio su disco locale di file di testo,
necessario per l'esportazione delle concordanze. Ogni piattaforma utilizzata
ha una sua particolare combinazione di new line e carriage return per indicare
il fine linea. La soluzione e' stata quella di inserire nel file di configurazione
locale un indicatore della piattaforma dove il client e' in esecuzione.
Efficienza
Per ridurre al minimo i tempi morti nell'utilizzo del software, viene
trasmessa la minor quantita' possibile di dati. Gli stati di esecuzione
(query eseguita, elenco delle concordanze recuperate, impostazioni...)
sono mantenute sul server e le informazioni inviate al client solo su richiesta.
Ad esempio, se per ogni query dovessero essere inviate al client tutte
le concordanze recuperate, ci sarebbero casi che richiederebbero anche
diversi minuti di trasmissione; in realta' vengono trasmesse solo le concordanze
che possono essere visualizzate in un certo istante riducendo al minimo
i tempi di attesa.
A grandi linee Jcue ha questo funzionamento:
Jcue.java: legge il file jcue.ini, apre la connessione con il server, autentica il client, crea il frame per l'autenticazione dell'utente.
IniFile.java: classe per la gestione di file di inizializzazione (.ini) simili a quelli di Windows
CommSrv.java: classe che realizza la comunicazione con il server
e tutte le funzioni di interrogazione.
Le comunicazione avvengono aprendo un socket con il server alla porta
indicata nel file .ini.
Ogni funzione comunica con il server con questo protocollo:
Invio del numero identificativo della funzione
Invio degli eventuali parametri (separati da \n)
Invio della stringa di fine trasmissione (EOT)
Ricezione dei risultati (separati da \n)
Attesa della stringa di fine trasmissione (EOT)
Le comunicazioni avvengono tramite stringhe, per cui eventuali numeri
da inviare devono essere convertiti in stringhe e viceversa.
LoginFrame.java: frame che richiede nome utente e password all'utente,
le invia al server e, in caso di autenticazione corretta, apre il frame
principale di jcue. La password viene inviata in chiaro.
JcueFrame.java: frame principale per l'utilizzo del client. Contiene
la definizione e gestione del menu a tendina e dei bottoni La classe definisce
anche i font e i colori di tutte le finestre del programma.
Realizza anche la funzione di export diversa per i tre sistemi operativi
in quanto il fine riga e' sempre diverso (Win: \r\n, Unix \n, Mac \r).
ViewC.java: gestisce la lista delle concordanze da visualizzare all'interno del frame princiapale. E' stata realizzata come lista per individuare facilmente la riga selezionata con il mouse; questo pero' causa lentezza nella visualizzazione al contrario di una normale finestra di testo.
CorporaDialog.java: definisce la dialog di selezione dei corpora di lavoro. E' stata fatta una procedura apposta per la versione Mac in quanto su questa piattaforma non funziona bene l'aggiornamento automatico delle lista: ad ogni selezione in una delle due liste viene richiesto al server l'elenco completo del contenuto.
QueryDialog.java: definisce la dialog per impostare la nuova
query. Quando viene premuto il bottone OK la stringa viene inviata al server
e poi viene attivata la funzione di recupero concordanze e visualizzazione
nella finestra relativa.
GotoDialog.java: definisce la dialog per la funzione di goto concordance e chiama le funzioni di ViewC per la corretta visualizzazione.
ContextFrame.java: gestisce la finestra di testo che visualizza il contesto esteso di una concordanza. Per visualizzare la parola centrale, non essendo disponibile una differenzazione dei caratteri, viene contoranata da >>> e <<<, contando le parole ricevute.
DocRefDialog.java: gestisce la finestra di visualizzazione del
document reference number.
SortDialog.java: gestisce la finestra per l'ordinamento delle concordanze recuperate.
ReduceDialog.java: gestisce la finestra per la riduzione delle concordanze recuperate
FilterDialog.java: gestisce le finestre di filtraggio delle concordanze (N e P filtering); il tipo di filtraggio e' un parametro che viene passato al costruttore.
EnvwordDialog.java: visualizza le collocazioni sfruttando le
impostazione che legge nella classe CollOptionDialog
Envline.java: visualizza le collocazioni per envline
ClectDialog.java: gestisce la visualizzazione delle collocazioni.
GravityDialog.java: disegna e visualizza il grafico della gravita'
lessicale. All'interno del file e' anche definita la classe GravityCanvas
che definisce il canvas dove viene disegnato il grafico. Per la trasmissione
dei punti (passaggio per riferimento tra funzioni) viene utilizzata la
classe GraphPoint (definita in GraphPoint.java).
PropDialog.java: calcola e visualizza le proporzioni delle concordanze nei diversi corpus selezionati.
CollOptionDialog.java: gestisce la finestra per le impostazioni
delle opzioni di calcolo delle collocazioni. Le impostazioni sono memorizzate
in variabili statiche definite all'interno della classe.
OptionDialog.java: gestisce la finestra per le impostazioni delle opzioni generali.
HelpFrame.java: visualizza pagine di help. La classe non e' terminata in quanto non sono disponibili informazioni di aiuto per l'utente. Comunque, la classe conosce in quale punto del programma e' stata invocata in base ad un identificatore che viene passato al costruttore.
AboutDialog.java: gestione della finestra di informazioni sul
programma. Il logo visualizzata deve essere contenuto nel file logo.gif.
ErrorDialog.java: visualizza un messaggio di errore. I messaggi usati in Jcue sono defini in questa classe come stringhe costanti (final)
ImageDisplayer.java: funzione di visualizzazione di immagini (per la dialog about)
QuickPanel.java: classe per la visualizzazione dei panel con
bordini tridimensionali
Descrizione file jcue.ini
Alcune impostazioni di jcue avvengono tramite il file di configurazione
jcue.ini. Le voci da impostare sono le seguenti:
server: nome o indirizzo IP della macchina che esegue il server CUE
port: numero di porta del socket del server
sizex: dimensione x della finestra princiaple di jcue
sizey: dimensione y della finestra principale di jcue
viewwidth: numero di caratteri che compongono ogni riga di concordanza
viewheight: numero di concordanze visualizzate in ogni schermata
platform: sistema operativo del computer dove viene eseguito il client
hdbpath e hdbsize: posizione e dimensione del file delle frequence
per l'inglese
platform puo' assumere i valori unix, win32 oppure mac. E' necessario
impostare questo valore correttamente per sopperire
alle differenze delle diverse macchine virtuali e per memorizzare sul
disco locale i file di testo in modo corretto.
Riferimenti
The University
of Birmingham, Corpus Research Group: http://www-clg.bham.ac.uk/
Sinclair John (1991) Corpus, Concordance,
Collocation. Oxford: Oxford University Press
Sinclair John (1994) Corpus Typology - A framework for classification
The Source
for Java Technologies: http://www.javasoft.com/
Niemeyer Patrick, Peck Joshua (1996) Exploring Java USA: O'Reilly
& Associates
Farley Jim (1998) Java distributed computing USA: O'Reilly &
Associates