Favele/Ruby e lavori sui dizionari (was: Re[2]: [Dizionario] Presentammi...)

Giuseppe Bilotta oblomov a freemail.it
Mer 22 Ott 2003 22:24:03 CEST


mercoledì 22 ottobre 2003 Marco Gaiarin ha scritto:
> Mandi! Giuseppe Bilotta
>   In chel di` si favelave...

>> > esattamente questa lista, cosa fa (o dovrebbe fare) "Favele"
>> > e verso quali orizzonti naviga.
>> Per "Favele" non sono forse la persona più giusta per
>> rispondere, giacché l'ideatore e creatore è Marco Gaiarin
>> (spero d'aver scritto il nome giusto :)).

> Ho appena mandato in lista un messaggio in cui spiego alcune cose,
> altre le ha dette qui Giuseppe, se ci sono dei dubbi specifici puoi
> chiedere.


> La nave di favele per ora è in porto, attende un buon capitano e dei
> marinai. ;-)))

A proposito, ho appena finito di riscrivere Favele in Ruby. (E
se devo essere sincero, sono sorpreso dalla rapidità con cui,
pur non avendolo mai toccato prima, questo linguaggio si lasci
imparare ...)

Tra l'altro, più ci lavoro ai fini di farlo diventare uno
strumento analitico, più mi sembra di allontanarmi
dall'originale :) e non ho nemmeno implementato le "vere"
funzioni di Favele/C ... forse è il caso di cambiargli nome :)

Comunque, la nuova implementazione in Ruby utilizza un
approccio notevolmente più furbo per determinare se una parola
fa parte della lingua oppure no, ed il nuovo algoritmo permette
un supporto per quelle che tu definisci "dirty words".
Stranamente, la differenza di velocità tra il cercare le dirty
words e il non farlo è minima, almeno per il momento.

A proposito, in termini di prestazioni abbiamo i seguenti
risultati (Ruby 1.8.0-10 su Windows XP Professional, Pentium IV
1.6 GHz, 256Mb di RAM):

* caricamento della lingua: poco più di 2 secondi
* analisi delle parole: al più 0.34 secondi per parola
* analisi di un testo di un migliaio di parole: una manciata di
secondi più di 3 minuti (incluso output).

In un secondo tempo ho incluso una grezza cache per le parole
già analizzate, il che ha ridotto il tempo di analisi del testo
completo ad un terzo del valore originale (quindi a circa un
minuto). La cache è molto grezza e non accumula, al momento,
alcuna statistica per decidere automaticamente quando
"ripulirsi" e quando no (occorre farlo manualmente; si può
o svuotare completamente o rimuovere un qualsiasi numero di
chiavi).

Nel frattempo, ho (ri?)scoperto una limitazione: è pressocché
impossibile manipolare sostantivi che mutano in genere e
numero, in quanto non è possibile associare più di una RegF ad
ogni termine nel lessico, e se i due generi hanno bisogno di
due RegF distinte diventa un vero inferno (anche se per via
delle "maschere" il controllo sarebbe probabilmente possibile;
ma è un sacco di lavoro).

Ho pertanto deciso di rimuovere tutte le RegF del solo genere
(tranne quelle usate dai pronomi); tra l'altro, ho notato che
non vengono utilizzate: bisognerebbe pertanto rivedere il .lex
trasformando tutti i RegF di solo numero negli opportuni
genere/numero ... cosa che bisognerebbe fare anche se si
implementasse il supporto per RegF multiple.

E devo dire che l'idea di riscrivere il lessico non mi piace,
specie considerando che è probabilmente un lavoro "duplicato";
dopo tutto, Gianluca & co hanno sicuramente già fatto qualcosa
del genere per il dizionario! Sarebbe interessante se si
potesse lavorare "in sincronia" sui due formati (.lex + .forms
e .dic + .aff). Ovviamente, poiché il formato di Favele
contiene più informazioni, è probabilmente opportuno lavorare
sul .lex e poi effettuare una eventuale conversione a .dic

Una domanda per quelli che lavorano al dizionario MySpell:
avete già dato un occhio ai file di definizione delle lingue
per Favele? Voi che strumenti e base-dati state usando per
gestire il dizionario OOo? Sarebbe possibile modificarlo per
gestire anche i file in stile Favele?

Comunque, per chi volesse dare un occhio al lavoro attuale (in
attesa che io lo carichi su Savannah), allego alla presente un
pacchetto .tar.bz2

Per inciso, ho "spezzato" il file .lang di Favele in un file
.lang contenete definizioni generali + un file .forms contente
le 'regole' per le coniugazioni e declinazioni; per cui, il
contenuto del pacchetto è il seguente:

* un file .lang (definizioni generali)
* un file .forms (regularity flags, categorie, etc)
* un file .lex (lexicon)
* favele.rb (Favele in Ruby)
* favele-test.rb

Quest'ultimo è uno script Ruby di esempio su come
utilizzare Favele/Ruby: alcune righe commentate fanno da
esempio per l'analisi delle singole parole, il blocco finale
per l'analisi di un file. (Per inciso, c'è ancora molto da
migliorare  nei metodi di linguaggio per esprimere in forma
testuale i 'significati' trovati.)

-- 
Giuseppe "Oblomov" Bilotta
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        favele-ruby-0.1.0.tar.bz2
Tipo:        application/octet-stream
Dimensione:  31261 bytes
Descrizione: non disponibile
URL:         <http://lists.softwarelibero.it/pipermail/dizionario/attachments/20031022/e58f7077/attachment.obj>


Maggiori informazioni sulla lista Dizionario