kansi_valid 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE.txt +15 -0
- data/README +133 -0
- data/dic/dic.txt +6888 -0
- data/dic/ji_s.txt +1 -0
- data/dic/jouyou_kanji.txt +1 -0
- data/dic/kaku.dic +31 -0
- data/dic/kanji_list.txt +1 -0
- data/dic/parts.dic +1313 -0
- data/dic/yomi.dic +6404 -0
- data/kansi_valid.gemspec +45 -0
- data/lib/kansi_valid.rb +299 -0
- data/lib/kansi_valid/_24hudou.rb +146 -0
- data/lib/kansi_valid/_3ren.rb +22 -0
- data/lib/kansi_valid/be_hyo.rb +15 -0
- data/lib/kansi_valid/be_soku.rb +15 -0
- data/lib/kansi_valid/bouin.rb +38 -0
- data/lib/kansi_valid/check_okosi.rb +13 -0
- data/lib/kansi_valid/check_ouin.rb +17 -0
- data/lib/kansi_valid/check_ryouin.rb +47 -0
- data/lib/kansi_valid/check_tuuin.rb +30 -0
- data/lib/kansi_valid/check_zekku.rb +23 -0
- data/lib/kansi_valid/hyousoku.rb +46 -0
- data/lib/kansi_valid/inji.rb +65 -0
- data/lib/kansi_valid/kanji.rb +18 -0
- data/lib/kansi_valid/kansi_analyze.rb +16 -0
- data/lib/kansi_valid/kansi_comment.rb +23 -0
- data/lib/kansi_valid/kansi_generate.rb +387 -0
- data/lib/kansi_valid/kansi_htm.rb +151 -0
- data/lib/kansi_valid/kansi_organize.rb +57 -0
- data/lib/kansi_valid/kohyo.rb +37 -0
- data/lib/kansi_valid/kougo.rb +132 -0
- data/lib/kansi_valid/nihongo.rb +12 -0
- data/lib/kansi_valid/pick.rb +57 -0
- data/lib/kansi_valid/sample.rb +17 -0
- data/lib/kansi_valid/search.rb +28 -0
- data/lib/kansi_valid/seikei.rb +20 -0
- data/lib/kansi_valid/version.rb +14 -0
- data/lib/kansi_valid/wiktionary.rb +79 -0
- data/test/tc_kansi_valid.rb +92 -0
- metadata +120 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
#下三連禁。trueがOKということ
|
6
|
+
def _3ren(a)
|
7
|
+
bool=false
|
8
|
+
0.upto(3) do |x|
|
9
|
+
bool=bool ||
|
10
|
+
((a[x][-1].include?("○")||(a[x][-1].include?("◇")) && x!=2)&&
|
11
|
+
a[x][-3].include?("○")&&
|
12
|
+
a[x][-5].include?("○"))||
|
13
|
+
(a[x][-1].include?("●")&&
|
14
|
+
a[x][-3].include?("●")&&
|
15
|
+
a[x][-5].include?("●"))
|
16
|
+
end
|
17
|
+
return !bool
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
#if $0==__FILE__
|
22
|
+
#end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
#冒韻を調べる。trueがOKということ。
|
6
|
+
#bouin(poem_string(詩),zekku=(5or7),ouIn=(ex."東"))
|
7
|
+
def bouin(a,zekku,ouIn)
|
8
|
+
#(押韻)の数を引き算で調べる
|
9
|
+
_in=a.flatten.size-((a.flatten-[ouIn]).size)# =>2,3,4など
|
10
|
+
if zekku==5
|
11
|
+
if _in==2
|
12
|
+
#五言絶句の通常の韻の数==2
|
13
|
+
return true
|
14
|
+
elsif _in==3
|
15
|
+
#五言絶句で、第一句が韻ならOK(==3)
|
16
|
+
if a[0][8]==ouIn
|
17
|
+
return true
|
18
|
+
else
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
else
|
22
|
+
#五言のそれ以外は冒韻またはエラー
|
23
|
+
return false
|
24
|
+
end
|
25
|
+
elsif zekku==7
|
26
|
+
if _in==3 or (_in==2 && a[0][12]!=ouIn)
|
27
|
+
return true
|
28
|
+
else
|
29
|
+
#それ以外はエラー
|
30
|
+
return false
|
31
|
+
end
|
32
|
+
else
|
33
|
+
#絶句にあてはまらないものはnil
|
34
|
+
return nil
|
35
|
+
end
|
36
|
+
nil#どれにもあてはまらない(??)
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
#漢詩4句の最後の語句ex."青○隊●遇●東◇元○"の最後の'元'を取り出す。
|
6
|
+
def check_ouin(kekka)
|
7
|
+
|
8
|
+
array=kekka.split(/\n/)# =>四句のリスト
|
9
|
+
|
10
|
+
if RUBY_VERSION < "1.9.0"
|
11
|
+
return array[3].chomp.split(//)[-2]# =>'元'
|
12
|
+
else
|
13
|
+
x=array[3].split(//)
|
14
|
+
return x[((x.size)/2-1)*2]# =>'元'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
def check_ryouin_table(kansi)
|
6
|
+
#ex.
|
7
|
+
#kansi="妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
|
8
|
+
kekka=""
|
9
|
+
kansi.split(//).each do |ji|
|
10
|
+
begin
|
11
|
+
a=Dic[ji]
|
12
|
+
if a[4]#=="◇"
|
13
|
+
kekka+="<tr><td>"+ji+"</td><td>"+a[4]+"</td><td>"+a[5]+"</td><td>"+a[7]+"</td><td>"+a[8]+"</td><td>"+a[10]+"</td></tr>\n"
|
14
|
+
end
|
15
|
+
rescue
|
16
|
+
kekka+="\n"
|
17
|
+
next
|
18
|
+
end
|
19
|
+
end
|
20
|
+
return kekka
|
21
|
+
end
|
22
|
+
def check_ryouin(kansi)
|
23
|
+
#ex.
|
24
|
+
#kansi="妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
|
25
|
+
kekka=""
|
26
|
+
kansi.split(//).each do |ji|
|
27
|
+
begin
|
28
|
+
a=Dic[ji]
|
29
|
+
if a[4]#=="◇"
|
30
|
+
kekka+=ji+":"+a[4]+":"+a[5]+":"+a[7]+":"+a[8]+":"+a[10]+"\n"
|
31
|
+
end
|
32
|
+
rescue
|
33
|
+
kekka+="\n"
|
34
|
+
next
|
35
|
+
end
|
36
|
+
end
|
37
|
+
return kekka
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
if $0==__FILE__
|
43
|
+
require 'kansi_valid'
|
44
|
+
require 'kconv'
|
45
|
+
include Kansi_valid
|
46
|
+
print Kconv.tosjis check_ryouin("妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門")
|
47
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
#通韻のチェック
|
6
|
+
def check_tuuin(a,zekku,ouIn)
|
7
|
+
#print a
|
8
|
+
#print zekku
|
9
|
+
#print ouIn
|
10
|
+
if zekku!=nil
|
11
|
+
#七言絶句
|
12
|
+
if zekku==7
|
13
|
+
#p ouIn
|
14
|
+
#p a[0][12]
|
15
|
+
return (ouIn==a[0][12] && ouIn==a[1][12] && ouIn==a[3][12])
|
16
|
+
#五言絶句
|
17
|
+
elsif zekku==5
|
18
|
+
#p ouIn
|
19
|
+
#p a[1][8]
|
20
|
+
return (ouIn==a[1][8] && ouIn==a[3][8] && (ouIn==a[0][8]) or be_soku(a[0][9]))
|
21
|
+
#その他(false)
|
22
|
+
else
|
23
|
+
return false
|
24
|
+
end
|
25
|
+
else
|
26
|
+
return false
|
27
|
+
end
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
#五言なら5、七言なら7、それ以外nil
|
6
|
+
def check_zekku(kekka)
|
7
|
+
|
8
|
+
if RUBY_VERSION < "1.9.0"
|
9
|
+
check=kekka.split(/\n/)[0].size/3
|
10
|
+
else
|
11
|
+
check=kekka.split(/\n/)[0].size
|
12
|
+
end
|
13
|
+
|
14
|
+
if check==7
|
15
|
+
zekku=7
|
16
|
+
elsif check==5
|
17
|
+
zekku=5
|
18
|
+
else
|
19
|
+
zekku=nil
|
20
|
+
end
|
21
|
+
zekku
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
# str = "a妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
|
6
|
+
# hyousoku(str)# => "?a嘯●麻○文○炎●屋●庚○元○
|
7
|
+
# 陽○職●真○東◇質●質●元○
|
8
|
+
# 問●屋●真○寒◇寒○薬●宋●
|
9
|
+
# 問●侵○青○隊●遇●東◇元○"
|
10
|
+
def hyousoku(str)
|
11
|
+
kekka=""
|
12
|
+
|
13
|
+
str.encode("utf-8") unless RUBY_VERSION < "1.9.0"
|
14
|
+
|
15
|
+
str.split(//).each do |moji|
|
16
|
+
#p moji
|
17
|
+
result=Dic[moji]#dic_file="kanji_utf8.txt" array or nil
|
18
|
+
case result
|
19
|
+
when nil
|
20
|
+
if moji=~/\s/
|
21
|
+
plus=moji#改行などはそのまま返す
|
22
|
+
else
|
23
|
+
plus="?"+moji#空白以外で変換できなかったnil
|
24
|
+
end
|
25
|
+
else
|
26
|
+
begin
|
27
|
+
plus=result[5].split(//).last+result[4]#辞書データ(韻、平仄○●)の出力
|
28
|
+
rescue
|
29
|
+
plus="?"+moji#国字、ひらがななど(辞書に載っていて平仄のないもの)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
kekka+=plus
|
33
|
+
#p result[4]
|
34
|
+
#p result[5]
|
35
|
+
end
|
36
|
+
kekka
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
#if $0==__FILE__
|
41
|
+
#require "kansi_valid"
|
42
|
+
#require "kconv"
|
43
|
+
#include Kansi_valid
|
44
|
+
#print Kconv.tosjis(hyousoku(str="a妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"))
|
45
|
+
|
46
|
+
#end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
# 平韻の30種の配列
|
6
|
+
def inji
|
7
|
+
str=["東翁窮宮弓攻洪功公工紅鴻終充戎崇聡叢衷沖忠虫通筒桐瞳銅同童風楓豊蓬蒙朦濛雄熊融隆朧瓏空虹中凍夢滝籠",
|
8
|
+
"冬凶恭胸宗鐘松衝鍾憧農濃封峰逢蜂烽容蓉竜供従縦重縫溶",
|
9
|
+
"江釭缸腔双窓撞邦双降淙滝",
|
10
|
+
"支医移萎惟帷危奇飢期規旗肌姫基窺其岐嬉羇欺犠疑儀宜資師詩肢脂糸枝詞芝姿諮雌私獅之匙屍祠巵而慈辞時児持炊垂錐誰衰随笞池知痴馳追碑卑悲皮疲眉琵唯離罹梨籬為遺涯机騎崎差思司治推吹施遅累",
|
11
|
+
"微威囲違依祈帰輝希機揮稀譏磯饑非妃肥扉飛霏緋衣幾崎誹",
|
12
|
+
"魚於居虚裾渠墟漁初書諸舒如徐除疎儲余餘廬驢嘘車且与誉予",
|
13
|
+
"虞烏迂区駒倶愚隅枯孤湖弧呼胡姑糊壺娯吾拘朱株殊珠濡需儒須図枢趨粗租蘇廚誅徒途都塗屠奴符夫敷扶膚無模輸愉諛炉蘆悪汚駆舗摸",
|
14
|
+
"斉携渓鶏閨畦蹊谿袿西淒悽栖臍棲凄啼梯提堤低批迷稽妻題締泥",
|
15
|
+
"佳鞋諧偕階懐皆街骸崖斎釵排俳牌埋淮蛙蝸涯柴",
|
16
|
+
"灰哀埃開廻徊該孩才裁催災猜纔哉材財胎頽苔台杯盃梅媒煤枚雷来魁隈栽推駘堆培",
|
17
|
+
"真姻因均巾銀春純旬遵循巡醇淳馴臣紳新親唇神薪津辛伸呻身申辰晨脣仁人塵珍賓頻浜貧民罠隣倫輪燐鱗諄振娠陳",
|
18
|
+
"文慇雲耘云斤欣芹筋勤懃勲薫君裙醺燻軍群雰墳紛焚氛蚊紋分聞",
|
19
|
+
"元猿園寃援温恩垣軒腱喧言原源昆昏痕坤婚魂根尊樽村存屯豚呑藩繁幡蕃煩番奔翻盆門渾孫噴論",
|
20
|
+
"寒安鞍刊奸竿肝官韓寛干完歓丸酸餐残丹灘箪端壇檀団般搬磐盤饅欄蘭闌乾冠棺観看歎嘆単弾難漫瀾",
|
21
|
+
"刪関閑環姦艱菅顔頑山班攀蛮湾間還",
|
22
|
+
"先煙沿鉛延筵淵円鳶懸賢肩堅権虔拳玄弦舷絃栓泉遷川銭千宣仙船詮箋蝉煎専穿然全前天巓田年燃辺編偏篇翩鞭眠綿連蓮聯漣憐咽縁乾県圏研鮮扇旋禅伝便",
|
23
|
+
"蕭橋嬌驕梟昭消焦招宵蕉椒樵条饒朝潮跳凋超彫蜩標瓢飄描苗猫謡窯腰揺遙妖寮聊遼寥焼調挑漂要夭僚料",
|
24
|
+
"肴郊交敲哮抄梢巣嘲胞泡包咆庖抛茅教咬",
|
25
|
+
"豪高尻毫濠曹遭槽艘掻糟繰騒刀陶逃桃淘濤萄褒毛牢号操労",
|
26
|
+
"歌阿科渦河靴何苛渦訛俄蛾唆娑多他波婆摩魔羅倭荷過蓑蛇駄那頗磨和",
|
27
|
+
"麻鴉家加華花瓜蝦嘉霞芽牙誇査些砂裟沙紗遮斜奢邪茶耶巴琶爺窪差涯蝸蛙車蛇",
|
28
|
+
"陽央狂航荒慌皇香黄綱鋼光康昂岡篁徨杭剛粧商章彰昌傷詳祥床牀嘗翔廂裳墻薔嬢常場娘荘倉桑霜装蒼箱腸糖唐塘堂芳方坊肪忙亡房防茫揚楊羊洋涼良糧郎廊狼王強郷慶行将償障相喪創蔵長張当湯彷傍望妨忘量浪",
|
29
|
+
"庚営栄英盈桜驚京卿兄傾軽茎鯨坑耕宏衡晶城情精牲清声成生晴誠征甥偵貞呈程坪兵平萌棚明盟名鳴盲横頃頸迎行更請盛正争丁評膨令",
|
30
|
+
"青刑型形蛍馨星庁亭停庭廷汀寧瓶屏銘冥鈴霊齢伶玲零経醒聴丁町釘",
|
31
|
+
"蒸鷹恒承昇升縄丞仍層僧曽憎懲徴澄謄灯騰登藤氷憑崩朋鵬薨蠅陵稜綾応興矜凝称勝乗烝増能",
|
32
|
+
"尤鴎謳丘球求休鳩仇裘毬牛侯猴喉鉤溝週秋愁修収州酋羞洲囚舟周酬讐蒐柔揉捜抽儔疇兜頭投浮謀矛眸油郵遊憂幽優悠猶由游偸硫流留瑠榴楼欧蹂不瘤",
|
33
|
+
"侵陰音淫襟金琴禽欽衾衿襟岑檎擒吟今心深森斟箴鍼簪尋沈砧臨林淋琳霖禁浸針任妊",
|
34
|
+
"覃庵甘堪柑酣含参慚慙潭譚耽痰男談貪曇南楠壜嵐藍三函担探擔",
|
35
|
+
"塩檐淹嫌謙兼厳尖繊籤瞻髯添霑粘廉簾鎌炎占潜",
|
36
|
+
"咸銜鹹緘岩巌杉衫凡鑑函監讒帆"
|
37
|
+
]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
if $0==__FILE__
|
42
|
+
include Kansi_valid
|
43
|
+
require 'kconv'
|
44
|
+
num=0
|
45
|
+
xx=0
|
46
|
+
str=inji
|
47
|
+
open("inji.txt","w") do |io|
|
48
|
+
str.each do |moji|
|
49
|
+
x=moji.split(//).size
|
50
|
+
num+=x
|
51
|
+
#p x
|
52
|
+
xx+=1
|
53
|
+
if xx < 16
|
54
|
+
yy=xx
|
55
|
+
else
|
56
|
+
yy=xx-15
|
57
|
+
end
|
58
|
+
y=yy.to_s+moji.split(//).first
|
59
|
+
io.puts y
|
60
|
+
io.puts moji
|
61
|
+
io.puts hyosoku(moji)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
p num
|
65
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
def kanji(dic_file=File.dirname(__FILE__)+"/../../dic/dic.txt")
|
6
|
+
#辞書ハッシュの初期化
|
7
|
+
dic={}
|
8
|
+
#辞書の読みこみ
|
9
|
+
data=File.read(dic_file)
|
10
|
+
#辞書ハッシュの登録
|
11
|
+
data.each_line do |list|
|
12
|
+
data=list.chomp.split(/;/)
|
13
|
+
dic[data[0]]=data
|
14
|
+
end
|
15
|
+
return dic
|
16
|
+
end
|
17
|
+
module_function:kanji
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
# コメント分の切り出し(#で始まる行)
|
6
|
+
# ex. str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
|
7
|
+
# =>"#komento\n"
|
8
|
+
def kansi_comment(str)
|
9
|
+
kekka=""
|
10
|
+
str.split(/\n/).each do |x|
|
11
|
+
#p x
|
12
|
+
#kekka+= x
|
13
|
+
if x.split(//).first=='#'
|
14
|
+
kekka+=x
|
15
|
+
else
|
16
|
+
end
|
17
|
+
end
|
18
|
+
kekka # =>"#komento\n"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#if $0==__FILE__
|
23
|
+
#end
|
@@ -0,0 +1,387 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
=begin
|
6
|
+
kansi_generate(zekku=7,keyword=["康","鳳祥"],ouin=nil)# =>"漢詩"
|
7
|
+
漢詩の遊び生成プログラム
|
8
|
+
*キーワードを指定すると、それをいれてくれる
|
9
|
+
*あとはランダムに生成(意味は無視)
|
10
|
+
*作ったものをいじって漢詩も再生成可能
|
11
|
+
|
12
|
+
===まずは簡易版
|
13
|
+
*準備
|
14
|
+
**韻をリストアップしておく
|
15
|
+
**常用漢字を調べるjouyou_kanji.txt
|
16
|
+
**韻字をランダムに選択する(韻3個または2個)
|
17
|
+
**平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)
|
18
|
+
**先のキーワードを入れる
|
19
|
+
**残りの字をランダムに抜き取る
|
20
|
+
**これで準備完了
|
21
|
+
*リストからランダムに選び出す
|
22
|
+
**選んだ字を当てはめる
|
23
|
+
**残りをランダムに作成する。
|
24
|
+
=end
|
25
|
+
|
26
|
+
|
27
|
+
def kansi_generate(zekku=7,keyword=[],ouin_=nil)
|
28
|
+
#p zekku
|
29
|
+
#p keyword
|
30
|
+
#p ouin_
|
31
|
+
|
32
|
+
#**韻をリストアップしておく
|
33
|
+
#puts list.size#30
|
34
|
+
|
35
|
+
#**常用漢字を調べる
|
36
|
+
jouyou_kanji=Jouyou
|
37
|
+
#puts randsize=jouyou_kanji.size#1945
|
38
|
+
#puts jouyou_kanji[rand(randsize)]
|
39
|
+
|
40
|
+
#**韻字をランダムに選択する
|
41
|
+
#**決まっているときはそれを選択
|
42
|
+
ouin=""
|
43
|
+
begin
|
44
|
+
if ouin_!=nil
|
45
|
+
#inji==韻リスト(30平韻の配列)
|
46
|
+
inji.each do |ji|
|
47
|
+
#p ji
|
48
|
+
if ji.include?(ouin_)
|
49
|
+
ouin =ji.split(//)
|
50
|
+
break
|
51
|
+
end
|
52
|
+
end
|
53
|
+
else
|
54
|
+
ouin=inji[rand(30)].split(//)
|
55
|
+
end
|
56
|
+
# rescue
|
57
|
+
# ouin_=nil
|
58
|
+
# retry
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
jouyou_kanji=jouyou_kanji-ouin #韻を候補から削除
|
63
|
+
inn=pick(ouin,3)[0]
|
64
|
+
|
65
|
+
#**平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)
|
66
|
+
|
67
|
+
#x,y=put_char("○",[jouyou_kanji,inn])
|
68
|
+
|
69
|
+
list=[jouyou_kanji,inn]
|
70
|
+
|
71
|
+
#main program
|
72
|
+
hyo_7=["◇○◇●●○◎
|
73
|
+
◇●◇○○●◎
|
74
|
+
◇●◇○○●●
|
75
|
+
◇○◇●●○◎",
|
76
|
+
"◇○◇●●○◎
|
77
|
+
◇●○○◇●◎
|
78
|
+
◇●◇○○●●
|
79
|
+
◇○◇●●○◎",
|
80
|
+
"◇○◇●●○◎
|
81
|
+
◇●◇○○●◎
|
82
|
+
◇●○○○●●
|
83
|
+
◇○◇●●○◎",
|
84
|
+
"◇○◇●●○◎
|
85
|
+
◇●◇○○●◎
|
86
|
+
◇●○○●○●
|
87
|
+
◇○◇●●○◎",
|
88
|
+
"◇○◇●●○◎
|
89
|
+
◇●○○◇●◎
|
90
|
+
◇●○○●○●
|
91
|
+
◇○◇●●○◎"]
|
92
|
+
|
93
|
+
soku_7=[
|
94
|
+
"◇●○○◇●◎
|
95
|
+
◇○◇●●○◎
|
96
|
+
◇○◇●◇○●
|
97
|
+
◇●○○◇●◎",
|
98
|
+
"◇●◇○○●◎
|
99
|
+
◇○◇●●○◎
|
100
|
+
◇○◇●◇○●
|
101
|
+
◇●○○◇●◎",
|
102
|
+
"◇●○○◇●◎
|
103
|
+
◇○◇●●○◎
|
104
|
+
◇○◇●◇○●
|
105
|
+
◇●◇○○●◎",
|
106
|
+
"◇●◇○○●◎
|
107
|
+
◇○◇●●○◎
|
108
|
+
◇○◇●◇○●
|
109
|
+
◇●◇○○●◎"]
|
110
|
+
|
111
|
+
hyo_5=[
|
112
|
+
"◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
|
113
|
+
"◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
|
114
|
+
"◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
|
115
|
+
"◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
|
116
|
+
"◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
|
117
|
+
"◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
|
118
|
+
"◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
|
119
|
+
"◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
|
120
|
+
soku_5=[
|
121
|
+
"◇●◇○●
|
122
|
+
○○◇●◎
|
123
|
+
◇○○●●
|
124
|
+
○●●○◎",
|
125
|
+
"◇●◇○●
|
126
|
+
○○◇●◎
|
127
|
+
○○●○●
|
128
|
+
○●●○◎",
|
129
|
+
"◇●◇○●
|
130
|
+
◇○○●◎
|
131
|
+
◇○○●●
|
132
|
+
○●●○◎",
|
133
|
+
"◇●◇○●
|
134
|
+
◇○○●◎
|
135
|
+
○○●○●
|
136
|
+
○●●○◎"]
|
137
|
+
|
138
|
+
if zekku==7 #七言絶句生成
|
139
|
+
if rand(2)==0#平仄の振り分け
|
140
|
+
#七言○
|
141
|
+
x,y=pick(hyo_7)#規則の選択(yはダミー)
|
142
|
+
#print Kconv.tosjis x[0]
|
143
|
+
poem=poetter(x[0],list)#list は[漢字配列,韻配列]であること。
|
144
|
+
else
|
145
|
+
#七言●
|
146
|
+
#7●
|
147
|
+
x,y=pick(soku_7)
|
148
|
+
#print Kconv.tosjis x[0]
|
149
|
+
poem=poetter(x[0],list)
|
150
|
+
end
|
151
|
+
elsif zekku==5 #五言絶句生成
|
152
|
+
if rand(2)==0
|
153
|
+
#五言○
|
154
|
+
x,y=pick(hyo_5)
|
155
|
+
poem=poetter(x[0],list)
|
156
|
+
else
|
157
|
+
#五言●
|
158
|
+
x,y=pick(soku_5)
|
159
|
+
poem=poetter(x[0],list)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
return poem
|
163
|
+
#**先のキーワードを入れる
|
164
|
+
#**残りの字をランダムに抜き取る
|
165
|
+
#**これで準備完了
|
166
|
+
#*リストからランダムに選び出す
|
167
|
+
#**選んだ字を当てはめる
|
168
|
+
#**残りをランダムに作成する。
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
def kansi_generate2(zekku=7,keyword=[],ouin_=nil)
|
173
|
+
#p zekku
|
174
|
+
#p keyword
|
175
|
+
#p ouin_
|
176
|
+
|
177
|
+
#**韻をリストアップしておく
|
178
|
+
#puts list.size#30
|
179
|
+
|
180
|
+
#**常用漢字を調べる
|
181
|
+
jouyou_kanji=Jouyou
|
182
|
+
#puts randsize=jouyou_kanji.size#1945
|
183
|
+
#puts jouyou_kanji[rand(randsize)]
|
184
|
+
|
185
|
+
#**韻字をランダムに選択する
|
186
|
+
#**決まっているときはそれを選択
|
187
|
+
ouin=""
|
188
|
+
begin
|
189
|
+
if ouin_!=nil
|
190
|
+
#inji==韻リスト(30平韻の配列)
|
191
|
+
inji.each do |ji|
|
192
|
+
#p ji
|
193
|
+
if ji.include?(ouin_)
|
194
|
+
ouin =ji.split(//)
|
195
|
+
break
|
196
|
+
end
|
197
|
+
end
|
198
|
+
else
|
199
|
+
ouin=inji[rand(30)].split(//)
|
200
|
+
end
|
201
|
+
# rescue
|
202
|
+
# ouin_=nil
|
203
|
+
# retry
|
204
|
+
end
|
205
|
+
|
206
|
+
|
207
|
+
jouyou_kanji=jouyou_kanji-ouin #韻を候補から削除
|
208
|
+
inn=pick(ouin,3)[0]
|
209
|
+
|
210
|
+
#**平起または仄起をランダムに選択# =>規格が決定される(平X個、仄X個)
|
211
|
+
|
212
|
+
#x,y=put_char("○",[jouyou_kanji,inn])
|
213
|
+
|
214
|
+
list=[jouyou_kanji,inn]
|
215
|
+
|
216
|
+
#main program
|
217
|
+
hyo_7=["◇○◇●●○◎
|
218
|
+
◇●◇○○●◎
|
219
|
+
◇●◇○○●●
|
220
|
+
◇○◇●●○◎",
|
221
|
+
"◇○◇●●○◎
|
222
|
+
◇●○○◇●◎
|
223
|
+
◇●◇○○●●
|
224
|
+
◇○◇●●○◎",
|
225
|
+
"◇○◇●●○◎
|
226
|
+
◇●◇○○●◎
|
227
|
+
◇●○○○●●
|
228
|
+
◇○◇●●○◎",
|
229
|
+
"◇○◇●●○◎
|
230
|
+
◇●◇○○●◎
|
231
|
+
◇●○○●○●
|
232
|
+
◇○◇●●○◎",
|
233
|
+
"◇○◇●●○◎
|
234
|
+
◇●○○◇●◎
|
235
|
+
◇●○○●○●
|
236
|
+
◇○◇●●○◎"]
|
237
|
+
|
238
|
+
soku_7=[
|
239
|
+
"◇●○○◇●◎
|
240
|
+
◇○◇●●○◎
|
241
|
+
◇○◇●◇○●
|
242
|
+
◇●○○◇●◎",
|
243
|
+
"◇●◇○○●◎
|
244
|
+
◇○◇●●○◎
|
245
|
+
◇○◇●◇○●
|
246
|
+
◇●○○◇●◎",
|
247
|
+
"◇●○○◇●◎
|
248
|
+
◇○◇●●○◎
|
249
|
+
◇○◇●◇○●
|
250
|
+
◇●◇○○●◎",
|
251
|
+
"◇●◇○○●◎
|
252
|
+
◇○◇●●○◎
|
253
|
+
◇○◇●◇○●
|
254
|
+
◇●◇○○●◎"]
|
255
|
+
|
256
|
+
hyo_5=[
|
257
|
+
"◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
|
258
|
+
"◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
|
259
|
+
"◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
|
260
|
+
"◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
|
261
|
+
"◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
|
262
|
+
"◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
|
263
|
+
"◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
|
264
|
+
"◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
|
265
|
+
soku_5=[
|
266
|
+
"◇●◇○●
|
267
|
+
○○◇●◎
|
268
|
+
◇○○●●
|
269
|
+
○●●○◎",
|
270
|
+
"◇●◇○●
|
271
|
+
○○◇●◎
|
272
|
+
○○●○●
|
273
|
+
○●●○◎",
|
274
|
+
"◇●◇○●
|
275
|
+
◇○○●◎
|
276
|
+
◇○○●●
|
277
|
+
○●●○◎",
|
278
|
+
"◇●◇○●
|
279
|
+
◇○○●◎
|
280
|
+
○○●○●
|
281
|
+
○●●○◎"]
|
282
|
+
|
283
|
+
if zekku==7 #七言絶句生成
|
284
|
+
if rand(2)==0#平仄の振り分け
|
285
|
+
#七言○
|
286
|
+
x,y=pick(hyo_7)#規則の選択(yはダミー)
|
287
|
+
#print Kconv.tosjis x[0]
|
288
|
+
poem=poetter(x[0],list)#list は[漢字配列,韻配列]であること。
|
289
|
+
else
|
290
|
+
#七言●
|
291
|
+
#7●
|
292
|
+
x,y=pick(soku_7)
|
293
|
+
#print Kconv.tosjis x[0]
|
294
|
+
poem=poetter(x[0],list)
|
295
|
+
end
|
296
|
+
elsif zekku==5 #五言絶句生成
|
297
|
+
if rand(2)==0
|
298
|
+
#五言○
|
299
|
+
x,y=pick(hyo_5)
|
300
|
+
poem=poetter(x[0],list)
|
301
|
+
else
|
302
|
+
#五言●
|
303
|
+
x,y=pick(soku_5)
|
304
|
+
poem=poetter(x[0],list)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
return poem
|
309
|
+
#**先のキーワードを入れる
|
310
|
+
#**残りの字をランダムに抜き取る
|
311
|
+
#**これで準備完了
|
312
|
+
#*リストからランダムに選び出す
|
313
|
+
#**選んだ字を当てはめる
|
314
|
+
#**残りをランダムに作成する。
|
315
|
+
|
316
|
+
end
|
317
|
+
|
318
|
+
def put_char(sign,list)
|
319
|
+
#sign to_be "○"or"●"or"◇"or"◎"or any
|
320
|
+
exit=false
|
321
|
+
#p list[0]
|
322
|
+
#p sign
|
323
|
+
while exit != true
|
324
|
+
case sign
|
325
|
+
when "○"
|
326
|
+
x,y=pick(list[0])
|
327
|
+
#p x
|
328
|
+
if be_hyo(hyousoku(x[0]).split(//)[-1])
|
329
|
+
exit=true
|
330
|
+
else
|
331
|
+
next
|
332
|
+
end
|
333
|
+
|
334
|
+
when "●"
|
335
|
+
x,y=pick(list[0])
|
336
|
+
#p x
|
337
|
+
if be_soku(hyousoku(x[0]).split(//)[-1])
|
338
|
+
exit=true
|
339
|
+
else
|
340
|
+
next
|
341
|
+
end
|
342
|
+
|
343
|
+
when "◇"
|
344
|
+
x,y=pick(list[0])
|
345
|
+
z=hyousoku(x[0]).split(//)[-1]
|
346
|
+
if be_soku(z) or be_hyo(z)
|
347
|
+
exit=true
|
348
|
+
else
|
349
|
+
next
|
350
|
+
end
|
351
|
+
when "◎"
|
352
|
+
x,y=pick(list[1])
|
353
|
+
return x,[list[0],y]
|
354
|
+
else
|
355
|
+
#p "else:"+sign
|
356
|
+
x,y=pick(sign)
|
357
|
+
return x,list
|
358
|
+
end
|
359
|
+
return x,[y,list[1]]
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
def poetter(rule,list)
|
364
|
+
#rule # =>"◇●○◎"
|
365
|
+
#list # =>[list of Han character,in_list]
|
366
|
+
poem=""
|
367
|
+
rule.split(//).each do |sign|
|
368
|
+
if sign!="\n"
|
369
|
+
#print Kconv.tosjis sign
|
370
|
+
x,list=put_char(sign,list)
|
371
|
+
poem+=x[0]
|
372
|
+
#print Kconv.tosjis poem
|
373
|
+
else
|
374
|
+
poem+="\n"
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
378
|
+
return poem
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
if $0==__FILE__
|
383
|
+
require '../kansi_valid'
|
384
|
+
include Kansi_valid
|
385
|
+
print kansi_generate2([])#['康','鳳祥'])
|
386
|
+
print kansi_generate2
|
387
|
+
end
|