|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
[c++][java]in un file .txt togliere maiuscole, punteggiatura etc
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?
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
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 |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
Quote:
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
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? |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
Quote:
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
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. |
|
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
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 |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
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"
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. |
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Puoi postarmi anche un esempio di file di input?
Ciao |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
Ciao ecco qui
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. |
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Il programmino è quasi pronto. Devo solo testarlo un po'
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Oct 2008
Messaggi: 558
|
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: Codice:
....
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=" ";
}
|
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Oct 2008
Messaggi: 558
|
aggiungo: ho scoperto che esiste una funzione tolower() che fa l'operazione modulo in automatico...
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Dovrebbe andare bene.
Puoi scaricare il programma(per Win32) e i sorgenti relativi da questo link. 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: Codice:
ScanDirClient C:\Prova 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. Ultima modifica di Vincenzo1968 : 01-11-2008 alle 19:35. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
Quote:
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
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. Ultima modifica di angel110 : 01-11-2008 alle 23:51. Motivo: per completezza |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
Non puoi scrivere un programma che capisca se la frase è di senso compiuto oppure no. L'unica soluzione è quella che hai detto tu.
__________________
|
|
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Modifico il programma con il criterio del punto seguito da spazio/i + lettera maiuscola. |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
Quote:
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.
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. Ultima modifica di angel110 : 02-11-2008 alle 16:35. Motivo: correzione frase |
|
|
|
|
|
|
#18 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ho aggiornato il link.
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: Codice:
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 Ultima modifica di Vincenzo1968 : 02-11-2008 alle 16:51. |
|
|
|
|
|
#19 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Edit: Comunque il problema è interessante. Se ne potrebbe ricavare un contest. Ultima modifica di Vincenzo1968 : 02-11-2008 alle 17:25. |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Palermo
Messaggi: 596
|
Quote:
...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?
__________________
Athlon II X2 240e 45watt, MB gigabyte nForce 720d, 4 giga ram ddr2 800mhz, ati 5750 1giga ram ddr5, ssd intel x25-m 80giga 2° gen. + ssd OCZ 60 giga, dual boot Windows xp sp3 e Windows seven ultimate 64 bit. Sistema raffreddamento attivo 3 ventole noctua ultralow voltage. Ultima modifica di angel110 : 02-11-2008 alle 17:39. Motivo: aggiunta |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:00.




















