• Non ci sono risultati.

7.4 Principali funzioni ed algoritmi usati

7.4.3 Funzioni ed algoritmi

Si `e mostrato, nei paragrafi precedenti, come SLIM richieda le informazioni volute al database MOMISWN tramite la classe MDB WordNet. Questa classe, per svol-gere i compiti richiesti, utilizza le classi della libreria di funzioni, prodotta anch’essa nell’ambito di questa tesi, del package mDBWordNet. In Figura(7.10) `e rappresen-tata l’interazione fra MDB WordNet e le principali classi del modulo mDBWordNet tramite un diagramma delle classi UML.

Si pu`o notare come la classe MDB WordNet utilizzi una istanza dell’oggetto WNDB Tag. La classe WNDB Tag ha il compito di creare la tabella Hash (fun-zione creaHash() ) che fornisce la base per poter creare il thesaurus di relazioni inter-schema, prodotto finale del modulo SLIM. WNDB Tag eredita i metodi sia dalla classe WNBD Parenti che da WNDB Base. Per poter analizzare l’algoritmo imple-mentato dalla funzione creaThes() di MDB WordNet `e necessario comprendere, in via preliminare, le funzioni principali situate nelle classi del package mDBWordNet.

Funzioni della classe WNDB Base La classe WNDB Base implementa i metodi

di base per l’interazione con il package om, contenente le classi create da Torque (come le classi WnSynset, WnLemma, WnSynsetPeer ... che utilizzano le relative tabelle del database MOMISWN). Le sue principali funzioni sono:

public WnSynset synset2WnSynsetNew(Synset s ): trasforma un oggetto Synset

(classe appartenente al package wn2Slim) nel corrispondente oggetto WnSynset (pack-age om)

public WnSynset2SynsetNew(WnSynset WnS): trasforma un oggetto WnSynset in

uno Synset.

public Vector trovaWnLemma(WnSynset WnS): ritorna un vettore contenente tutti

i lemmi che formano il synset WnS (utilizza la tabella WN LEMMA SYNSET).

public Vector trovaWnSynset(String word): ritorna un vettore contenente ogni

synset contenente il lemma word (utilizza la tabella WN LEMMA SYNSET).

public Vector trovaRelazioniSemantiche(Synset s, String tipo): ritorna un

vet-tore contenente tutti i synsets collegati tramite il synset s dalla relazione semantica rappresentata dal simbolo tipo (utilizza la tabella WN RELATIONSHIP).

public Vector trovaCoordinati(Synset inpSynset): ritorna un vettore contenente i

synsets ipomini dello stesso ipernimo di inpSynset.

public Vector trovaIpernimi(Synset inpSynset): trova tutti gli ipernimi del synset inpSynset (sfrutta la funzione trovaRicorsivo()).

public Vector trovaOlonimi(Synset inpSynset): trova tutti gli olomini del synset inpSynset (sfrutta la funzione trovaRicorsivo()).

public Vector trovaRicorsivo(Synset inpSynset, String tipo): trova ricorsivamente

tutti i synsets collegati a inpSynset tramite la relazione avente come simbolo tipo

Funzioni della classe WNDB Parenti Classe per cercare i synsets

semantica-mente equivalenti ad un synset dato.

public Vector trovaParenti(Synset mpS, String word): chiama la funzione trovaWn-Synset(word) per trovare tutti i synsets contenenti il lemma word (anche il synset mpS

deve contenere word) il risultato di trovaWnSynset viene posizionato in un vettore chiamato vTemp. Da vTemp viene eliminato mpS. Viene creato un vettore

vParen-ti che conterr`a il risultato della funzione trovaParenvParen-ti(). A vParenvParen-ti si aggiungono i

synset appartenenti a vTemp che soddisfano una di queste due condizioni: 1. hanno almeno tre lemmi uguali a quelli di mpS

2. hanno lo stesso ipernimo di mpS

Si aggiunge a vParenti il Synset mpS. Si ritorna il vettore vParenti contenente i synsets considerati semanticamente equivalenti a mpS.

Funzioni della classe WNDB Tag La classe WNDB Tag serve per creare la

struttura necessaria, contenuta in una tabella Hash, per l’algoritmo di creazione del thesaurus.

public Hashtable creaHash(Vector vNamePath): questa funzione viene

invoca-ta usando come paramentro un vettore di NamePath (classe del package wn2Slim). Ogni NamePath contiene un oggetto Synset s ed una stringa (chiamata namePath) rappresentante il path dell’oggetto SlimNode dalla cui annotazione `e stato selezionato

s. Alla funzione creaHash() viene passato un vettore contenente tutti i NamePath

ot-tenuti dalla fase di annotazione (uno per ogni oggetto annotato). La tabella Hash viene costruita nella seguente maniera: Per ogni synset ottenuto dalla fase di annotazione (contenuto in un NamePath)

1. si chiama la funzione trovaParenti() e si cercano i suoi synset semanticamente equivalenti.

2. per ogni parente trovato, se non `e gi`a presente nella tabella Hash si aggiunge una entry formata da ((chiave)synset parente, (valore)namePath corrispondente); se `e gi`a presente si aggiunge un elemento al vettore dei namePaths corrispondenti.

In questo modo si ottiene una tabella in cui ogni entry ha come chiave un synset ottenuto dalla fase di annotazione, e come valore un vettore contenente tutti i path degli oggetti i cui nomi possiamo considerare sinonimi (relazione SYN nel thesaurus).

Algoritmo per la creazione del thesaurus (funzione creaThes())

Questo algoritmo serve per trovare un insieme di relazioni fra i path dei vari no-di degli schemi rappresentanti le sorgenti locali no-di dati. Ogni nodo `e un oggetto SlimNode, pu`o essere annotato, possiede una forma base (termine scelto per rapp-resentarlo) ed un attributo di tipo NamePath contenente il suo path. L’algoritmo si comporta nella seguente maniera:

1. si chiama la funzione creaHash() con parametro un vettore contenete tutti i

NamePath degli SlimNode annotati

2. per ogni entry nella tabella cos`ı creata

• si crea una relazione di sinonimia fra gli elementi (namePaths) associati

alla chiave attuale

• si cercano gli iperonimi del synset rappresentante la chiave attuale e, per

ogni iperonimo, si cerca la sua esistenza nella tabella. Se esiste si scrive una relazione di tipo NT per ogni elemento ad esso associato.

• si cercano gli olomini del synset rappresentante la chiave attuale e, per

ogni olonimo, si cerca la sua esistenza nella tabella. Se esiste si scrive una relazione di tipo RT per ogni elemento ad esso associato.

• si cercano i coordinati del synset rappresentante la chiave attuale e, per

ogni coordinato, si cerca la sua esistenza nella tabella. Se esiste si scrive una relazione di tipo RT per ogni elemento ad esso associato.