2018年12月30日日曜日

元号の予想(2)

元号の予想(1)の続き)

昨日からJuliaの配列と型について少しだけ前進した。Juliaはあらかじめ型指定をしなくても,定数が定義されたり,変数が値で束縛された場合に適当な型に定まるという優れものだが,それが話をややこしくしている。どうしても配列を宣言したい場合の基本は,型が T で次元が N の配列に対して,Array{T, N}(undef, dims) である。しかし,配列宣言を省略したい場合は,次のようなバリエーションもある。

(1) 定数として与える。a=[ 1, 2.0, 3//4, 'あ', "漢字"]
(2) 初期値定数を埋め込む。b=ones(Int64,10), c=zeros(2,300) や trues(), fill()など。
(3) 配列を空で作成し,d=Any[ ],push, insert など

で追加する。などなど。このあたりでさらに勉強したほうがよろしいかもしれない。

とりあえず,昨日のアルゴリズムに準じて作成中のコードは以下のようになるが,
結果からベスト50を取り出して整形すると,こんな感じ(*は未だ存在しないもの)。
カッコ内の数字は各文字の相対頻度の積である。この中では文元さんがよさそうである。

("天治", 0.179835)
("天和", 0.17037)
("天徳", 0.13251)
("天暦", 0.13251)
("天永", 0.13251)
("文治", 0.125103)
("永治", 0.125103)
("天安", 0.123045)
("天応", 0.123045)
("文和", 0.118519)
("永和", 0.118519)
("元治", 0.117284)
("天保", 0.11358)
("天元", 0.11358)
("元和", 0.111111)
("寛治", 0.109465)
("寛和", 0.103704)
("正治", 0.101646)
("正和", 0.0962963)
("文徳", 0.0921811)
("文暦", 0.0921811)
("文永", 0.0921811)
("永徳", 0.0921811)
("永暦", 0.0921811)
("永永", 0.0921811)*
("元徳", 0.0864198)
("元暦", 0.0864198)
("元永", 0.0864198)
("嘉治", 0.0860082)*
("延治", 0.0860082)*
("長治", 0.0860082)
("文安", 0.0855967)
("文応", 0.0855967)
("永安", 0.0855967)
("永応", 0.0855967)*
("嘉和", 0.0814815)*
("延和", 0.0814815)
("長和", 0.0814815)
("寛徳", 0.0806584)
("寛暦", 0.0806584)*
("寛永", 0.0806584)
("元安", 0.0802469)*
("元応", 0.0802469)
("文保", 0.0790123)
("文元", 0.0790123)*
("永保", 0.0790123)
("永元", 0.0790123)
("康治", 0.0781893)
("建治", 0.0781893)
("承治", 0.0781893)*

しかし,ここでちょっと問題が生じた。相対頻度の積の順位でみると,明治は159位,大正は445位,昭和は741位,平成は1939位なのだ。どんどん手垢のついていない名称が選ばれるようになってきた。つまり,頻度順リストでは意味がなかったのである・・・orz

P. S. 既存の元号との照合にはWikipediaを用いるのが便利そうだ。日本に加え中国・朝鮮・越南その他の東アジアの元号があるかどうか(俗用も?)をそこそこ確認できそうである。

P. P. S. 勧進元周辺の皆様方にはさらに努力していただき,5月ぎりぎりまで公表を延ばすように運動されて,その結果として元号から西暦への転換が進むことを期待します。


function gfrq(c,n,r,m)
#
# c input array of kanji char
# n size of c  
# r output array of sorted (kanji, count)
# m size of r
#
  sort!(c)
  k=0
  for j=2:n
    k=k+1
    if c[j]!=c[j-1]
      push!(r,(c[j-1],k))
      k=0
    end
  end
  sort!(r, by=x->x[2], rev=true)
  m=length(r)
  println((m,r))
end

g="大化,白雉,朱鳥,大宝,慶雲,和銅,霊亀,養老,神亀,天平,感宝,勝宝,宝字,神護,景雲,宝亀,天応,延暦,大同,弘仁,天長,承和,嘉祥,仁寿,斉衡,天安,貞観,元慶,仁和,寛平,昌泰,延喜,延長,承平,天慶,天暦,天徳,応和,康保,安和,天禄,天延,貞元,天元,永観,寛和,永延,永祚,正暦,長徳,長保,寛弘,長和,寛仁,治安,万寿,長元,長暦,長久,寛徳,永承,天喜,康平,治暦,延久,承保,承暦,永保,応徳,寛治,嘉保,永長,承徳,康和,長治,嘉承,天仁,天永,永久,元永,保安,天治,大治,天承,長承,保延,永治,康治,天養,久安,仁平,久寿,保元,平治,永暦,応保,長寛,永万,仁安,嘉応,承安,安元,治承,養和,寿永,元暦,文治,建久,正治,建仁,元久,建永,承元,建暦,建保,承久,承応,元仁,嘉禄,安貞,寛喜,貞永,天福,文暦,嘉禎,暦仁,延応,仁治,寛元,宝治,建長,康元,正嘉,正元,文応,弘長,文永,建治,弘安,文永,建治,弘安,正応,永仁,正安,乾元,嘉元,徳治,延慶,応長,正和,文保,元応,元亨,正中,嘉暦,元徳,元弘,正慶,建武,延元,興国,正平,建徳,文中,天授,弘和,元中,暦応,康永,貞和,観応,文和,延文,康安,貞治,応安,永和,康暦,永徳,至徳,嘉慶,康応,明徳,応永,正長,永享,嘉吉,文安,宝徳,享徳,康正,長禄,寛正,文正,応仁,文明,長享,延徳,明応,文亀,永正,大永,享禄,天文,弘治,永禄,元亀,天正,文禄,慶長,元和,寛永,正保,慶安,承応,明暦,万治,寛文,延宝,天和,貞享,元禄,宝永,正徳,享保,元文,寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成,"
n=div(length(g),3)
a=fill(' ',n)
b=fill(' ',n)
for i=1:7:n*7
  a[div(i,7)+1]=g[i]
  b[div(i,7)+1]=g[i+3]
end
p=[ ]
q=[ ]
mp=0
mq=0
gfrq(a,n,p,mp)
gfrq(b,n,q,mq)
mp=length(p)
mq=length(q)
#
r=[ ]
for j in 1:mp
  for k in 1:mq
    if p[j][1]!=q[k][1]
      push!(r,(string(p[j][1],q[k][1]),p[j][2]*q[k][2]/(mp*mq)))
    end
  end
end
sort!(r, by=x->x[2], rev=true)
println((length(r),r))


(45, Any[('天', 23), ('文', 16), ('永', 16), ('元', 15), ('寛', 14), ('正', 13), ('嘉', 11), ('延', 11), ('長', 11), ('康', 10), ('建', 10), ('承', 10), ('弘', 7), ('応', 7), ('大', 6), ('宝', 6), ('貞', 6), ('仁', 5), ('安', 5), ('明', 5), ('享', 4), ('慶', 4), ('万', 3), ('保', 3), ('治', 3), ('久', 2), ('平', 2), ('暦', 2), ('神', 2), ('乾', 1), ('勝', 1), ('和', 1), ('寿', 1), ('徳', 1), ('感', 1), ('斉', 1), ('昌', 1), ('昭', 1), ('景', 1), ('朱', 1), ('白', 1), ('至', 1), ('興', 1), ('観', 1), ('霊', 1)])

(54, Any[('治', 19), ('和', 18), ('徳', 14), ('暦', 14), ('永', 14), ('安', 13), ('応', 13), ('保', 12), ('元', 12), ('仁', 8), ('長', 8), ('久', 7), ('禄', 7), ('平', 6), ('正', 6), ('亀', 5), ('延', 5), ('慶', 5), ('承', 5), ('享', 4), ('宝', 4), ('文', 4), ('中', 3), ('化', 3), ('喜', 3), ('寿', 3), ('政', 3), ('弘', 2), ('明', 2), ('観', 2), ('雲', 2), ('万', 1), ('亨', 1), ('吉', 1), ('同', 1), ('嘉', 1), ('国', 1), ('字', 1), ('寛', 1), ('成', 1), ('授', 1), ('武', 1), ('泰', 1), ('祚', 1), ('祥', 1), ('禎', 1), ('福', 1), ('老', 1), ('衡', 1), ('護', 1), ('貞', 1), ('銅', 1), ('雉', 1), ('養', 1)])


「妻すこし昼を睡りぬ小晦日)」(星野麦人 1877-1965)

元号の予想(3)に続く)

0 件のコメント: