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