大規模な一連の操作の一環として、私は大きな文字列のトークン化されたチャンクを取り、句読点、非単語のゴブリンジクなどを取り除こうとしています。最初の試みはString#gsub
を使用して\W
正規表現の文字クラス、そのような:Rubyの文字列#gsub、unicode、および単語以外の文字
my_str = "Hello,"
processed = my_str.gsub(/\W/,'')
puts processed # => Hello
スーパー、スーパー、スーパーシンプル。もちろん、私はラテン文字以外の文字を扱うプログラムを拡張しています。 Rubyの\W
は、[^A-Za-z0-9_]
のようなものですが、もちろん発音区別記号(Ü、íなど)は除きます。だから、今unpleasentの方法で、私の以前は、単純なコードがクラッシュし、やけど:GSUB
my_str = "Quística."
processed = my_str.gsub(/\W/,'')
puts processed # => Qustica
お知らせ()親切アクセント「I」の文字を削除しました。私がこれを修正するために考えた1つの方法は、より高いUnicodeコードポイントを含むようにRubyの\ Wホワイトリストを拡張することですが、非常にたくさんあるので、いくつか見逃して問題を引き起こしますラテン語以外の言語についても考え始めてみましょう...)。もう一つの解決策は、私が捨てたい(句読点、$ /%/ & /™など)すべてのものをブラックリストに載せることですが、もう一度、それがひどいです。本当にブラックリストを再生し始める。
誰かがこの問題の原則的な解決策を見つけましたか?私がまだ発見していないの隠された、Unicodeに優しいバージョンがありますか?ありがとう!
Gah。私はすでにUTF-8モードであると思った。それは物事を並べ替え、助けてくれてありがとう! –