Jcue
(Java Corpus Universal Examiner)
dott. Edoardo Martelli, CILTA, Universita' di Bologna
martelli@cilta.unibo.it [non più esistente NdA]

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'.
 

Dettagli di implementazione

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.
 

Documentazione tecnica

A grandi linee Jcue ha questo funzionamento:

  1. Lettura delle impostazioni grafiche e della locazione del server dal file jcue.ini.
  2. Connessione al server e autenticazione del client tramite l'invio di una stringa  di identificazione
  3. Autenticazione dell'utente
  4. Visualizzazione frame di lavoro con menu, area concordanze, bottoni.
La sequenza delle operazioni che in seguito  un'utente deve normalmente compiere e':
  1. Scelta dei corpus di lavoro (File/Corpora...)
  2. Invio della query (Query/New...)
  3. Consultazione delle concordanze
  4. Filtraggio delle concordanze (Sort, Unique, Reduce, Filter)
  5. Operazioni statistiche sulle concordanze (Env.word, Env.line, C-Lect, Gravity, Proportions)
 Descrizione dei file sorgenti

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