- 青空文庫の全てのテキストデータについて外字の出現回数を調べてみる
- Windowsパソコンにrubyをインストール
- 青空文庫のファイルを一括ダウンロード
- 展開してできたaozorabunko_text-masterフォルダにバッチファイルとaozora_gaiji.txtを入れる
REM 外字集計.bat
ruby -x "%~f0"
goto end
#!ruby
#encoding: utf-8
Encoding.default_external = 'UTF-8'
$stdout=open("allkanji.txt","w")
$stderr=open("err.txt","w")
#漢字実体(UTF-8),Unicode,JIS区点コード,出現数,出現作品数
h=open(__dir__+"/aozora_gaiji.txt").readlines.
map{|e|e.chomp.split(/(?<!,),/)}.to_h
h.transform_keys!{|k| k.split("-").map{|f|f.to_i}}
a1,a2,hs=[],[],{}
Dir.glob('**/*.txt'){|f|
next if /aozora_gaiji.txt$|err.txt$|allkanji.txt$/=~f
i=0
begin
s=open(f).read.encode(Encoding::UTF_8,Encoding::SJIS).
scan(%r|※[#[^[]]*]|).map{|e|
if /((\d)-(\d+)-(\d+))/=~e
s=$1
n=s.split("-").map{|k| k.to_i}
if h[n]
e=h[n]
if hs.key?(e)
hs[e][2]+=1
hs[e][3]+=1 if i==0
i=1
else
hs[e]=["U+"+e.ord.to_s(16).tr('a-z','A-Z'),s,1,1]
end
else
a1 << [f,e]
end
end
}
rescue
$stderr.puts "error:"+f
next
end
}
a1.uniq.each{|e| $stderr.puts e.join("\n")}
hs.each{|k,v| a2 << [k,v].flatten}
a2.sort_by{|e| e[1]}.each{|e| puts e.join(",")}
__END__
:end
- バッチファイルをダブルクリックして実行します
- allkanji.txtに漢字実体(UTF-8),Unicode,JIS区点コード,出現数,出現作品数が出力されます
- err.txtに途中でエラーが発生したものやうまく文字がうまく見つけられなかったものが書き出されます
コメント