«前の日記(2008.04.18 / Friday) 最新 次の日記(2008.04.21 / Monday)» 編集

Hena Hena Nikki

2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|10|11|12|
2012|01|02|03|04|05|06|07|08|10|12|
2013|01|02|04|06|

2008.04.19 / Saturday [長年日記]

* [computer/update] Wine ver.0.9.60

UNIX 系 OS 上で動く Windows API の実装。 約 2 週間ぶりの version up。

* [computer/update] Y.OzFont ver.12.06

美しいペン習字風 font。

* [computer] 位取りプログラム

「IT Text 音声認識システム」の付録 CD-ROM に入っている chawan という プログラムの代替をちょこちょこと作成中。

#! /usr/bin/env ruby

# 数字から位取りした読み情報を生成するクラス class CreateJapaneseNumbers JAPANESE_LOWER_ZERO = ['0', 'レイ', '{レイ/ゼロ}'] JAPANESE_LOWER_NUMBERS = [# 各数字の「表記」「読み」「基本発音」を提供。 # 一の位 [[], ['1', 'イチ', 'イチ'], ['2', 'ニ', 'ニ'], ['3', 'サン', 'サン'], ['4', 'ヨン', 'ヨン'], ['5', 'ゴ', 'ゴ'], ['6', 'ロク', 'ロク'], ['7', 'ナナ', '{ナナ/シチ}'], ['8', 'ハチ', 'ハチ'], ['9', 'キュウ', 'キュー']], # 十の位 [[], ['十', 'ジュウ', 'ジュー'], ['2十', 'ニジュウ', 'ニジュー'], ['3十', 'サンジュウ', 'サンジュー'], ['4十', 'ヨンジュウ', 'ヨンジュー'], ['5十', 'ゴジュウ', 'ゴジュー'], ['6十', 'ロクジュウ', 'ロクジュー'], ['7十', 'ナナジュウ', 'ナナジュー'], ['8十', 'ハチジュウ', 'ハチジュー'], ['9十', 'キュウジュウ', 'キュージュー']], # 百の位 [[], ['百', 'ヒャク', 'ヒャク'], ['2百', 'ニヒャク', 'ニヒャク'], ['3百', 'サンビャク', 'サンビャク'], ['4百', 'ヨンヒャク', 'ヨンヒャク'], ['5百', 'ゴヒャク', 'ゴヒャク'], ['6百', 'ロッピャク', 'ロッピャク'], ['7百', 'ナナヒャク', 'ナナヒャク'], ['8百', 'ハッピャク', 'ハッピャク'], ['9百', 'キュウヒャク', 'キューヒャク']], # 千の位 [[], ['千', 'セン', '{セン/イッセン}'], ['2千', 'ニセン', 'ニセン'], ['3千', 'サンゼン', 'サンゼン'], ['4千', 'ヨンセン', 'ヨンセン'], ['5千', 'ゴセン', 'ゴセン'], ['6千', 'ロクセン', 'ロクセン'], ['7千', 'ナナセン', 'ナナセン'], ['8千', 'ハッセン', 'ハッセン'], ['9千', 'キュウセン', 'キューセン']] ] JAPANESE_UPPER_NUMBERS = [# 各位の「表記」「読み」「基本発音」を提供。 nil, ['万', 'マン', 'マン'], ['億', 'オク', 'オク'], ['兆', 'チョウ', 'チョウ'], ['京', 'ケイ', 'ケイ'], ['垓', 'ガイ', 'ガイ'] ] JAPANESE_LOWER_REPLACE_RULE = [# 各数字の「発音変化」を提供。 # 一〜千 [[/\Aヨン\z/, '{ヨン/シ}']], # 万 [], # 億 [], # 兆 [[/\Aイチ\z/, 'イッ'], [/\Aハチ\z/, 'ハッ'], [/ジュー\z/, '{ジュッ/ジッ}'], [/(((ヒ|ビ|ピ)ャ)ク)\z/, '{\1/\2ッ}']], # 京 [[/\Aイチ\z/, '{イチ/イッ}'], [/\Aハチ\z/, '{ハチ/ハッ}'], [/ジュー\z/, '{ジュッ/ジッ}'], [/(((ヒ|ビ|ピ)ャ)ク)\z/, '{\1/\2ッ}']], # 垓 [[/ジュー\z/, '{ジュッ/ジッ}'], [/(((ヒ|ビ|ピ)ャ)ク)\z/, '{\1/\2ッ}']] ] def initialize @output = Array::new end def create_jnumbers(number, values=nil) @output.clear number = number.to_s.split(//) place = number.length inserted_lower_number = false number.each { |n| place = place - 1 lower_index = place % 4 lower_number = JAPANESE_LOWER_NUMBERS[lower_index][n.to_i] unless lower_number.empty? then @output << lower_number inserted_lower_number = true end if lower_index == 0 and inserted_lower_number then inserted_lower_number = false lower_number = @output.pop if lower_number then lower_number = lower_number.dup lower_number[2] = lower_number[2].dup JAPANESE_LOWER_REPLACE_RULE[ place / 4 ].each { |rule| break if lower_number[2].sub!(rule[0], rule[1]) } @output << lower_number end if 0 < place then @output << JAPANESE_UPPER_NUMBERS[ place / 4 ] end end } if @output.empty? then @output << JAPANESE_LOWER_ZERO end if values then return values.replace(@output) else return @output.dup end end end
# 主処理 (動作確認サンプル) values = Array::new cjn = CreateJapaneseNumbers::new ARGV.each { |number| if /\A[0-9]+\z/ =~ number then puts "#{number}:" number = number.to_i cjn.create_jnumbers(number, values) values.each { |n| puts "\t#{n[0]}\t#{n[1]}\t#{n[2]}" } else warn "WARNING: \"#{number}\" is invalid!" end }

12345678901234567890 を引数に与えると、以下の出力を得る。

千      セン    {セン/イッセン}
2百    ニヒャク        ニヒャク
3十    サンジュウ      サンジュー
4      ヨン    ヨン
京      ケイ    ケイ
5千    ゴセン  ゴセン
6百    ロッピャク      ロッピャク
7十    ナナジュウ      ナナジュー
8      ハチ    ハッ
兆      チョウ  チョウ
9千    キュウセン      キューセン
十      ジュウ  ジュー
2      ニ      ニ
億      オク    オク
3千    サンゼン        サンゼン
4百    ヨンヒャク      ヨンヒャク
5十    ゴジュウ        ゴジュー
6      ロク    ロク
万      マン    マン
7千    ナナセン        ナナセン
8百    ハッピャク      ハッピャク
9十    キュウジュウ    キュージュー

連続して使うとボロが出るところを、とりあえず修正した。


  • この日記には本日 名の方が訪問してくださっているようです。 また、昨日は 名の方が訪問してくださったようです。
  • この日記の更新情報の取得には antenna.lirs を利用するのがおすすめです。