SSブログ

Scala + ICU で日本語と半角英数字の間にスペースを入れる [Scala]

日本語と半角英数字の間にスペースを入れるという話題 [1]

現時点では Perl 5 以外に移植するのはちょっと難しいですね。

とのことなんですが、ICU [2] を使える環境(ICU4C へのバインディングがある言語ないし Java ライブラリを利用できる言語)であれば同じようにできるんじゃないかなあと思ったので ICU を俄か調べして Scala で作ってみた。

import com.ibm.icu.text._
import scala.io._
import java.io._

object Spacer {
  val east = new UnicodeSet("[[\\p{han}][\\p{hiragana}][\\p{katakana}]]")
  val west = new UnicodeSet("[[\\p{Latin}][\\p{Greek}][\\p{Cyrillic}]]")

  def main(args:Array[String]) = {
    Console.setOut(new PrintStream(args(1), "UTF-8"))
    val s = Source.fromFile(args(0), "UTF-8")
    var p = '\0'
    while (s.hasNext) {
      val c = s.next
      if ((west.contains(p) && east.contains(c)) || (east.contains(p) && west.contains(c))) {
        print(" ")
      }
      print(c)
      p = c
    }
  }
}

第1引数がソースファイル名で第2引数が変換後ファイル名で、ともに UTF-8 前提。[3] のデモなんかを見るともっとちゃんとした正規表現が使えるようでもある(未調査)。

[1] http://blog.livedoor.jp/dankogai/archives/50740024.html
[2] http://icu.sourceforge.net/
[3] http://demo.icu-project.org/icu-bin/redemo


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

21st Century Compile..Python vs Tcl vs Per.. ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。