スモウルビーで、小学生低学年向けにソフトを変更する必要があり、小学生で習わない漢字を抜き出さないといけなくなりました。その時に作ったコードがこれ。
漢字の情報は、
https://ja.wikibooks.org/wiki/メインページ
から引用させていただきました。
スモウルビーのことはこちら!
http://smalruby.jp/
# 小学生が学習する漢字以外を残します
#
# 漢字の情報は、
# https://ja.wikibooks.org/wiki/メインページ
# から引用させていただきました。
#
# 使い方:ruby kanji_check.rb [チェックしたいテキストファイル名]
# 指定されたテキストファイル名
source_file = ARGV[0]
# 学年(3なら、3年生が学習する漢字までを対象
GAKUNEN = 3
number = '0' .. '9'
alpha_upper = 'A' .. 'Z'
alpha_lower = 'a' .. 'z'
hiragana = 'ぁ' .. 'ん'
katakana = 'ァ' .. 'ン'
kanji = Array.new
kanji[1] = [
'一','右','雨','円','王','音','下','火','花','貝',
'学','気','九','休','玉','金','空','月','犬','見',
'五','口','校','左','三','山','子','四','糸','字',
'耳','七','車','手','十','出','女','小','上','森',
'人','水','正','生','青','夕','石','赤','千','川',
'先','早','草','足','村','大','男','竹','中','虫',
'町','天','田','土','二','日','入','年','白','八',
'百','文','木','本','名','目','立','力','林','六'
]
kanji[2] = [
'引','羽','雲','園','遠','何','科','夏','家','歌',
'画','回','会','海','絵','外','角','楽','活','間',
'丸','岩','顔','汽','記','帰','弓','牛','魚','京',
'強','教','近','兄','形','計','元','言','原','戸',
'古','午','後','語','工','公','広','交','光','考',
'行','高','黄','合','谷','国','黒','今','才','細',
'作','算','止','市','矢','姉','思','紙','寺','自',
'時','室','社','弱','首','秋','週','春','書','少',
'場','色','食','心','新','親','図','数','西','声',
'星','晴','切','雪','船','線','前','組','走','多',
'太','体','台','地','池','知','茶','昼','長','鳥',
'朝','直','通','弟','店','点','電','刀','冬','当',
'東','答','頭','同','道','読','内','南','肉','馬',
'売','買','麦','半','番','父','風','分','聞','米',
'歩','母','方','北','毎','妹','万','明','鳴','毛',
'門','夜','野','友','用','曜','来','里','理','話'
]
kanji[3] = [
'悪','安','暗','医','委','意','育','員','院','飲',
'運','泳','駅','央','横','屋','温','化','荷','開',
'界','階','寒','感','漢','館','岸','起','期','客',
'究','急','級','宮','球','去','橋','業','曲','局',
'銀','区','苦','具','君','係','軽','血','決','研',
'県','庫','湖','向','幸','港','号','根','祭','皿',
'仕','死','使','始','指','歯','詩','次','事','持',
'式','実','写','者','主','守','取','酒','受','州',
'拾','終','習','集','住','重','宿','所','暑','助',
'昭','消','商','章','勝','乗','植','申','身','神',
'真','深','進','世','整','昔','全','相','送','想',
'息','速','族','他','打','対','待','代','第','題',
'炭','短','談','着','注','柱','丁','帳','調','追',
'定','庭','笛','鉄','転','都','度','投','豆','島',
'湯','登','等','動','童','農','波','配','倍','箱',
'畑','発','反','坂','板','皮','悲','美','鼻','筆',
'氷','表','秒','病','品','負','部','服','福','物',
'平','返','勉','放','味','命','面','問','役','薬',
'由','油','有','遊','予','羊','洋','葉','陽','様',
'落','流','旅','両','緑','礼','列','練','路','和'
]
kanji[4] = [
'愛','案','以','衣','位','囲','胃','印','英','栄',
'塩','億','加','果','貨','課','芽','改','械','害',
'街','各','覚','完','官','管','関','観','願','希',
'季','紀','喜','旗','器','機','議','求','泣','救',
'給','挙','漁','共','協','鏡','競','極','訓','軍',
'郡','径','型','景','芸','欠','結','建','健','験',
'固','功','好','候','航','康','告','差','菜','最',
'材','昨','札','刷','殺','察','参','産','散','残',
'士','氏','史','司','試','児','治','辞','失','借',
'種','周','祝','順','初','松','笑','唱','焼','象',
'照','賞','臣','信','成','省','清','静','席','積',
'折','節','説','浅','戦','選','然','争','倉','巣',
'束','側','続','卒','孫','帯','隊','達','単','置',
'仲','貯','兆','腸','低','底','停','的','典','伝',
'徒','努','灯','堂','働','特','得','毒','熱','念',
'敗','梅','博','飯','飛','費','必','票','標','不',
'夫','付','府','副','粉','兵','別','辺','変','便',
'包','法','望','牧','末','満','未','脈','民','無',
'約','勇','要','養','浴','利','陸','良','料','量',
'輪','類','令','冷','例','歴','連'
]
kanji[5] = [
'圧','移','因','永','営','衛','易','益','液','演',
'応','往','桜','恩','可','仮','価','河','過','賀',
'快','解','格','確','額','刊','幹','慣','眼','基',
'寄','規','技','義','逆','久','旧','居','許','境',
'均','禁','句','群','経','潔','件','券','険','検',
'限','現','減','故','個','護','効','厚','耕','鉱',
'構','興','講','混','査','再','災','妻','採','際',
'在','財','罪','雑','酸','賛','支','志','枝','師',
'資','飼','示','似','識','質','舎','謝','授','修',
'述','術','準','序','招','承','証','条','状','常',
'情','織','職','制','性','政','勢','精','製','税',
'責','績','接','設','舌','絶','銭','祖','素','総',
'造','像','増','則','測','属','率','損','退','貸',
'態','団','断','築','張','提','程','適','敵','統',
'銅','導','徳','独','任','燃','能','破','犯','判',
'版','比','肥','非','備','俵','評','貧','布','婦',
'富','武','復','複','仏','編','弁','保','墓','報',
'豊','防','貿','暴','務','夢','迷','綿','輸','余',
'預','容','略','留','領'
]
kanji[6] = [
'異','遺','域','宇','映','延','沿','我','灰','拡',
'革','閣','割','株','干','巻','看','簡','危','机',
'貴','揮','疑','吸','供','胸','郷','勤','筋','系',
'敬','警','劇','激','穴','絹','権','憲','源','厳',
'己','呼','誤','后','孝','皇','紅','降','鋼','刻',
'穀','骨','困','砂','座','済','裁','策','冊','蚕',
'至','私','姿','視','詞','誌','磁','射','捨','尺',
'若','樹','収','宗','就','衆','従','縦','縮','熟',
'純','処','署','諸','除','将','傷','障','城','蒸',
'針','仁','垂','推','寸','盛','聖','誠','宣','専',
'泉','洗','染','善','奏','窓','創','装','層','操',
'蔵','臓','存','尊','宅','担','探','誕','段','暖',
'値','宙','忠','著','庁','頂','潮','賃','痛','展',
'討','党','糖','届','難','乳','認','納','脳','派',
'拝','背','肺','俳','班','晩','否','批','秘','腹',
'奮','並','陛','閉','片','補','暮','宝','訪','亡',
'忘','棒','枚','幕','密','盟','模','訳','郵','優',
'幼','欲','翌','乱','卵','覧','裏','律','臨','朗',
'論'
]
han_kigou = [
'!','"','#','$','%','&',"'",'(',')','-','=','^','~','|',
'`','@','{','[',';','+',']','}',',','<','.','>','/','?',"\\",'_',':','*',
]
zen_kigou = [
'■','♪','●','◎','ー','?','!','。','、','「','」','↑','↓','←','→',
'◆','★','+','ー','×','÷','<','>','≦','≧','=','~','・'
]
han_space = ' '
zen_space = ' '
File.open( source_file, "r:utf-8:utf-8" ) { |file|
buffer = file.read
# 指定された文字を削除します
alpha_upper.each { |v| buffer.gsub!(v, han_space ) }
alpha_lower.each { |v| buffer.gsub!(v, han_space ) }
number.each { |v| buffer.gsub!(v, han_space ) }
han_kigou.each { |v| buffer.gsub!(v, han_space ) }
zen_kigou.each { |v| buffer.gsub!(v, zen_space ) }
hiragana.each { |v| buffer.gsub!(v, zen_space ) }
katakana.each { |v| buffer.gsub!(v, zen_space ) }
# 指定された学年までの漢字を削除します
nen = 1
while( nen <= GAKUNEN )
kanji[nen].each { |v| buffer.gsub!(v, zen_space ) }
nen += 1
end
puts "文章内で残った文字----------"
puts buffer
# 文章から残った文字をかき集めます
kekka = buffer
kekka.gsub!( han_space, ',' )
kekka.gsub!( zen_space, ',' )
kekka.gsub!( /\r\n/, '' )
kekka.gsub!( /\r/, '' )
kekka.gsub!( /\n/, '' )
kekka.squeeze!
kekka_array = kekka.split( ',' )
kekka_array.shift if kekka_array.first == ""
puts "文字一覧----------"
puts kekka_array.uniq.compact.join( ',' )
}