Manipolazione stringhe


#1

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


#2

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

Il 18 marzo 2009 10.54, Davide Monfrecola
removed_email_address@domain.invalid ha scritto:

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


Carlo P.
email: removed_email_address@domain.invalid
twitter: @carlopecchia


#3

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:


#4

Il 18 marzo 2009 10.54, Davide Monfrecola
removed_email_address@domain.invalid 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


#5

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

Grazie

Luigi


#6

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


#7

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.


#8

Il 18 marzo 2009 12.11, Luigi M. removed_email_address@domain.invalid 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…


#9

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


#10

Il 18 marzo 2009 13.58, Luigi M. removed_email_address@domain.invalid ha scritto:

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

@buffer.split /\W+/

è equivalente a

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

però trovo il primo più leggibile.