Newsgroup: it.hobby.scacchi
Titolo: Eliminazione doppie in CB7: EUREKA!!!

Come tutti gli utenti di CB7, sono sempre stato scocciato
dal fatto che il programma non riusciva mai a individuare
tutte le doppie nei database... Ho provato in tutti i modi ma
niente! Rimanevano sempre doppie, nonostante tutti i
tentativi fatti.
Stamattina, finalmente l'illuminazione (scacchistica!):
Appena importate circa 20.000 partite convertite dal
formato Rebel a PGN ho avviato la routine di individuazione
delle doppie e poi le ho cancellate... A questo punto, per fare
una "prova" ho cercato una partita di Alekhine e... ho visto che
nel database ce n'erano non due, ma ben 3 copie!
Cercando di conservare la calma ho osservato meglio le partite
e a questo punto... l'illuminazione (sara' che oggi inizia la privatizzazione
dell'Enel!): Le partite erano uguali, ma avevano il codice ECO diverso!!!!!!
Ora tutto e' chiaro: Quel figlio di... buona mamma di CB7, per individuare
le doppie INIZIA a classificare le partite per codice ECO, poi passa alle
mosse e poi agli altri valori. Ora, siccome ogni programma ha un modo
leggermente diverso di classificare le partite (a causa delle trasposizioni
e delle varie "interpretazioni" di un'apertura), importando partite da varie
fonti e' possibile che LA STESSA partita sia presente in un database con
codici ECO diversi! In questo modo CB7 NON LA VEDE per niente!
SOLUZIONE: PRIMA di avviare la routine di individuazione delle doppie,
occorre riclassificare i codici ECO di tutto il database (menu Tecnico ->
Classifica apertura -> Imposta codici ECO). In questo modo la classificazione
e' uniforme!
DOPO si avvia la routine di individuazione delle doppie, con i criteri
piu' "drastici":
Menu Tecnico -> Elimina doppie
Opzioni da selezionare:
Mantieni la partita migliore
Cancella partita non annotata (cosi' quando ci sono due partite identiche
   ma una annotata e l'altra no, CB cancella quella NON annotata!)
Nome -> Ignora (perche' non c'e' assolutamente uniformita' nello spelling
   dei nomi degli scacchisti!!!)
Tornei -> Ignora
Mosse -> Simili (perche' spesso la stessa partita viene riportata con una o due
   mosse finali leggermente diverse o cose del genere)
Ignore year (Spesso la stessa partita e' presente con datazioni diverse).
A questo punto avviate il tutto e avrete una sorpresa!
anche se avete sempre cancellato le doppie dal vostro database,
ne troverete ancora circa il 10%!!! Questo perche' finalmente
CB7 puo' basare il rilevamento su codici ECO uniformi!
Ed e' cosi' che... il mio database di lavoro si e' "sgonfiato" da circa
2.500.000 di partite a circa 2.300.000 (devo ancora finire la "pulizia"),
ma finalmente SENZA doppie!
Saluti
Ivo

Ivo


Purtroppo, a mia conoscenza, non c'e' un sistema per poter
"correggere" i nomi automaticamente!
Ciao
Ivo

In preda al panico il giorno Mon, 25 Oct 1999 19:21:08 GMT,
fas...@eccolo.tin.it
 (Ivo) scrisse:

Con nictools per nicabse č possibile :-)
Ciao
(Questa me la segno, ne so una che Ivo non sa) :-)
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Chi non si aspetta l'inaspettato non troverą la veritą.
Eraclito
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

"correggere" i nomi automaticamente!
E' un problema complesso e non c'e' quasi nulla.
Qualche piccolo problema lo elimini con alcuni tools di
normalizzazione dei nomi, ma rispetto al cuore del problema sono
soluzioni marginali.
Qualcosa di piu' lo puoi fare con CDB, che supporta non solo la
normalizzazione ma anche la correzione mediante un file di alias, ma
si tratta di un lavoro improbo per caricare il file, ed oltretutto
penso che tenda a sedersi abbastanza presto, visto che da quel poco
che ho visto si tratta di un file txt.
Io ho incominciato ad interessarmi al problema un paio di anni fa, e
da circa un anno porto avanti a tempo molto perso lo sviluppo di un
software specifico che usa un approccio radicalmente diverso al
problema.
Ho importato in un database razionale e normalizzato circa una
quindicina di liste Elo diverse, ed ho creato un "mostro" di oltre
400.000 records.
Tra l'altro ci sono il playbase e le liste di Fide Usa Germania
Francia Italia Spagna Svizzera Finlandia Italia Danimarca Islanda ICCF
Uisp Asigc ed altre ancora.
Partendo da un file pgn creo un database di lavoro compattato e
totalizzato contentente tutti i nomi di giocatore localita' e torneo
da analizzare, e quindi lo incrocio utilizzando alcune decine di
criteri "intelligenti" via via meno restrittivi con il database
contentente i nomi "certificati" e provvedo alla sostituzione solo ed
esclusivamente quando sono praticamente certo di averlo effettivamente
preso.
I risultati della versione attuale, che implementa solo un subset di
quanto ho progettato sono comunque gia' molto interessanti, ma il
tutto e' tornato un po' indietro in quanto ho deciso di abbandonare la
piattaforma di sviluppo attuale (vb5sp3) per qualcosa di meno
inaffidabile.
Tanto per fare un esempio, i seguenti nomi vengono tutti correttamente
compattati:
Karpov Anatoly
Karpov Anatolj
Karpov Anatoli
Karpov Anatolij
Karpov An
il tutto che siano o meno separati da virgola, e che il nome sia
scritto prima o dopo del cognome.
Non venono invece compattati Karpov e Karpov A, in quanto c'e' di
mezzo Alexander Karpov,  ed in questo caso sara' necessario un
intervento umano visto che il programma non e' in grado di risolvere
l'ambiguita'.
Le prove le ho effettuate utilizzando un database di test di oltre
1.000.000 di partite, con oltre 200.000 nomi, il peggiore che abbia
trovato in giro.
Circa il 50% li corregge e collassa da solo, riducendo il numero di
nomi di alcune decine di migliaia.
Per gli altri dovrebbero provvedere a ridurli ulteriormente i criteri
che stanno ancora nella mia testa.
Per tutto quello che resta per cui il programma non ha trovato
soluzioni si inserisce un record manualmente una volta per tutte e da
quel punto in poi quella correzione avverra' ogni volta
automaticamente.
Durante la fase di conversione e' possibile splittare il file in input
in due files diversi, uno contenente le partite con nomi sani ed uno
con quelle con nomi sospetti o comunque non certificati.
Tra l'altro consente di correggere con molta poca fatica anomalie
frequenti come quella del turno inserita al termine del nome del
torneo: cb7, per fare un esempio, obbliga a correggere le partite una
per una, col mio affarino in pochi secondi si sistema un intero torneo
open con centinaia di partite.
Adesso volevo, una volta che sara' stato riscritto, fare qualcosa per
preservare i tornei interi, visto che se non mi sbaglio a volte i
tornei completi vengono "scassati" dalla deduplicazione, nel
malaugurato caso che esista un doppione commentato con il nome del
torneo diverso, e provare a dedurre il nome corretto di un giocatore
dall'elenco dei partecipanti a quel torneo.
Tra l'altro aggiungero' un "punteggio" che verra' assegnato alle
correzioni in funzione dell'affidabilita' della sostituzione: niente
di speciale, all'inizio sara' solo il numero dei tentativi effettuati
prima di avere successo.
Se e quando ci sara' e se e come sara' distribuito non lo so, visto
che c'e' qualche problema pratico per le dimensioni dei database
utilizzati, che cubano gia' alcune decine di mega e dovrebbero
crescere ulteriormente abbastanza presto.
Probabilmente e' questa la ragione per cui non c'e' niente in giro.


Il mio post precedente si riferiva SOLO ed esclusivamente a CB7! Se poi
spaziamo anche alle versioni precedenti, allora posso citare il programma
"cbnormal", che funziona con i file di formato CBF.
Si puo' scaricare all'URL:
ftp://136.142.185.47/group/student-activities/chess/UTIL/cbnorml2.zip
In pratica questo programma va a leggere un paio di file di testo chiamati
"namesub.dat" e "placesub.dat" e poi modifica i nomi dei giocatori
e dei luoghi dei tornei contenuti nel file CBF a seconda delle istruzioni
contenute nei file di testo.
Il problema e' che i file di testo li deve creare l'utente, e voi capite che
questo sarebbe un lavoro immane, perche' il formato richiesto e' il 
seguente:
"Alekhin"="Alekhine"
"Alexandrov"="Aleksandrov"
"Aljechin"="Alekhine"
"Aljehin"="Alekhine"
"Ambarcumian"="Ambarcumjan"
"Annageldyev"="Annageldiev"
Per questo motivo, tempo fa lasciai perdere la cosa, perche',
come dice Giorgio Bertazzo in un altro post "E' un problema
complesso"!!!
Saluti
Ivo

Scusate l'OT, ma questo problema di rinominare i giocatori dei databases mi
ha fatto tornare alla mente  un problema che mi angoscia sin dai primordi di
Windows 95, e mo ve lo voglio sottoporre.
Ma in windows č possibile rinominare tutto un gruppo di programmi , con un
solo comando ?
Mi spiego: qual'č (se c'č) l'equivalente di un comando DOS tipo
rename pippo.* puppo.*  ?
Grazie mille,
Francesco.


rename pippo.* puppo.*  ?
L'hai praticamente scritto:
REN PIPPO.* PUPPO.*
:-)

Altri suggerimenti?
Un consifglio che forse non ti risolvera' il problema delle doppie ma
ti puo' agevolare nella riduzione delle partite da gestire;
elimina tutte le patte con un numero di mosse inferiori 12 , 15 mosse
al massimo. Ti togli tutte quella patte d'accordo che non servono a
nulla e occupano solo spazio sul disco, in questo modo se ne eliminano
almeno un 7-10 percento.Ogni 100.000 sono 7-10.000 che togli e non
sono poche!  Sperando ti sia utile 
ciao Walter Mola 

...


Ringrazio comunque tutti per i suggerimenti
Sottoscrivo.
La soluzione proposta mutila tornei completi, risparmia tutto sommato
uno spazio modesto, almeno per un computer moderno, e potrebbe
eliminare anche partite interessanti dal punto di vista tecnico.Il
problema principale delle doppie non eliminate e' costituito dal fatto
che vengono sballate le sensazioni fornite dalle statistiche
dell'albero (che comunque dovrebbero essere valutate con molta
prudenza) ma soprattutto dal fatto che funzioni come la creazione del
profilo di un giocatore del CB7 (ottima) vengono di fatto quasi
completamente vanificate.

In preda al panico il giorno Tue, 26 Oct 1999 17:15:01 GMT,
fas...@eccolo.tin.it
 (Ivo) scrisse:
|Il mio post precedente si riferiva SOLO ed esclusivamente a CB7! 
[Tagl]
Ah... mi sembrava strano che ne sapessi una in più di Ivo :-)
Ciao
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Chi non si aspetta l'inaspettato non troverà la verità.
Eraclito
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

 migliorare la cancellazione delle doppie)?
Ti elenco i passaggi:
1) visualizza l'indice per giocatori, dal menu' Database (puoi anche premere
CTRL-P)
2) click con tasto destro sul cognome da cambiare e scegli edita
3) inserisci il nome nuovo
..avrai cambiato quel nome su tutte le partite presenti nel Database.
Ciao
--
Risposta in email, togliere NOSPAM
--
Mauro Celestini
Perugia  Italia
nickname: maurocel
Email   : 
maur...@tin.it
Email(2): 
maur...@libero.it
Email(3): 
maur...@tiscalinet.it
Icq num.: 4107921
Icq page: 
http://wwp.mirabilis.com/4107921
Web Page: 
http://space.tin.it/computer/mcelesti

Nel database di partite dall'anno zero al 1980 (circa 350.000) sono presenti
95000 nomi diversi,
č facile mettere a posto Karpov ma hai idea di quanti Anderson, Andersson,
Andersen ecc ci sono?
Come faccio ora:
1) Elenco giocatori (tasto destro del mouse)
2) selezione del nome del giocatore con la dicitura corretta,
3) Con il tasto Ctrl premuto seleziono tutte le altre versioni del nome
(ottieni una selezione multipla)
4) con il tasto destro del mouse scegli edita.
5) Il programma propone il primo nome selezionato.
6) Invio. Unifica tutte le versioni del Cognome/Nome con la prima
selezionata.
ciao
Ettore
Mauro Celestini ha scritto nel messaggio ...
