Hola tengo un problema con el siguiente algoritmo y es que cuando en la
cadena de texto que se le pasa tiene caracteres con tilde se revienta y
no funciona, cual seria la forma de la expresión regular en la cual
pueda procesar palabras con caracteres tildados sea conjunto [áéÃóú]
class String
def word_count
frecuencia= Hash.new(0)
downcase.scan(/\w+/){|palabra| frecuencia[palabra]+=1}
return frecuencia
end
end
puts “perro gato perro gato ave”.word_count
Dónde te está fallando?
Yo probé tu ejemplo por consola en una terminal y funcionó
correctamente,
mirá:
class String
def word_count
frecuencia= Hash.new(0)
downcase.scan(/\w+/){|palabra| frecuencia[palabra]+=1}
return frecuencia
end
end
=> nil
?> puts “perro gato perro gato ave”.word_count
gato2perro2ave1
=> nil
puts “perró gató perró gató ave”.word_count
ave1perró2gató2
=> nil
Cuál es la configuración de tu sistema? La codificación de los
caracteres
que usás?
Tengo la sensación que puede ser por eso.
Juan MatÃas.
2008/1/22 Julio A. [email protected]:
Juan M. wrote:
Dónde te está fallando?
Yo probé tu ejemplo por consola en una terminal y funcionó
correctamente,
mirá:
class String
def word_count
frecuencia= Hash.new(0)
downcase.scan(/\w+/){|palabra| frecuencia[palabra]+=1}
return frecuencia
end
end
=> nil
?> puts “perro gato perro gato ave”.word_count
gato2perro2ave1
=> nil
puts “perró gató perró gató ave”.word_count
ave1perró2gató2
perr2gat2ave1 <-- SALIDA EN MI SISTEMA
#“ESTA ES LA SALIDA QUE ME GENERA EN MI SISTEMA INSERTANDO TU CADENA
COMO SE LA CONFIGURACIÓN DE MI SISTEMA? ACTUALMENTE UTILIZO INSTANT
RAILS 1.7”
COMO PUEDEN VER AL PROCESAR EL CARACTER CON TILDE DEJA DE HACERLO SALTA
AL SIGUIENTE ESPACIO EN BLANCO Y SE DETIENE HASTA QUE ENCUENTRA OTRO
ESPACIO EN BLANCO O CARACTER TILDADO.
Hola Xavier, me uno al hilo porque yo también tengo ese problema.
Lo he probado y esto es lo que me sale:
irb(main):026:0> class String
irb(main):027:1> def word_count
irb(main):028:2> frecuencia= Hash.new(0)
irb(main):029:2> chars.downcase.scan(/\w+/){|palabra|
frecuencia[palabra]+=1}
irb(main):030:2> return frecuencia
irb(main):031:2> end
irb(main):032:1> end
=> nil
irb(main):033:0> puts “perr\303\263 gat\303\263 perr\303\263 gat\303\263
ave”.word_count
NameError: undefined local variable or method chars' for "perr\303\263 gat\303\263 perr\303\263 gat\303\263 ave":String from (irb):29:in
word_count’
from (irb):33
from :0
No me funciona el metodo [CHARS]. Pero de todas formas me gustarÃa saber
como se puede cambiar la configuración para trabajar en UTF-8 también
con
el interprete.
Trabajo en un Mac OS X 10.4.11 Tiger. Aunque cualquier sugerencia de
otro SO
me vale para investigar
Gracias de antemano
saludos
2008/1/22, Xavier N. [email protected]:
On Jan 22, 2008, at 8:48 PM, Julio A. wrote:
Hola tengo un problema con el siguiente algoritmo y es que cuando en
la
cadena de texto que se le pasa tiene caracteres con tilde se
revienta y
no funciona, cual seria la forma de la expresión regular en la cual
pueda procesar palabras con caracteres tildados sea conjunto [áéíóú]
class String
def word_count
frecuencia= Hash.new(0)
downcase.scan(/\w+/){|palabra| frecuencia[palabra]+=1}
El String#downcase de Ruby 1.8 no entiende Unicode, puede que sea por
eso.
A veces los problemas de trabajar sin soporte para UTF-8 pero tener la
cosas en UTF-8 ofrecen sintomas raros porque los bytes quedan mal
formados y salta la liebre por cualquier sitio. Por ejemplo a veces he
visto codigo aparentemente correcto que no compilaba segun Ruby por un
mismatch entre el encoding del fichero y el que se le indicaba a Ruby.
Prueba a poner
chars.downcase.scan …
– fxn
A ver …
http://pastie.caboo.se/142316
El codigo de Xavier con un test. Lo puedes tirar a ver si eso de
funciona.
Un saludo,
Francesc
On Jan 23, 2008, at 10:05 AM, Andrés gutiérrez wrote:
irb(main):031:2> end
No me funciona el metodo [CHARS]. Pero de todas formas me gustaría
def word_count
mismatch entre el encoding del fichero y el que se le indicaba a Ruby.
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es
–
name. Francesc E. i Martí
voice. +34 678.681.603
On Jan 23, 2008, at 10:05 AM, Andrés gutiérrez wrote:
irb(main):033:0> puts “perr\303\263 gat\303\263 perr\303\263 gat
\303\263 ave”.word_count
NameError: undefined local variable or method chars' for "perr \303\263 gat\303\263 perr\303\263 gat\303\263 ave":String from (irb):29:in
word_count’
from (irb):33
from :0
No me funciona el metodo [CHARS].
String#chars es un metodo de Rails, lo mencione sin warning porque en
esta lista asumo Rails si no se dice otra cosa.
BTW que Ruby 1.9 define String#chars y significa otra cosa
completamente distinta (es un iterador sobre los caracteres que
entiende Unicode).
Pero de todas formas me gustaría saber como se puede cambiar la
configuración para trabajar en UTF-8 también con
el interprete.
Trabajo en un Mac OS X 10.4.11 Tiger. Aunque cualquier sugerencia de
otro SO me vale para investigar
Has de mirarte la variable $KCODE, Rails asigna un valor adecuado para
trabajar en UTF-8 por defecto (desde la 1.2).
– fxn
On Jan 23, 2008, at 11:14 AM, Andrés gutiérrez wrote:
La variable $KCODE esta en --> config/environment.rb no?
Esto lo he cambiado poniendo en enviroment $KCODE = ‘u’ . Aunque el
código de arriba me ha funcionado sin ponerlo
Desde la 1.2 $KCODE lo pone Rails para trabajar en UTF-8 por defecto,
no hace falta que configures nada en environment.rb.
puts “perró gató perró gató ave”.word_count
Cuando lo pego en el terminal con la consola de rails encendida o
con la de ruby me lo muestra asi
puts “perr\303\263 gat\303\263 perr\303\263 gat\303\263
ave”.word_count
es porque mi sistema no reconoce UTF-8???
Las pruebas con UTF-8 las suelo hacer siempre con ficheros, porque en
la consola intervienen demasiadas cosas en I/O como para estar seguro
de que no interfiere en las pruebas.
Por ejemplo, en Terminal.app se escribe y lee UTF-8 perfectamente,
pero no puedo entrar UTF-8 bien en irb/console, ni la shell Python,
pero si en la shell Erlang… Tendra que ver con readline quiza y algo
que no tendre bien configurado, algun flag de compilacion…, no lo he
investigado, pero hay una capa ahi intermedia que si no esta 100%
controlada es mejor sencillamente quitar de en medio.
Como script/runner en Rails 2 admite un nombre de fichero como
argumento esta incluso mas sencillo que antes.
Vale esto es lo que pasa en rails CON y SIN el método [CHARS]:
Loading development environment (Rails 2.0.2)
CON CHARS:
class String
def word_count
frecuencia= Hash.new(0)
chars.downcase.scan(/\w+/){|palabra| frecuencia[palabra]+=1}
return frecuencia
end
end
=> nil
puts “perr\303\263 gat\303\263 perr\303\263 gat\303\263 ave”.word_count
ave1perró2gató2
SIN CHARS:
class String
def word_count
frecuencia= Hash.new(0)
downcase.scan(/\w+/){|palabra| frecuencia[palabra]+=1}
return frecuencia
end
end
=> nil
puts “perr\303\263 gat\303\263 perr\303\263 gat\303\263 ave”.word_count
ave1perró2gató2
=> nil
Preguntas:
La variable $KCODE esta en → config/environment.rb no?
Esto lo he cambiado poniendo en enviroment $KCODE = ‘u’ . Aunque el
código
de arriba me ha funcionado sin ponerlo
Mi segunda pregunta es porque lo que copio. ejem:
puts “perró gató perró gató ave”.word_count
Cuando lo pego en el terminal con la consola de rails encendida o con
la
de ruby me lo muestra asi
puts “perr\303\263 gat\303\263 perr\303\263 gat\303\263 ave”.word_count
es porque mi sistema no reconoce UTF-8???
Tercera pregunta (para Francesc) lo que me propones como hay que
hacerlo.
dentro de una App rails o como un archivo independiente?
Si me dieras alguna indicacion te lo agradecerÃa
2008/1/23, Xavier N. [email protected]:
Ok. gracias entendido. Solo una duda ¿donde se tiene que colocar el
archivo
(por ejemplo el que me sugire Francesc en este hilo) para funcionar con
script/runner???
Como script/runner en Rails 2 admite un nombre de fichero como
argumento esta incluso mas sencillo que antes
Gracias por la ayuda
Un saludo
2008/1/23, Xavier N. [email protected]:
El fichero que yo incluí se puede meter en la carpeta “lib”. Alli se
tiene que separar la parte de test de la extensión “string”.
Digamos que tendremos …
lib/string_extensions.rb
lib/test/string_extensions_test.rb
And that’s all … 
Francesc
On Jan 24, 2008, at 9:41 AM, Andrés gutiérrez wrote:
no hace falta que configures nada en environment.rb.
la consola intervienen demasiadas cosas en I/O como para estar seguro
argumento esta incluso mas sencillo que antes.
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es
–
name. Francesc E. i Martí
voice. +34 678.681.603
On Jan 24, 2008, at 9:41 AM, Andrés gutiérrez wrote:
Ok. gracias entendido. Solo una duda ¿donde se tiene que colocar el
archivo (por ejemplo el que me sugire Francesc en este hilo) para
funcionar con
script/runner???
En cualquier lugar del disco, en el caso de script/runner interpreta
el archivo que sea en el contexto de la aplicacion:
script/runner /path/a/cualquier/script.rb
– fxn
Esto es lo que he hecho (Xabier):
Este el esl archivo ===>string_extensions.rb
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
class String
def word_count
frequency = Hash.new(0)
downcase.scan(/\w+/) { |word| frequency[word] += 1 }
return frequency
end
end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Este es el error que me da al probarlo:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
web:~/mi/path/de/mi/app/rails2/miApp yo$ script/runner
/Desktop/string_extensions.rb
/usr/local/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/runner.rb:47:
(eval):1: compile error (SyntaxError)
(eval):1: unknown regexp options - trg
(eval):1: syntax error, unexpected tIDENTIFIER, expecting $end
/Desktop/string_extensions.rb
^ from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
eval' from /usr/local/lib/ruby/gems/1.8/gems/rails-2.0.2 /lib/commands/runner.rb:47 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
gem_original_require’
from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require’
from script/runner:3
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Esto es lo que me dice cuando tengo el archivo en el escritorio. ¿Qué
estoy
haciendo mal?
Para Francesc:
Lo que tu me has dicho:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
El fichero que yo incluà se puede meter en la carpeta “lib”. Alli se
tiene que separar la parte de test de la extensión “string”.
Digamos que tendremos …
lib/string_extensions.rb
lib/test/string_extensions_test.rb
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Como lo pruebo una vez que tengo el codigo donde dices???.
NOTA:
Espero que no os moleste que este siguiendo los consejos de los dos a la
vez. Pero creo que
asà puedo aprender más cosas nuevas. De hecho creo que tengo el tema
del
UTF-8 mas o menos bien. Pero me gustarÃa terminar este hilo sabiendo
probarlo como me estaÃs diciendo
Gracias
2008/1/24, Xavier N. [email protected]:
On Jan 24, 2008, at 11:36 AM, Andrés gutiérrez wrote:
return frequency
web:~/mi/path/de/mi/app/rails2/miApp yo$ script/runner /Desktop/
string_extensions.rb
/usr/local/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/runner.rb:
47: (eval):1: compile error (SyntaxError)
(eval):1: unknown regexp options - trg
Esto esta muy raro, no solo no lo puedo reproducir, sino que no veo de
donde salen esas opciones de regexp “trg”.
No hay nada mas? Puedes ejecutar un script vacio con script/runner? La
consola arranca?
– fxn
script/runner /Desktop/vacio.rb
/usr/local/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/runner.rb:47:
(eval):1: compile error (SyntaxError)
(eval):1: unknown regexp options - vac from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
eval' from /usr/local/lib/ruby/gems/1.8/gems/rails-2.0.2 /lib/commands/runner.rb:47 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
gem_original_require’
from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require’
from script/runner:3
Es esto lo que me pedÃas. He creado el archivo “vacio.rb” y lo he
ejecutado.No sé…
2008/1/24, Xavier N. [email protected]:
On Jan 24, 2008, at 1:46 PM, Andrés gutiérrez wrote:
custom_require.rb:27:in `require’
from script/runner:3
Es esto lo que me pedías. He creado el archivo “vacio.rb” y lo he
ejecutado.No sé…
Jajaja que misterio, y ni siquiera se queja de las mismas opciones de
regexp. Me parece que toca divide and conquer :-).
– fxn
Jajaja que misterio, y ni siquiera se queja de las mismas opciones de
regexp. Me parece que toca divide and conquer :-).
No te sigo, lo siento 
2008/1/24, Xavier N. [email protected]:
Para testear el “string_extension.rb” has de hacer …
ruby lib/test/string_extension_test.rb
Un saludo,
Francesc
On Jan 24, 2008, at 11:36 AM, Andrés gutiérrez wrote:
return frequency
web:~/mi/path/de/mi/app/rails2/miApp yo$ script/runner /Desktop/
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/
Digamos que tendremos …
el archivo que sea en el contexto de la aplicacion:
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es
–
name. Francesc E. i Martí
voice. +34 678.681.603
En el direcctorio raiz de mi App===> path/raiz/de/mi/App/MiApp ruby
lib/test/string_extension_test.rb
lib/test/string_extensions_test.rb:1: Invalid char \357' in expression lib/test/string_extensions_test.rb:1: Invalid char
\273’ in expression
lib/test/string_extensions_test.rb:1: Invalid char \277' in expression lib/test/string_extensions_test.rb:1: Invalid char
\342’ in expression
lib/test/string_extensions_test.rb:1: Invalid char \200' in expression lib/test/string_extensions_test.rb:1: Invalid char
\250’ in expression
lib/test/string_extensions_test.rb:1: Invalid char \342' in expression lib/test/string_extensions_test.rb:1: Invalid char
\200’ in expression
lib/test/string_extensions_test.rb:1: Invalid char `\250’ in expression
lib/test/string_extensions_test.rb:1: syntax error, unexpected kCLASS,
expecting $end
require ‘test/unit’
class TestString < Test::Unit::TestCase
def test_word_count
sample = “perró gato perro perro gato ave”
sample_result = {“gato” => 2, “perró” => 2, “ave” => 1 }
assert_equal sample.word_count, sample_result
end
end
Esto es lo que me suelta. Cómo lo ves?
El dÃa 24/01/08, Francesc E. [email protected]
escribió:
Pero funciona (No String_extensions.rb). Quiero decir lo he hecho de la
forma correcta. Aunque
String_extensions.rb este mal???
De todas formas aqui tienes los codigos que estoy usando
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
String_extensions.rb
class String
def word_count
frequency = Hash.new(0)
downcase.scan(/\w+/) { |word| frequency[word] += 1 }
return frequency
end
end
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
String_extensions_test.rb
require ‘test/unit’
class TestString < Test::Unit::TestCase
def test_word_count
sample = “perro gato perro gato ave”
sample_result = {“gato” => 2, “perro” => 2, “ave” => 1 }
assert_equal sample.word_count, sample_result
end
end
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Saludos
El dÃa 24/01/08, Francesc E. [email protected]
escribió: