Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Python - Elaborazione file dizionario
Forum - Python - Elaborazione file dizionario

Avatar
pistilloi (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/12/2010

Segnala al moderatore
Postato alle 16:38
Martedì, 03/09/2013

Salve, mi serve un dizionario per ruzzle, ho scaricato il GNU dictionary, in formato txt chiamato it_IT.txt; ma si presenta cosi:

abbarcato/EyT
abbaruffando/D
abbaruffare/ALKhlTXI
abbaruffato/EyT
Abbasanta
abbassabile/STU
abbassalingua/Tq
abbassamento/OTq
abbassando/D
abbassare/ALKhlTXI
abbassata/QTU
abbassato/EyT
abbasso
abbastanza
Abba/T
Abbateggio
abbattendo/D
abbattere/BTXI
abbattibile/STU
abbattifieno/Tq
abbattimento/OTq
abbattitore/STqr
   ...
   ...

quindi è chiaro che lo "\" e i caratteri post-posti, son di tropo. Allorché ho scritto questo piccolo script, che mi par logicamente coerente, ma il file risultante è vuoto.



Codice sorgente - presumibilmente Python

  1. import string
  2. import argpars
  3.  
  4.  
  5. parser = argparse.ArgumentParser()
  6. parser.add_argument("infile")
  7. parser.add_argument("outfile")
  8. args = parser.parse_args()
  9.  
  10.  
  11.  
  12. input = open( args.infile ,'r')        
  13. lista = input.read()
  14. input.close()
  15.  
  16. newlista = ""
  17.  
  18. for s in lista:
  19.         if string.find(s,"/") != 1:
  20.                 newlista += s[:string.find(s,"/")]+"\n"
  21.         else:
  22.                 newlista += s+"\n"
  23.    
  24. output = open( args.outfile ,'w')
  25. output.write(newlista)
  26. output.close()



eseguo lo script nel seguente modo python script.py it_IT.txt namenewdict.txt

Agli esperti la parola! xD xD xD

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:57
Martedì, 03/09/2013
ora, premetto che non so il python ma quel for s in lista: non mi convince, s dovrebbe essere una stringa ma usato in qual modo credo che non contenga una sola riga, ma tutte. Però non so proprio cosa dirti........

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 20:30
Martedì, 03/09/2013
Il testo dopo / puoi toglierlo con sed:
Codice sorgente - presumibilmente Plain Text

  1. sed 's/\/.*//' < filedizionario.txt > nuovofile.txt


PM Quote
Avatar
pistilloi (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/12/2010

Segnala al moderatore
Postato alle 15:06
Giovedì, 05/09/2013
ho provato quest' unix command, ottenendone alcun risultato; poi ho controllato il sinottico del commando sad, esso appariva circa cosi:

Codice sorgente - presumibilmente Plain Text

  1. sad /parola_da_sostituire/parola_con_cui_sostituire/ <file_input.txt> file_output.txt



non sono pratico di shell ed'espressioni regolari quindi non m'è chiaro il commando da te consigliato, sta di fatto che non adempie allo scopo!

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 15:58
Giovedì, 05/09/2013
Il comando è sed (stream editor), non sad, e inoltre, non so dove l'hai trovato, ma è sbagliato in quel modo, anche perché sed non è un semplice sostitutore di espressioni regolari e non avrebbe motivo di usare quella sintassi con / se lo fosse.

Ultima modifica effettuata da ZioCrocifisso il 05/09/2013 alle 16:06
PM Quote
Avatar
pistilloi (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/12/2010

Segnala al moderatore
Postato alle 17:39
Giovedì, 05/09/2013
L'ho trovato nel primo link propostomi da google, questo: http://linux.about.com/od/commands/l/blcmdl1_sed.htm in seguito riporto la descrizione dell'opzione s/regexp/replacement/
Codice sorgente - presumibilmente Delphi

  1. Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.



So che sed (scusa l'errore di battitura) non è un semplice sostitutore di parole, bensì una suite completa per la manipolazione del testo; purtuttavia il commando da te consigliato non produce risultato e poiché io non lo capisco in ogni suo dettaglio non posso neanche darne una motivazione. Tu puoi?

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 19:46
Giovedì, 05/09/2013
Se guardi bene, nel comando che mi hai postato prima, manca la 's' prima del /. Senza di essa, cambia totalmente il significato del comando, perché significa "in ogni riga contenente parola_da_sostituire esegui il comando parola_con_cui_sostituire". Se al posto di parola_con_cui_sostituire non c'era niente, significa che non farà niente. Hai scritto il comando nel modo esatto in cui io l'ho postato? Perché a me funziona, e non vedo perché non dovrebbe.
Codice sorgente - presumibilmente Plain Text

  1. [nix@localhost tmp]$ echo 'abbarcato/EyT
  2. > abbaruffando/D
  3. > abbaruffare/ALKhlTXI
  4. > abbaruffato/EyT
  5. > Abbasanta
  6. > abbassabile/STU
  7. > abbassalingua/Tq
  8. > abbassamento/OTq
  9. > abbassando/D
  10. > abbassare/ALKhlTXI
  11. > abbassata/QTU
  12. > abbassato/EyT' > a.txt
  13. [nix@localhost tmp]$ sed 's/\/.*//' < a.txt > b.txt
  14. [nix@localhost tmp]$ more b.txt
  15. abbarcato
  16. abbaruffando
  17. abbaruffare
  18. abbaruffato
  19. Abbasanta
  20. abbassabile
  21. abbassalingua
  22. abbassamento
  23. abbassando
  24. abbassare
  25. abbassata
  26. abbassato


PM Quote
Avatar
pistilloi (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/12/2010

Segnala al moderatore
Postato alle 9:43
Venerdì, 06/09/2013
Si, mea culpa! Ho perso il senno tra il groviglio di file e gli ho dato in pasto un file vuoto :-|:). Grazie dell'aiuto!

PM Quote