 
View Full Version : [c++][java]in un file .txt togliere maiuscole, punteggiatura etc
angel110
31-10-2008, 18:26
Buonasera a tutti devo fare le statistiche da un corpus di testo molto grande(un corpus di testo è un insieme di file di testo) per chi lo conosce io uso il "tasa corpus".
Dato un file di testo al suo interno devo fare queste operazioni:
1) sostituire la punteggiatura con il carattere spazio ' '
2) sostituire tutte le lettere maiuscole con le minuscole
3) sostituire il carattere 'a capo' con uno spazio ' '
4) Tutte queste operazioni devono essere fatte in automatico dal programma su circa 10mila file .txt che sono nidificati in una cartella
5) infine questi 10mila e rotti file .txt li devo  unire in un'unico enorme file
corpus.txt (non devono esserci parole attaccate alla fine di un file con il successivo, per cui è opportuno inserire uno spazio alla fine di ogni file)
6) a questo punto possono iniziare a fare le statistiche prendendo come input il file corpus.txt
l'ultimo punto il 6) l'ho già implementato ho pronto il programma scritto in fortran, devo solo crearmi questo file corpus.txt da dare in pasto al 
mio programma fortran.
Ovviamente i primi 5 punti posso implementarli in qualsiasi linguaggio
preferisco c++ o java perchè li conosco.
Ragazzi mi date una mano?
Vincenzo1968
31-10-2008, 18:49
Ciao Angel,
secondo me, il modo migliore(dal punto di vista dell'efficienza), è quello di utilizzare un automa a stati finiti.
Se mi dai un po' di tempo ti posto il codice. Ti andrebbe bene, al posto di C++, anche in C? Ci guadagniamo in velocità di esecuzione ;)
angel110
31-10-2008, 20:19
Ciao Angel,
secondo me, il modo migliore(dal punto di vista dell'efficienza), è quello di utilizzare un automa a stati finiti.
Se mi dai un po' di tempo ti posto il codice. Ti andrebbe bene, al posto di C++, anche in C? Ci guadagniamo in velocità di esecuzione ;)
si anche il c va benissimo.
Vincenzo1968
31-10-2008, 20:46
Due domande:
1) per nidificati in una cartella intendi che i file si trovano all'interno di più sottocartelle rispetto a quella di partenza?
2) Il tuo programma dovrà girare su Windows? In caso affermativo posso impacchettare il tutto in una comoda DLL, in modo che sia possibile utilizzarla dalla maggior parte dei linguaggi(C, C++, Java, C#, Visual Basic). FORTRAN consente di richiamare DLL Windows?
angel110
31-10-2008, 21:13
Due domande:
1) per nidificati in una cartella intendi che i file si trovano all'interno di più sottocartelle rispetto a quella di partenza?
2) Il tuo programma dovrà girare su Windows? In caso affermativo posso impacchettare il tutto in una comoda DLL, in modo che sia possibile utilizzarla dalla maggior parte dei linguaggi(C, C++, Java, C#, Visual Basic). FORTRAN consente di richiamare DLL Windows?
1) in pratica ho 8 cartelle piene zeppe di file di testo.. nessun'altra nidificazione in pratica potrei anche mettere manualmente tutti i file dentro la stessa cartella, per questo non c'è problema.
2) Si il programma deve girare sotto windows.
Guarda  fortran sicuramente consente una cosa del genere ma non mi interessa fare un unico programma.. a me occorre solo il file unico
corpus.txt
Vincenzo1968
31-10-2008, 22:42
1) in pratica ho 8 cartelle piene zeppe di file di testo.. nessun'altra nidificazione in pratica potrei anche mettere manualmente tutti i file dentro la stessa cartella, per questo non c'è problema.
2) Si il programma deve girare sotto windows.
Guarda  fortran sicuramente consente una cosa del genere ma non mi interessa fare un unico programma.. a me occorre solo il file unico
corpus.txt
Ok.
Allora faccio un programmino in modalità console a cui passi, da riga di comando, il percorso della cartella originaria e il nome del file di output. Il programma crea il file leggendo tutti i file con estensione .txt che si trovano nella cartella specificata e nelle sue sottocartelle.
Per domani sera dovrebbe essere pronto ;)
angel110
01-11-2008, 08:42
Ti ringrazio tanto, devo precisare una cosa, il mio programma suppone che il  file corpus.txt sia suddiviso in righe, e che ogni riga abbia senso compiuto.
Se al contrario il file corpus.txt non rispetta questa divisione le statistiche vengono falsate.
Ti posto un esempio di come dovrebbe essere il file corpus.txt
(ciò è risolvibile ad esempio sostituendo nei file grezzi il carattere "." col carattere "vai a capo"
Vincenzo1968
01-11-2008, 15:05
Puoi postarmi anche un esempio di file di input?
Ciao
angel110
01-11-2008, 17:02
Puoi postarmi anche un esempio di file di input?
Ciao
Ciao ecco qui
Vincenzo1968
01-11-2008, 17:45
Il programmino è quasi pronto. Devo solo testarlo un po' ;)
Ciao. Il bello del C è che esiste una relazione biunivoca tra tuttii i caratteri rappresentabili con le tabelle (h)ascii(sh) e un sottoinsieme dei naturali. Questo ti permette di usare un paio di trucchi:
A) Da maiuscolo a minuscolo:
Si può usare l'operazione modulo: Il carattere A è il numero 65, il carattere a è il numero 97. Cioè A è (a-64)%33. E cosi via per tutti gli altri caratteri. Basta mettere un if isalpha per lavorare solo sul tipo di dati giusto.
b) Punteggiature:
Semplice: esiste una funzione banale del tipo ischar... nel caso in cui sia positiva basta sostituire il carattere con null.
Concludendo, un ciclo nested con magari un fork per massimizzare l'efficenza è la tua scommessa migliore imo, qualcosa del tipo:
....
char c; (il caratter in esame)
if (ischar(c) ) {
  if (isalpha(c) ) 
      c=(c-64)%33; (fa il contrario, trasforma minuscole in maiuscole)
   else 
      c=" ";
}
aggiungo: ho scoperto che esiste una funzione tolower() che fa l'operazione modulo in automatico...
Vincenzo1968
01-11-2008, 19:27
Dovrebbe andare bene.
Puoi scaricare il programma(per Win32) e i sorgenti relativi da questo link (http://www.guidealgoritmi.it/public/ScanDir.zip).
La DLL deve trovarsi nella stessa cartella del file eseguibile. Il programma va lanciato passandogli, da riga di comando, il percorso della cartella di partenza.
Per esempio, se i tuoi file si trovano nella cartella "C:\Prova", devi dare questo comando:
ScanDirClient C:\Prova
Il programma ricerca tutti i file contenuti nella cartella specificata e in tutte le sue sottocartelle e produce un file chiamato corpus.txt.
:)
Edit: dimenticavo, il criterio che ho utilizzato per suddividere il file di output su più righe, è quello che hai indicato tu: sostituisco ogni punto, nei file di input, con un new line nel file di output.
angel110
01-11-2008, 23:44
Dovrebbe andare bene.
Puoi scaricare il programma(per Win32) e i sorgenti relativi da questo link (http://www.guidealgoritmi.it/public/ScanDir.zip).
La DLL deve trovarsi nella stessa cartella del file eseguibile. Il programma va lanciato passandogli, da riga di comando, il percorso della cartella di partenza.
Per esempio, se i tuoi file si trovano nella cartella "C:\Prova", devi dare questo comando:
ScanDirClient C:\Prova
Il programma ricerca tutti i file contenuti nella cartella specificata e in tutte le sue sottocartelle e produce un file chiamato corpus.txt.
:)
Edit: dimenticavo, il criterio che ho utilizzato per suddividere il file di output su più righe, è quello che hai indicato tu: sostituisco ogni punto, nei file di input, con un new line nel file di output.
Ciao grazie il programma funziona bene ed è velocissimo! Solo che il mio criterio di andare a capo appena uno incontra il carattere punto '.' è sbagliato, perchè ci sono moltissime frasi che hanno al loro interno espressioni del tipo:
st. Michigan etc
Fig. 9.28
Mr. k.t.s.  (insomma le sigle)
e così via.
Di conseguenza la frase viene spezzata in due o in tre e ciò non va bene.
mmm per esempio si potrebbe andare a capo  solo quando
dopo il punto '.' c'è una lettera maiuscola oppure un pò di spazio e dopo la lettera maiuscola.
Successivamente si toglie la punteggiatura e si sostituiscono le maiuscole con le minuscole. 
(è chiaro che se c'è una frase con errore di stampa che dopo il punto mette la minuscola non funziona, oppure se c'è il nome di una via del dipo st. Robert si spezzerebbe lo stesso la frase ma forse è un errore accettabile) 
Che ne dici ha qualche idea migliore?
Marco
malocchio
02-11-2008, 00:13
Ciao grazie il programma funziona bene ed è velocissimo! Solo che il mio criterio di andare a capo appena uno incontra il carattere punto '.' è sbagliato, perchè ci sono moltissime frasi che hanno al loro interno espressioni del tipo:
st. Michigan etc
Fig. 9.28
Mr. k.t.s.  (insomma le sigle)
e così via.
Di conseguenza la frase viene spezzata in due o in tre e ciò non va bene.
mmm per esempio si potrebbe andare a capo  solo quando
dopo il punto '.' c'è una lettera maiuscola oppure un pò di spazio e dopo la lettera maiuscola.
Successivamente si toglie la punteggiatura e si sostituiscono le maiuscole con le minuscole. 
(è chiaro che se c'è una frase con errore di stampa che dopo il punto mette la minuscola non funziona, oppure se c'è il nome di una via del dipo st. Robert si spezzerebbe lo stesso la frase ma forse è un errore accettabile) 
Che ne dici ha qualche idea migliore?
Marco
Più di così non puoi fare!
Non puoi scrivere un programma che capisca se la frase è di senso compiuto oppure no. L'unica soluzione è quella che hai detto tu. ;)
Vincenzo1968
02-11-2008, 15:39
Più di così non puoi fare!
Non puoi scrivere un programma che capisca se la frase è di senso compiuto oppure no. L'unica soluzione è quella che hai detto tu. ;)
Sono d'accordo. Un automa per gestire tutte le regole grammaticali di una lingua dovrebbe avere centinaia o migliaia di stati: follia pura pensare di implementarlo.
Modifico il programma con il criterio del punto seguito da spazio/i + lettera maiuscola.
angel110
02-11-2008, 16:30
Sono d'accordo. Un automa per gestire tutte le regole grammaticali di una lingua dovrebbe avere centinaia o migliaia di stati: follia pura pensare di implementarlo.
Modifico il programma con il criterio del punto seguito da spazio/i + lettera maiuscola.
Perfetto, ti ringrazio.
Ci sarebbe un'altra cosa:  sarebbe meglio dare una mescolata all'ordine delle righe del file finale corpus.txt
Mi spiego meglio se adesso il corpus.txt è così formato:
riga1
riga2 
riga3
...
riga20000
Dopo la mescolata casuale dovrebbe essere per esempio così:
Riga400
Riga6789
Riga4599
...
Riga15021
Il contenuto di ogni riga rimane inalterato, cambia solo l'ordine di apparizione.
Tutto questo mi serve perchè mio programma a valle, legge una riga alla volta e memorizza tutte le parole nuove.
Ad ogni parola nuova associa un vettore numerico v1 di circa 2000 dimensioni e un'altro vettore di uguali dimensioni v2 che memorizza l'occorrenza della stessa parola in tutte le frasi e la posizione relativa nella frase (in pratica riassume il signifcato semantico della parola), dopo questo procedimento posso calcolare la similarità semantica tra due qualsiasi parole calcolando il coseno dei due vettori associati.
Il punto è che se l'ordine di apparizione delle righe subisce una permutazione significa che il mio programma apprende da subito da tutte le fonti del corpus Tasa, e ciò è importante dal punto di vista statistico.
Vincenzo1968
02-11-2008, 16:49
Ho aggiornato il link (http://www.guidealgoritmi.it/public/ScanDir.zip).
Fai qualche prova e dimmi se va bene il discorso dell'andatina a capo dopo il punto+spazio/i+lettera maiuscola.
Io ho provato con il file di input che hai postato(piazzato in tre diverse cartelle), e il risultato è questo:
spatial order occurs when the artist senses the right balance and best placement of the vital forces affecting spatial illusions
using the traditional methods of spatial indication such as shape size position overlapping sharp and diminishing detail converging parallels reverse perspective color value and texture create a nonobjective picture based on the theme of intuitive space many contemporary artists consider transparency an important way of defining space
using linear perspective or parallel convergence of lines create the effect of looking through transparent planes set at different angles to one another within a volume of space
define several different distances in depth by having some planes that are opaque or semitransparent
mix color texture and value as the transparent planes meet
surface textures and patterns are often used by the contemporary artist to control spatial suggestions
such decorative relationships permit a freer interpretation of object shapes and encourage variations that can contribute to organic unity of the pictorial elements
the result is a shallow or decorative space concept
create a composition of forms derived from still life sculptural or architectural forms
omit indication of naturalistic light and shade substituting decorative textures and patterns such as lines spots and stripes
break up background areas into arbitrary shapes that seem related to objects and use decorative texture in some of these spaces as well
solid tones of varying values and or color may be used to keep the overall design from becoming too busy and over elaborate cezanne and the cubists often combined several viewpoints of a plastic image in one painting
the juxta position of multiple views in a single painting implies movement of the observer around the objects
select a single object to be used as a model for this problem
on three pieces of tracing paper draw the top or plan view the elevation view and a section view of the same object to the same scale
spatial order occurs when the artist senses the right balance and best placement of the vital forces affecting spatial illusions
using the traditional methods of spatial indication such as shape size position overlapping sharp and diminishing detail converging parallels reverse perspective color value and texture create a nonobjective picture based on the theme of intuitive space many contemporary artists consider transparency an important way of defining space
using linear perspective or parallel convergence of lines create the effect of looking through transparent planes set at different angles to one another within a volume of space
define several different distances in depth by having some planes that are opaque or semitransparent
mix color texture and value as the transparent planes meet
surface textures and patterns are often used by the contemporary artist to control spatial suggestions
such decorative relationships permit a freer interpretation of object shapes and encourage variations that can contribute to organic unity of the pictorial elements
the result is a shallow or decorative space concept
create a composition of forms derived from still life sculptural or architectural forms
omit indication of naturalistic light and shade substituting decorative textures and patterns such as lines spots and stripes
break up background areas into arbitrary shapes that seem related to objects and use decorative texture in some of these spaces as well
solid tones of varying values and or color may be used to keep the overall design from becoming too busy and over elaborate cezanne and the cubists often combined several viewpoints of a plastic image in one painting
the juxta position of multiple views in a single painting implies movement of the observer around the objects
select a single object to be used as a model for this problem
on three pieces of tracing paper draw the top or plan view the elevation view and a section view of the same object to the same scale
spatial order occurs when the artist senses the right balance and best placement of the vital forces affecting spatial illusions
using the traditional methods of spatial indication such as shape size position overlapping sharp and diminishing detail converging parallels reverse perspective color value and texture create a nonobjective picture based on the theme of intuitive space many contemporary artists consider transparency an important way of defining space
using linear perspective or parallel convergence of lines create the effect of looking through transparent planes set at different angles to one another within a volume of space
define several different distances in depth by having some planes that are opaque or semitransparent
mix color texture and value as the transparent planes meet
surface textures and patterns are often used by the contemporary artist to control spatial suggestions
such decorative relationships permit a freer interpretation of object shapes and encourage variations that can contribute to organic unity of the pictorial elements
the result is a shallow or decorative space concept
create a composition of forms derived from still life sculptural or architectural forms
omit indication of naturalistic light and shade substituting decorative textures and patterns such as lines spots and stripes
break up background areas into arbitrary shapes that seem related to objects and use decorative texture in some of these spaces as well
solid tones of varying values and or color may be used to keep the overall design from becoming too busy and over elaborate cezanne and the cubists often combined several viewpoints of a plastic image in one painting
the juxta position of multiple views in a single painting implies movement of the observer around the objects
select a single object to be used as a model for this problem
on three pieces of tracing paper draw the top or plan view the elevation view and a section view of the same object to the same scale
Vincenzo1968
02-11-2008, 16:58
...
Il contenuto di ogni riga rimane inalterato, cambia solo l'ordine di apparizione.
Tutto questo mi serve perchè mio programma a valle, legge una riga alla volta e memorizza tutte le parole nuove.
Ad ogni parola nuova associa un vettore numerico v1 di circa 2000 dimensioni e un'altro vettore di uguali dimensioni v2 che memorizza l'occorrenza della stessa parola in tutte le frasi e la posizione relativa nella frase (in pratica riassume il signifcato semantico della parola), dopo questo procedimento posso calcolare la similarità semantica tra due qualsiasi parole calcolando il coseno dei due vettori associati.
Il punto è che se l'ordine di apparizione delle righe subisce una permutazione significa che il mio programma apprende da subito da tutte le fonti del corpus Tasa, e ciò è importante dal punto di vista statistico.
Non ne capisco un tubo di seni(matematicamente parlando) e coseni. :confused:
Edit: Comunque il problema è interessante. Se ne potrebbe ricavare un contest. ;)
angel110
02-11-2008, 17:38
Ho aggiornato il link (http://www.guidealgoritmi.it/public/ScanDir.zip).
Fai qualche prova e dimmi se va bene il discorso dell'andatina a capo dopo il punto+spazio/i+lettera maiuscola.
OMISSIS
Funziona meglio di prima, fa ancora qualche errore come in questa frase:
...then goes outside.   "The last ...
Non è andato a capo ma ha unito le due frasi così:
...then goes outsidethe last... 
però non si può tagliare il capello. Io posso lavorare anche così.
p.s.
Puoi rimescolare l'ordine di apparizione delle frasi nel file corpus.txt?
Vincenzo1968
02-11-2008, 18:23
Funziona meglio di prima, fa ancora qualche errore come in questa frase:
...then goes outside.   "The last ...
Non è andato a capo ma ha unito le due frasi così:
...then goes outsidethe last... 
però non si può tagliare il capello. Io posso lavorare anche così.
Ho aggiornato il link (http://www.guidealgoritmi.it/public/ScanDir.zip). Adesso dovrebbe andare a capo anche quando, dopo il punto, incontra le virgolette doppie o singole. Prova e fammi sapere.
p.s.
Puoi rimescolare l'ordine di apparizione delle frasi nel file corpus.txt?
Si potrebbe fare un terzo programma che legge il file di output e rimescola le righe.
Per curiosità, mi fai sapere i tempi registrati sulla tua macchina provando con la cartella che contiene i 10.000 file?
Ciao.
angel110
02-11-2008, 21:11
Ciao ho fatto la prova e il tuo programma funziona ancora meglio
perchè le frasi estrapolate sono più regolari.
Per elaborare tutto il tasa corpus in mio possesso (43300 file di testo)
ci ha impiegato circa 5 secondi (ho misurato grossolanamente
con l'orologio da polso) il file corpus.txt è venuto grande
68megabyte.
Se vuoi puoi scaricare una versione limitata
del tasa corpus per farti un'idea dei risultati che ottengo, l'ho compresso sia con winrar che con winzip.
con rar mi è venuto 5 mega con winzip sono 10 mega.
http://marcoangel.altervista.org/TasaSmall.rar
http://marcoangel.altervista.org/TasaSmall.zip
Vincenzo1968
02-11-2008, 21:36
...
Per elaborare tutto il tasa corpus in mio possesso (43300 file di testo)
ci ha impiegato circa 5 secondi (ho misurato grossolanamente
con l'orologio da polso) il file corpus.txt è venuto grande
68megabyte.
...
[/URL]
Forse non hai scaricato l'ultima versione (http://www.guidealgoritmi.it/public/ScanDir.zip). Ho fatto in modo che, alla fine, stampi alcune informazioni(numero di righe del file di output, numero dei file di input eleborati, etc) e, tra queste, il tempo di esecuzione.
http://www.guidealgoritmi.it/images/ImgForums/p13output.jpg
Hai provato a vedere se gestisce bene situazioni del tipo:
...then goes outside. "The last ...
?
angel110
03-11-2008, 15:38
Forse non hai scaricato l'ultima versione (http://www.guidealgoritmi.it/public/ScanDir.zip). Ho fatto in modo che, alla fine, stampi alcune informazioni(numero di righe del file di output, numero dei file di input eleborati, etc) e, tra queste, il tempo di esecuzione.
http://www.guidealgoritmi.it/images/ImgForums/p13output.jpg
Hai provato a vedere se gestisce bene situazioni del tipo:
...then goes outside. "The last ...
?
Ciao Vincenzo il programma non da più problemi con quella frase 
... then goes outside. "The last.. 
Riguardo al tempo di esecuzione l'ho riscaricato proprio adesso ci sta circa 30 secondi al primo utilizzo, dal secondo utilizzo in poi circa 4 secondi.
Anche questa volta ho misurato il tempo grossolanamente, il valore che dici tu non riesco a leggerlo perchè la finestra dos scompare subito dopo che finesce l'elaborazione.
Ciao
Vincenzo1968
03-11-2008, 16:40
Eqque qua:
Ho aggiunto un terzo programma, Mescola.exe(e i relativi sorgenti) che legge il file corpus.txt originale e ne mescola casualmente(meglio, pseudo-casualmente) le righe.
Devi lanciarlo passandogli, da riga di comando, il nome del file di input e quello del file di output. Per esempio, con il seguente comando:
Mescola corpus.txt corpus2.txt
leggiamo il file corpus.txt e ne creiamo un altro, corpus2.txt, che contiene le righe del primo file ma in ordine pseudo-casuale.
Questo è Il link (http://www.guidealgoritmi.it/public/ScanDir.zip) per scaricare il programma.
:) 
P.S. per fare in modo che la finestra DOS non scompaia immediatamente dopo l'esecuzione del programma, puoi aprirla così:
1) Start -> Esegui
2) digita "cmd" (senza le virgolette) e premi INVIO (o fai click su OK).
3) Ti sposti con il comando dos CD nella cartella che contiene l'eseguibile e lo lanci.
angel110
04-11-2008, 16:51
Eqque qua:
Ho aggiunto un terzo programma, Mescola.exe(e i relativi sorgenti) che legge il file corpus.txt originale e ne mescola casualmente(meglio, pseudo-casualmente) le righe.
Devi lanciarlo passandogli, da riga di comando, il nome del file di input e quello del file di output. Per esempio, con il seguente comando:
Mescola corpus.txt corpus2.txt
leggiamo il file corpus.txt e ne creiamo un altro, corpus2.txt, che contiene le righe del primo file ma in ordine pseudo-casuale.
Questo è Il link (http://www.guidealgoritmi.it/public/ScanDir.zip) per scaricare il programma.
:) 
P.S. per fare in modo che la finestra DOS non scompaia immediatamente dopo l'esecuzione del programma, puoi aprirla così:
1) Start -> Esegui
2) digita "cmd" (senza le virgolette) e premi INVIO (o fai click su OK).
3) Ti sposti con il comando dos CD nella cartella che contiene l'eseguibile e lo lanci.
Ho fatto c'ha impiegato per la prima scansione 95,6 secondi
e per la seconda 3,4 secondi
angel110
04-11-2008, 19:57
Eqque qua:
Ho aggiunto un terzo programma, Mescola.exe(e i relativi sorgenti) che legge il file corpus.txt originale e ne mescola casualmente(meglio, pseudo-casualmente) le righe.
Devi lanciarlo passandogli, da riga di comando, il nome del file di input e quello del file di output. Per esempio, con il seguente comando:
Mescola corpus.txt corpus2.txt
leggiamo il file corpus.txt e ne creiamo un altro, corpus2.txt, che contiene le righe del primo file ma in ordine pseudo-casuale.
Questo è Il link (http://www.guidealgoritmi.it/public/ScanDir.zip) per scaricare il programma.
:) 
P.S. per fare in modo che la finestra DOS non scompaia immediatamente dopo l'esecuzione del programma, puoi aprirla così:
1) Start -> Esegui
2) digita "cmd" (senza le virgolette) e premi INVIO (o fai click su OK).
3) Ti sposti con il comando dos CD nella cartella che contiene l'eseguibile e lo lanci.
Buonasera Vincenzo, lo sai che le parole inglesi non hanno mai l'accento? Io non l'avevo mai notato fino a stasera.
Finchè ho provato il programma anche con file di testo in italiano, il risultato è stato orribile perchè il programma cancella le vocali accentate e le parole risultano monche. Potresti fare una modifica per sostituire a  le parole accentate:
à è é ì ò ù, con le vocali senza accento a e i o u ?
Vincenzo1968
04-11-2008, 21:30
Buonasera Vincenzo, lo sai che le parole inglesi non hanno mai l'accento? Io non l'avevo mai notato fino a stasera.
Finchè ho provato il programma anche con file di testo in italiano, il risultato è stato orribile perchè il programma cancella le vocali accentate e le parole risultano monche. Potresti fare una modifica per sostituire a  le parole accentate:
à è é ì ò ù, con le vocali senza accento a e i o u ?
Non è meglio lasciarle così come sono(cioè con l'accento)? O per le tue statistiche ti è più agevole sostituire le vocali accentate?
angel110
04-11-2008, 23:14
Non è meglio lasciarle così come sono(cioè con l'accento)? O per le tue statistiche ti è più agevole sostituire le vocali accentate?
Guarda non funziona bene con l'italiano, l'ho provato su un romanzo
Mastro don Gesualo di Verga.
Il file risultante corpus.txt è pieno di frasi di questo tipo:
moglie e la figliuola  ue signore avvezze
ma stavolta se mai ha trovato uno pi furbo di lui
bianca appena lo vide con quella faccia si impaur 
Mancano tutte le lettere accentate.
Se vuoi puoi scaricare qui il romanzo e vedere.
MastroDonGesualdo.zip (http://marcoangel.altervista.org/MastroDonGesualdo.zip)
Vincenzo1968
04-11-2008, 23:31
Guarda non funziona bene con l'italiano, l'ho provato su un romanzo
Mastro don Gesualo di Verga.
Il file risultante corpus.txt è pieno di frasi di questo tipo:
moglie e la figliuola  ue signore avvezze
ma stavolta se mai ha trovato uno pi furbo di lui
bianca appena lo vide con quella faccia si impaur 
Mancano tutte le lettere accentate.
Se vuoi puoi scaricare qui il romanzo e vedere.
MastroDonGesualdo.zip (http://marcoangel.altervista.org/MastroDonGesualdo.zip)
Si lo so,
posso modificare l'automa in modo che gestisca le variabili accentate. Dico, nel file di output, preferisci che le parole con vocali accentati rimangano tali o le sostituisco con vocali senza accento?
;)
angel110
05-11-2008, 09:12
Si lo so,
posso modificare l'automa in modo che gestisca le variabili accentate. Dico, nel file di output, preferisci che le parole con vocali accentati rimangano tali o le sostituisco con vocali senza accento?
;)
Ahh ho capito,  si è meglio che le parole con vocali accentate rimangano tali.
Vincenzo1968
05-11-2008, 16:16
Ho aggiornato il link (http://www.guidealgoritmi.it/public/ScanDir.zip).
Ho provato, scaricando i file da qui (http://www.liberliber.it/biblioteca/v/index.htm), con I Vicerè di De Roberto, Mastro Don Gesualdo di Verga e con il Candido di Voltaire.
angel110
05-11-2008, 20:52
Ho aggiornato il link (http://www.guidealgoritmi.it/public/ScanDir.zip).
Ho provato, scaricando i file da qui (http://www.liberliber.it/biblioteca/v/index.htm), con I Vicerè di De Roberto, Mastro Don Gesualdo di Verga e con il Candido di Voltaire.
No non va bene ho fatto un nuovo corpus.txt ho fatto delle statistiche.. ma sono piene d'errori, il mio programma funziona con le parole inglesi senza accento.
Perciò se lo voglio usare anche con qualche file in italiano
 le accentate à è é ì ò ù, dobbiamo trasformarle in a e i o u anche nel file di output corpus.txt 
Inoltre nel corpus.txt non ci deve stare per nessun motivo l'apostrofo
cose del tipo: "l'america"  non vanno bene dovrebbe essere solo "america"
inoltre un ultimo requisito.. se nel corpus.txt ci sono delle lettere singole vaganti del tipo:
sai marco c ho pensato e dovresti comprare i nostri video d capisci
bisogna eliminarle e dovrebbe venire così:
sai marco ho pensato dovresti comprare nostri video capisci
Quindi la regola è la seguente: la sequenza di tre caratteri SpazioLetteraSpazio deve essere sostituita 
 
da un unico Spazio.
Vincenzo1968
05-11-2008, 22:07
La grammatica della lingua italiana è molto più complicata rispetto a quella della lingua inglese.
Provo a fare le modifiche che hai chiesto ma, mi sa tanto, che spunteranno tanti altri problemi. Non possiamo stare appresso a tutte le regole e regolette della grammatica ;)
Ciao. Il bello del C è che esiste una relazione biunivoca tra tuttii i caratteri rappresentabili con le tabelle (h)ascii(sh) e un sottoinsieme dei naturali.
Effettivamente è una bella cosa, però si tratta di una proprietà intrinseca della codifica dati, e non una caratteristica del linguaggio di programmazione (infatti se usi altre codifiche le relazioni matematiche che sfrutti non funzionano, mentre se sei sicuro di utilizzare dati codificati tramite il formato ASCII, nulla ti vieta di implementare questo sistema in un qualsiasi linguaggio ti programmazione).
Oltretutto, questo sistema non funziona se al posto del codice ASCII hai del testo codificato in Unicode: caratteri accentati e affini non sarebbero correttamente interpretati, senza considerare il fatto che la premessa generale per far funzionare il tuo esempio è che i caratteri occupino esattamente un byte, e quindi siano ad esso in qualche modo "equivalenti", cosa anche questa non sempre vera.
Se ti trovi nell'ambito del testo scritto in lingua inglese, generalmente la codifica ASCII è sufficiente (perchè è stata pensata primariamente per la lingua inglese, che non usa caratteri "speciali" per le parole ordinarie): altrimenti, è forse meglio rivolgersi a librerie specializzate che tengano conto delle pecurialità del formato di rappresentazione del testo.
angel110
05-11-2008, 22:40
La grammatica della lingua italiana è molto più complicata rispetto a quella della lingua inglese.
Provo a fare le modifiche che hai chiesto ma, mi sa tanto, che spunteranno tanti altri problemi. Non possiamo stare appresso a tutte le regole e regolette della grammatica ;)
Il punto è che il file corpus.txt che deve venire uguale nella forma a 
questo qui (http://marcoangel.altervista.org/wiki.txt) come vedi è un file di testo "pulito" è facile da analizzare per le statistiche.
Hai ragione l'italiano ha troppe regole. Facciamo un passo indietro io utilizzo il programma che mi hai spedito senza  le modifiche per le lettere accentate (ho conservato la vecchia versione) e faccio esperimenti solo in lingua inglese.
Adesso il mio problema è un'altro:
C'è bisogno di un'interfaccia grafica a finestra, io devo consegnare entro sabato la prima stesura non so fare l'interfaccia.
Se hai tempo e dimestichezza con le interfaccie a finestra ti dico di che avrei bisogno.. è una cosa semplice è una finestra con tre pulsanti:
Il primo pulsante mi avvia il programma1.exe (quello mio in fortran)
oltre a permettermi di mettere due parametri
finora sono costretto a fare c:\prog\programma1.exe par1 par2
E gli altri due pulsanti fanno la stessa cosa
il pulsante2 mi avvia il mio programma2.exe e mi permette di mettere due parametri
Stessa cosa per il pulsante3
Se mi vuoi aiutare ancora ti faccio un disegnino e lo posto qui.
Vincenzo1968
05-11-2008, 23:43
..
Se hai tempo e dimestichezza con le interfaccie a finestra ti dico di che avrei bisogno.. è una cosa semplice è una finestra con tre pulsanti:
Il primo pulsante mi avvia il programma1.exe (quello mio in fortran)
oltre a permettermi di mettere due parametri
finora sono costretto a fare c:\prog\programma1.exe par1 par2
E gli altri due pulsanti fanno la stessa cosa
il pulsante2 mi avvia il mio programma2.exe e mi permette di mettere due parametri
Stessa cosa per il pulsante3
Se mi vuoi aiutare ancora ti faccio un disegnino e lo posto qui.
Si può fare ;)
Una domanda: una volta premuto un pulsante e lanciato un programma, ti serve che il resto del programma si blocchi(per esempio, non permettendo di lanciare il secondo programma) finché il programma lanciato non finisca il suo lavoro e ritorni? O dev'essere consentito lanciare i tre programmi in contemporanea?
Vincenzo1968
06-11-2008, 16:35
OK, puoi scaricare il programma, Launch.exe, da questo link (http://www.guidealgoritmi.it/public/ScanDir.zip).
http://www.guidealgoritmi.it/images/ImgForums/Launch.jpg 
Programma1.exe, Programma2.exe e Programma3.exe devono trovarsi nella stessa cartella di Launch.exe.
;)
angel110
06-11-2008, 16:45
OK, puoi scaricare il programma, Launch.exe, da questo link (http://www.guidealgoritmi.it/public/ScanDir.zip).
http://www.guidealgoritmi.it/images/ImgForums/Launch.jpg 
Programma1.exe, Programma2.exe e Programma3.exe devono trovarsi nella stessa cartella di Launch.exe.
;)
Bravo è carino mi potrà servire come utility, però forse ti deludo dicendoti che ieri sera ho passato la notte davanti al computer, ho riesumato il c++ builder vecchio di secoli e ci sono riuscito pure io a fare una cacchetta di frontend!
Vincenzo1968
06-11-2008, 17:51
Forse sono riuscito a risolvere il problema degli apostrofi.
Se questo è l'originale(Verga, Mastro Don Gesualdo):
Suonava la messa dell'alba a San Giovanni; ma il paesetto dormiva ancora della grossa, perché era piovuto da tre giorni, e nei seminati ci si affondava fino a mezza gamba. Tutt'a un tratto, nel silenzio, s'udì un rovinìo, la campanella squillante di Sant'Agata che chiamava aiuto, usci e finestre che sbattevano, la gente che scappava fuori in camicia, gridando:
- Terremoto! San Gregorio Magno!
Era ancora buio. Lontano, nell'ampia distesa nera dell'Alìa, ammiccava soltanto un lume di carbonai, e più a sinistra la stella del mattino, sopra un nuvolone basso che tagliava l'alba nel lungo altipiano del Paradiso. Per tutta la campagna diffondevasi un uggiolare lugubre di cani. E subito, dal quartiere basso, giunse il suono grave del campanone di San Giovanni che dava l'allarme anch'esso; poi la campana fessa di San Vito; l'altra della chiesa madre, più lontano; quella di Sant'Agata che parve addirittura cascar sul capo agli abitanti della piazzetta. Una dopo l'altra s'erano svegliate pure le campanelle dei monasteri, il Collegio, Santa Maria, San Sebastiano, Santa Teresa: uno scampanìo generale che correva sui tetti spaventato, nelle tenebre.
in output va bene questo?:
suonava la messa alba a san giovanni ma il paesetto dormiva ancora della grossa perche era piovuto da tre giorni e nei seminati ci si affondava fino a mezza gamba
a un tratto nel silenzio udi un rovinio la campanella squillante di agata che chiamava aiuto usci e finestre che sbattevano la gente che scappava fuori in camicia gridando   terremoto san gregorio magno  era ancora buio
lontano ampia distesa nera alia ammiccava soltanto un lume di carbonai e piu a sinistra la stella del mattino sopra un nuvolone basso che tagliava alba nel lungo altipiano del paradiso
per tutta la campagna diffondevasi un uggiolare lugubre di cani
angel110
06-11-2008, 18:04
Forse sono riuscito a risolvere il problema degli apostrofi.
Se questo è l'originale(Verga, Mastro Don Gesualdo):
Suonava la messa dell'alba a San Giovanni; ma il paesetto dormiva ancora della grossa, perché era piovuto da tre giorni, e nei seminati ci si affondava fino a mezza gamba. Tutt'a un tratto, nel silenzio, s'udì un rovinìo, la campanella squillante di Sant'Agata che chiamava aiuto, usci e finestre che sbattevano, la gente che scappava fuori in camicia, gridando:
- Terremoto! San Gregorio Magno!
Era ancora buio. Lontano, nell'ampia distesa nera dell'Alìa, ammiccava soltanto un lume di carbonai, e più a sinistra la stella del mattino, sopra un nuvolone basso che tagliava l'alba nel lungo altipiano del Paradiso. Per tutta la campagna diffondevasi un uggiolare lugubre di cani. E subito, dal quartiere basso, giunse il suono grave del campanone di San Giovanni che dava l'allarme anch'esso; poi la campana fessa di San Vito; l'altra della chiesa madre, più lontano; quella di Sant'Agata che parve addirittura cascar sul capo agli abitanti della piazzetta. Una dopo l'altra s'erano svegliate pure le campanelle dei monasteri, il Collegio, Santa Maria, San Sebastiano, Santa Teresa: uno scampanìo generale che correva sui tetti spaventato, nelle tenebre.
in output va bene questo?:
suonava la messa alba a san giovanni ma il paesetto dormiva ancora della grossa perche era piovuto da tre giorni e nei seminati ci si affondava fino a mezza gamba
a un tratto nel silenzio udi un rovinio la campanella squillante di agata che chiamava aiuto usci e finestre che sbattevano la gente che scappava fuori in camicia gridando   terremoto san gregorio magno  era ancora buio
lontano ampia distesa nera alia ammiccava soltanto un lume di carbonai e piu a sinistra la stella del mattino sopra un nuvolone basso che tagliava alba nel lungo altipiano del paradiso
per tutta la campagna diffondevasi un uggiolare lugubre di cani
Così va bene ma lo fa isolatamente o in tutto il file?  mastrodongesualdo.txt è un pò difficile da elaborare.
Vincenzo1968
06-11-2008, 18:27
Così va bene ma lo fa isolatamente o in tutto il file?  mastrodongesualdo.txt è un pò difficile da elaborare.
In tutto il file(mica potevo postare tutto il romanzo. Ho preso solo l'incipit, come esempio ;))
QUI (http://www.guidealgoritmi.it/public/corpus.zip) puoi scaricare il file corpus.txt prodotto dal romanzo di Verga.
angel110
07-11-2008, 20:32
In tutto il file(mica potevo postare tutto il romanzo. Ho preso solo l'incipit, come esempio ;))
QUI (http://www.guidealgoritmi.it/public/corpus.zip) puoi scaricare il file corpus.txt prodotto dal romanzo di Verga.
E' buono. L'hai aggiornato il link del programma?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.