Newsgroup: it.comp.os.linux.software
Titolo: Dizionari dict

Scrivo per una curiosita', per avere una spiegazione e possibilmente un
modo per trasformarli.
 
Ho un vechio Italiano-Genovese.BGL, l'ho comvertito con dictconv nei due
file Italiano-Genovese.index e Italiano-Genovese.dict.
 
Traduce solo ita -> gen, percio' ho guardato il file index e ho visto
che ha l'elenco delle 4383 parole italiane che traduce. Allora con uno
script e tramite dict ho creato questo file ita-gen-ita:
 
$ head ita-gen-ita
abbagliare   v. a. abbarlûgâ.
abbaiare   v. n. baiâ.
abbaino   s. m. lûxernâ.
abbandonare   v. a. abbandonâ.
abbandono   s. m. abbandon.
abbarbicare   v. n. arreixâ.
abbassare   v. a. abbassâ asbasciâ.
abbastanza   s. m. abbastanza.
abbattere   v. a. abbatte.
abbattuto   p. pass. abbattûo.
 
Ebbene:
1) Adesso con grep posso usarlo anche al contrario: gen -> ita.
2) Occupa lo stesso spazio dei due index+dict.
3) Non ha bisogno di nessun programma speciale per usarlo.
4) Se si zippa, grep funziona anche coi .zip o al piu' c'e' zgrep.
 
Percio' mi e vi domando: Perche' non usano l'ascii puro?
 
Curiosita'_2: Perche' file mi dice che ita-gen-ita e' C++ source?
 
-- 
Tanti saluti
 

 Curiosita'_2: Perche' file mi dice che ita-gen-ita e' C++ source?
 
``file'' fa un tentativo di indovinare il tipo di file leggendo il primo 
centinaio di byte del file e confrontandolo con un suo database, 
chiamato ``magic'' che contiene i cosiddetti numeri magici. Ribadisco 
che è solo un tentativo prendilo come una prima ipotesi di lavoro e 
non una verità assoluta. In fondo ``magic'' non è magico.
 
man magic
man file
 
 
 
PS questa domanda la vedevo meglio su *.iniziare


Ti rispondo sulla curiosità 2)
Se in testa al file non esiste un header particolare (il cosiddetto 
magic header) allora il comando file va in modo euristico
Quindi potrebbe cannare
 
 

Addi' 24 set 2013, enoquick scrive:

Si' grazie ma infatti ho capito male io, perche' dice:
 
ita-gen-ita: C++ source, UTF-8 Unicode text
 
e la virgola e' separatore di possibilita', cioe' UTF non si riferisce
al C++.
 
-- 
Tanti saluti
 

 Percio' mi e vi domando: Perche' non usano l'ascii puro?
 
Perché la maggior parte dei dizionari non sono di 3000 parole, ma spesso 
di 300.000, e altrettanto spesso ci sono casi particolari per il plurale 
(o i plurali, in alcune lingue) e il genere (che in alcune lingue sono 
3). Senza contare le parole composte o tronche.
 
Insomma, il tuo è un caso abbastanza particolare, non lo userei come 
benchmark. :)
 
Bye.

 benchmark. :)
 
Giustissimo ma tu stai sbagliando e l'OP sta nel giusto, anche se stiamo 
su un terreno scivoloso e la parola definitiva non è stata ancora detta.
 
Prima di tutto io darei una occhiata alla pagina degli sviluppatori di 
Aspell e Ispell dove ci sono alcuni spunti interessanti.
 
Per tornare alla questione, ci sono tante cose da tenere in considerazione,
la velocità di accesso al database, l'occupazione di memoria del database,
l'esistenza di parole derivate, alterate, composte et cetera, la possibilità
di errori connessa con la possibilità correggere gli errori.
 
Sembrerebbe che l'unica soluzione efficiente sia usare un database evoluto
e costoso, cosa che mi pare tu accenni tra le righe. Invece no, lasciare 
tutto in ASCII ed usare un banale indice è la soluzione più efficiente; se 
ci pensi le parole sono stringe di caratteri, è ASCII puro (o Unicode, UTF8
se preferisci), non vale la pena codificarle o comprimerle con ZIP o BZ2.
 
Sembrerebbe, ma non è così, esistono algoritmi di compressione ah hoc, 
molto più semplici del Lempel Ziv, che non solo comprimono i dizionari 
con prestazioni paragonabili ad un algoritmo /lossy/, che sono molto 
veloci e che contemporaneamente permettono di affrontare in modo 
semplice i vari problemi a cui tu accenni di sfuggita
 
In definitiva, questo è un caso particolare da non usare assolutamente 
come un banco di prova in cui la soluzione proposta dall'OP, cioè
testo puro più indice più compressione pare che dia i risultati migliori.
 
 
 
 

 al C++.
 
 
No, hai capito bene la prima volta: ``file'' riconosce il file del 
dizionario come un file di testo Unicode UTF8 contenete un programma
C++. Come spiegato prima file fa solo un euristica, un tentativo di
indovinare di cosa si tratta basato su alcune regole e dei numeri magici;
``file'' può sbagliare benissimo.
 
Ovviamente tu puoi dire a ``file'' di non fermarsi al primo tentativo ma
fare più di una ipotesi.