Manipolazione stringhe

Ciao a tutti,
ho un piccolo problema con la manipolazione delle stringhe.
Praticamente io leggo da file e inserisco tutto all’interno di una
variabile:

@buffer = IO.read(file).downcase!

Dopodichè formo un array con tutte le parole contenute in @buffer
usando split

@content = @buffer.split(" ")

A questo punto, a me serve eliminare tutti i caratteri speciali e le
cose piu’
comuni come ad esempio il, lo, per, con ecc e i segni di
punteggiatura. Ho
provato ad eliminare i segni di punteggiatura con il metodo slice, ma il
problema è che mi elimina solo la prima occorrenza nella strings, e se
ce ne
sono altre non le considera.

@content.each { |a| a.slice!(/[’.,<>()-?:/"]/)}

Come posso fare?Invece per le parole che metodi potrei usare?sempre
slice?

Grazie per l’aiuto e buona giornata! :slight_smile:
Davide

Per eliminare caratteri (o serie di caratteri) puoi utilizzare
String#tr

Il 18 marzo 2009 10.54, Davide Monfrecola
[email protected] ha scritto:

@content = @buffer.split(" “)
@content.each { |a| a.slice!(/['.,<>()-?:/”]/)}


Carlo P.
email: [email protected]
twitter: @carlopecchia

On 18/mar/09, at 10:56, Carlo P. wrote:

Per eliminare caratteri (o serie di caratteri) puoi utilizzare
String#tr

Grazie mille! l’avevo già provato, ma l’avevo provato male! :slight_smile: Ora
sono riuscito a fargli fare quello che volevo! :slight_smile:

Il 18 marzo 2009 10.54, Davide Monfrecola
[email protected] ha scritto:

Dopodichè formo un array con tutte le parole contenute in @buffer
usando split

@content = @buffer.split(" ")

A questo punto, a me serve eliminare tutti i caratteri speciali e le
cose piu’ comuni come ad esempio il, lo, per, con ecc e i segni di
punteggiatura.

che ne dici di:

@content = @buffer.split /\W+/

così hai un arrai contenente solo parole, e la punteggiatura l’hai già
eliminata…

pietro

Domanda:
perché non usare un gsub?
ci sono differenze?

Grazie

Luigi

On 18/mar/09, at 11:12, Pietro G. wrote:

che ne dici di:

@content = @buffer.split /\W+/

così hai un arrai contenente solo parole, e la punteggiatura l’hai già
eliminata…

pietro

Penso sia un’ottima idea! Grazie!

Davide

On 18/mar/09, at 12:35, Pietro G. wrote:

da quello che ha scritto davide, sembra di capire che a lui serve
proprio avere le singole parole, non la stringa intera…

Esatto, mi serve avere un array con tutte le parole perchè poi devo
calcolare l’hash di ogni singola parola.

Il 18 marzo 2009 12.11, Luigi M. [email protected] ha scritto:

Domanda:
perché non usare un gsub?
ci sono differenze?

da quello che ha scritto davide, sembra di capire che a lui serve
proprio avere le singole parole, non la stringa intera…

Si si d’accordo, intendevo un
gsub(/ #{word_da_eliminare} /," ").split

Non intendevo proporre un metodo alternativo a quello da voi proposto ma
volevo solo capire le differenze tra il gsub (che, se non si è capito,
uso io) e il @buffer.split /\W+/

Grazie mille

Il 18 marzo 2009 13.58, Luigi M. [email protected] ha scritto:

gsub(/ #{word_da_eliminare} /," ").split

@buffer.split /\W+/

è equivalente a

@buffer.gsub(/\W+/, ’ ').split

però trovo il primo più leggibile.