BLOGTIMES
2010/02/27

英語でない部分のスペースを削除する

  ruby 
このエントリーをはてなブックマークに追加

下記のようなわざとスペースがところどころに挿入されている日本語を形態素解析したいと思って、前処理として余計なスペースを取り除く処理を書こうとしたのですが、思いのほか手こずってしまったので、後学のためにメモ。

str = <<EOS ち ょ っ と ワ ケ あ っ て MS の ナ レ ッ ジ ベ ー ス を 検 索 し て い た ら 最 後 に 「The behavior is by design」と 書 い て あ るのを見つけてしまいました。 EOS

はじめに書いたコード

単純にスペースを削除するようなコードなのですが、英語の部分があると単語が全部つながってしまうのでこれはNG。

puts str.gsub(/ +/,'') #=>ちょっとワケあってMSのナレッジベースを検索していたら最後に「Thebehaviorisbydesign」と書いてあるのを見つけてしまいました。

最終的に書いたコード

最終的に書いたコードは下記。
文字クラスの指定が16進になっていますが、これが半角の英数字記号を表しています*1

puts str.gsub(/([^\x21-\x7E]) +([^\x21-\x7E])/,'\1\2') #=>ちょっとワケあって MS のナレッジベースを検索していたら最後に「The behavior is by design」と書いてあるのを見つけてしまいました。
  • *1: ASCIIコード表を確認すると分かりますが、スペースを除く可視文字が !(0x21)~~(0x7e) に存在するためです。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3444
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン