kansi_valid 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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,151 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
def html_head(title="kansi_htm")
|
6
|
+
head = <<EOS
|
7
|
+
<html>
|
8
|
+
<head>
|
9
|
+
<meta http-equiv="Content-Language" content="ja" />
|
10
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="../css/str.css" title="str"/>
|
12
|
+
<title>#{title}</title>
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
<div class="tate"><a name="first"></a>
|
16
|
+
EOS
|
17
|
+
return head
|
18
|
+
end
|
19
|
+
|
20
|
+
def html_end
|
21
|
+
_end='
|
22
|
+
<br/><a href="#first">(top)</a></div>
|
23
|
+
</body>
|
24
|
+
</html>'
|
25
|
+
end
|
26
|
+
|
27
|
+
def rubi(rb,rt)
|
28
|
+
if rt!=nil
|
29
|
+
"<ruby><rb>#{rb}</rb><rt class='rt'>#{rt}</rt></ruby>"
|
30
|
+
elsif rb==" " || rb==" "
|
31
|
+
' '
|
32
|
+
else
|
33
|
+
rb
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def hyosoku_htm(str)
|
38
|
+
moji=str
|
39
|
+
#p moji
|
40
|
+
result=Dic[moji]#dic_file="kanji_utf8.txt" array or nil
|
41
|
+
|
42
|
+
case result
|
43
|
+
when nil
|
44
|
+
nil
|
45
|
+
else
|
46
|
+
begin
|
47
|
+
plus=result[5].split(//).last+result[4]#辞書データ(韻、平仄○●)の出力
|
48
|
+
rescue
|
49
|
+
nil#国字、ひらがななど(辞書に載っていて平仄のないもの)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
#p result[4]
|
53
|
+
#p result[5]
|
54
|
+
end
|
55
|
+
|
56
|
+
def see_dic(ji,int)
|
57
|
+
result=Dic[ji]
|
58
|
+
case result
|
59
|
+
when nil
|
60
|
+
nil
|
61
|
+
else
|
62
|
+
begin
|
63
|
+
plus=result[int]#辞書データ
|
64
|
+
rescue
|
65
|
+
nil#国字、ひらがななど(辞書に載っていて平仄のないもの)またはエラー
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def special_htm(str,int)
|
71
|
+
kekka=""
|
72
|
+
flag=true #perse flag
|
73
|
+
#head
|
74
|
+
kekka+=html_head
|
75
|
+
##core
|
76
|
+
x=str.split(//) #each characters into Array
|
77
|
+
x.each do |ji|
|
78
|
+
#if comment
|
79
|
+
if ji=="#"
|
80
|
+
flag=false
|
81
|
+
kekka+="<span class='comment'>#"
|
82
|
+
elsif ji=="\n"
|
83
|
+
kekka+="</span>" if flag==false
|
84
|
+
flag=true
|
85
|
+
kekka+="<br/>\n"
|
86
|
+
else
|
87
|
+
if flag
|
88
|
+
result=see_dic(ji,int)
|
89
|
+
kekka+=rubi(ji,result)
|
90
|
+
else
|
91
|
+
kekka+=ji
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
kekka+=html_end
|
96
|
+
|
97
|
+
yield kekka if block_given?
|
98
|
+
return kekka
|
99
|
+
end
|
100
|
+
|
101
|
+
def hyosoku_to_ruby_htm(str)
|
102
|
+
kekka=""
|
103
|
+
#head
|
104
|
+
kekka+=html_head
|
105
|
+
##core
|
106
|
+
str.split(//).each do |ji|
|
107
|
+
kekka+="<br/>" if ji=="\n"
|
108
|
+
result=hyosoku_htm(ji)
|
109
|
+
kekka+=rubi(ji,result)
|
110
|
+
end
|
111
|
+
|
112
|
+
#end
|
113
|
+
kekka+=html_end
|
114
|
+
|
115
|
+
yield kekka if block_given?
|
116
|
+
return kekka
|
117
|
+
end
|
118
|
+
def to_htm(str)
|
119
|
+
kekka=""
|
120
|
+
flag=true#perse flag
|
121
|
+
#head
|
122
|
+
kekka+=html_head
|
123
|
+
##core
|
124
|
+
#p str.encoding
|
125
|
+
x=str.split(//)#each characters into Array
|
126
|
+
x.each do |ji|
|
127
|
+
#if comment
|
128
|
+
if ji=="#"
|
129
|
+
flag=false
|
130
|
+
elsif ji=="\n"
|
131
|
+
flag=true
|
132
|
+
kekka+="<br/>"
|
133
|
+
else
|
134
|
+
if flag
|
135
|
+
result=hyosoku_htm(ji)
|
136
|
+
kekka+=rubi(ji,result)
|
137
|
+
else
|
138
|
+
kekka+=ji
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
kekka+=html_end
|
143
|
+
|
144
|
+
yield kekka if block_given?
|
145
|
+
return kekka
|
146
|
+
end
|
147
|
+
def kansi_htm(str)
|
148
|
+
special_htm(str,8)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
# 漢詩部分の切り出し(#で始まる行は読みとばす)
|
6
|
+
# 半角英数の削除
|
7
|
+
# 改行のみ,""," "などの行も読みとばす
|
8
|
+
# ex. str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
|
9
|
+
# =>"妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
|
10
|
+
def kansi_organize(str)
|
11
|
+
kansi=""
|
12
|
+
str2=""
|
13
|
+
str.each_line do |line|
|
14
|
+
unless line.include?("#")
|
15
|
+
str2+=line
|
16
|
+
end
|
17
|
+
end
|
18
|
+
str=str2
|
19
|
+
#"妙花薫染宿平原 常國春風日日温 訓読真看般若頌 問尋経内悟空門"半角空白の分割であれば評価可能
|
20
|
+
str=str.chomp.gsub(" ","\n")
|
21
|
+
str.split(/\n/).each do |x|
|
22
|
+
x+="\n"
|
23
|
+
|
24
|
+
#print x.encode("sjis") #RUBY_VERSION >= "1.9.0"
|
25
|
+
if x.split(//).first=='#'
|
26
|
+
elsif x=~/^$/
|
27
|
+
else
|
28
|
+
a=x.gsub(/[0-9A-Za-z]/,"")
|
29
|
+
a=a.gsub(/ /,"")
|
30
|
+
kansi+=a
|
31
|
+
end
|
32
|
+
end
|
33
|
+
kansi=kansi.gsub("\n\n","\n")
|
34
|
+
kansi=last_split(str)
|
35
|
+
kansi.chomp # =>"妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門"
|
36
|
+
end
|
37
|
+
|
38
|
+
#"妙花薫染宿平原常國春風日日温訓読真看般若頌問尋経内悟空門\n"などの7言5言
|
39
|
+
#であれば評価する
|
40
|
+
def last_split(str)
|
41
|
+
list=str.chomp
|
42
|
+
if str.size==28
|
43
|
+
return list.slice(0,7)+"\n"+list.slice(7,7)+"\n"+list.slice(14,7)+"\n"+list.slice(21,7)
|
44
|
+
elsif str.size==20
|
45
|
+
return list.slice(0,5)+"\n"+list.slice(5,5)+"\n"+list.slice(10,5)+"\n"+list.slice(15,5)
|
46
|
+
else
|
47
|
+
return list
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
if $0==__FILE__
|
53
|
+
require 'kconv'
|
54
|
+
include Kansi_valid
|
55
|
+
str="#komento\n妙花薫染宿平原\n常國春風日日温\n訓読真看般若頌\n問尋経内悟空門\n\n"
|
56
|
+
print Kconv.tosjis(kansi_organize(str))
|
57
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
#弧平の評価。trueがOKということ。
|
6
|
+
def kohyo(a,zekku)
|
7
|
+
bool=true
|
8
|
+
if zekku==5
|
9
|
+
xx=3#二弧禁のチェック(4番目の○●)
|
10
|
+
elsif zekku==7
|
11
|
+
xx=7#四弧禁のチェック(8番目の○●)
|
12
|
+
else
|
13
|
+
return nil
|
14
|
+
end
|
15
|
+
|
16
|
+
0.upto(3) do |x|
|
17
|
+
#puts Kconv.tosjis a[x][xx]
|
18
|
+
case a[x][xx]
|
19
|
+
when "◇"
|
20
|
+
next
|
21
|
+
when "●"
|
22
|
+
next
|
23
|
+
when "○"
|
24
|
+
bool=bool &&
|
25
|
+
(be_hyo(a[x][xx+2])||
|
26
|
+
be_hyo(a[x][xx-2]))
|
27
|
+
else
|
28
|
+
#"analyze error:elegal char"
|
29
|
+
return nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
return bool
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#if $0==__FILE__
|
37
|
+
#end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
def zekku_list
|
6
|
+
hyo_7=["◇○◇●●○◎
|
7
|
+
◇●◇○○●◎
|
8
|
+
◇●◇○○●●
|
9
|
+
◇○◇●●○◎",
|
10
|
+
"◇○◇●●○◎
|
11
|
+
◇●○○◇●◎
|
12
|
+
◇●◇○○●●
|
13
|
+
◇○◇●●○◎",
|
14
|
+
"◇○◇●●○◎
|
15
|
+
◇●◇○○●◎
|
16
|
+
◇●○○○●●
|
17
|
+
◇○◇●●○◎",
|
18
|
+
"◇○◇●●○◎
|
19
|
+
◇●◇○○●◎
|
20
|
+
◇●○○●○●
|
21
|
+
◇○◇●●○◎",
|
22
|
+
"◇○◇●●○◎
|
23
|
+
◇●○○◇●◎
|
24
|
+
◇●○○●○●
|
25
|
+
◇○◇●●○◎"]
|
26
|
+
|
27
|
+
soku_7=[
|
28
|
+
"◇●○○◇●◎
|
29
|
+
◇○◇●●○◎
|
30
|
+
◇○◇●◇○●
|
31
|
+
◇●○○◇●◎",
|
32
|
+
"◇●◇○○●◎
|
33
|
+
◇○◇●●○◎
|
34
|
+
◇○◇●◇○●
|
35
|
+
◇●○○◇●◎",
|
36
|
+
"◇●○○◇●◎
|
37
|
+
◇○◇●●○◎
|
38
|
+
◇○◇●◇○●
|
39
|
+
◇●◇○○●◎",
|
40
|
+
"◇●◇○○●◎
|
41
|
+
◇○◇●●○◎
|
42
|
+
◇○◇●◇○●
|
43
|
+
◇●◇○○●◎"]
|
44
|
+
|
45
|
+
hyo_5=[
|
46
|
+
"◇○○●◎\n◇●●○◎\n◇●●○●\n◇○○●◎",
|
47
|
+
"◇○○●◎\n◇●●○◎\n◇●●○●\n○○●●◎",
|
48
|
+
"◇○○●◎\n◇●●○◎\n◇●◇○●\n◇○○●◎",
|
49
|
+
"◇○○●◎\n◇●●○◎\n◇●◇○●\n○○◇●◎",
|
50
|
+
"◇○○●●\n◇●●○◎\n◇●●○●\n◇○○●◎",
|
51
|
+
"◇○○●●\n◇●●○◎\n◇●●○●\n○○●●◎",
|
52
|
+
"◇○○●●\n◇●●○◎\n◇●◇○●\n◇○○●◎",
|
53
|
+
"◇○○●●\n◇●●○◎\n◇●◇○●\n○○◇●◎"]
|
54
|
+
soku_5=[
|
55
|
+
"◇●◇○●
|
56
|
+
○○◇●◎
|
57
|
+
◇○○●●
|
58
|
+
○●●○◎",
|
59
|
+
"◇●◇○●
|
60
|
+
○○◇●◎
|
61
|
+
○○●○●
|
62
|
+
○●●○◎",
|
63
|
+
"◇●◇○●
|
64
|
+
◇○○●◎
|
65
|
+
◇○○●●
|
66
|
+
○●●○◎",
|
67
|
+
"◇●◇○●
|
68
|
+
◇○○●◎
|
69
|
+
○○●○●
|
70
|
+
○●●○◎"]
|
71
|
+
return list=[hyo_7,soku_7,hyo_5,soku_5]
|
72
|
+
end
|
73
|
+
|
74
|
+
def kougo(rule=nil,inn=inji[rand(30)])
|
75
|
+
inn=inn.split(//)
|
76
|
+
kekka=""
|
77
|
+
jouyou_kanji=Jouyou
|
78
|
+
#p jouyou_kanji.size
|
79
|
+
jouyou_kanji=jouyou_kanji-inn
|
80
|
+
#p jouyou_kanji.size
|
81
|
+
#p inn.size
|
82
|
+
list=[jouyou_kanji,inn]
|
83
|
+
|
84
|
+
#7gon
|
85
|
+
if rule==nil
|
86
|
+
x=zekku_list[rand(2)]
|
87
|
+
rule=x[rand(x.size)]
|
88
|
+
#香語ルール追加
|
89
|
+
#人生職業境遇
|
90
|
+
rule+="
|
91
|
+
|
92
|
+
茲惟
|
93
|
+
新帰元 ◇◇◇◇信士"
|
94
|
+
#八字称 人格・徳行
|
95
|
+
rule+="
|
96
|
+
◇◇◇◇
|
97
|
+
◇◇◇◎
|
98
|
+
"
|
99
|
+
#隔対 8または10*2句
|
100
|
+
#直対 8または10*2句
|
101
|
+
rule+="
|
102
|
+
◇◇◇◇◇◇ ◇◇◇●
|
103
|
+
◇◇◇◇◇◇ ◇◇◇◎
|
104
|
+
|
105
|
+
◇◇◇◇ ◇◇◇◇◇●
|
106
|
+
◇◇◇◇ ◇◇◇◇◇◎
|
107
|
+
|
108
|
+
既而
|
109
|
+
◇◇◇◇ ◇◇◇●
|
110
|
+
◇◇◇◇ ◇◇◇◎
|
111
|
+
|
112
|
+
◇◇◇◇◇◇●
|
113
|
+
◇◇◇◇◇◇◎
|
114
|
+
"
|
115
|
+
#つなぎ
|
116
|
+
rule+="
|
117
|
+
正与麼時
|
118
|
+
◇◇◇◇◇◇◎
|
119
|
+
"
|
120
|
+
#著語(古語、句集)
|
121
|
+
rule+="
|
122
|
+
◇◇◇◇◇◇●
|
123
|
+
◇◇◇◇◇◇◎
|
124
|
+
渇"
|
125
|
+
end
|
126
|
+
#p rule
|
127
|
+
#p list
|
128
|
+
kekka=poetter(rule,list)
|
129
|
+
kekka+="\n##{inn[0]}"
|
130
|
+
return kekka
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#coding:utf-8
|
2
|
+
|
3
|
+
module Kansi_valid
|
4
|
+
module_function
|
5
|
+
#choise some random pick up,and left
|
6
|
+
# pick(["a","b","c"],2) # =>[["a","c"],["b"]]
|
7
|
+
# pick(["a","b","c"]) # => [["b"],["a","c"]] ##default=1
|
8
|
+
# x,y=pick(["a","b","c"]) # =>x=["b"],y=["a","c"]
|
9
|
+
#
|
10
|
+
# pick([]) # =>[[],[]]
|
11
|
+
#
|
12
|
+
#if String,it split(//),and return array
|
13
|
+
# pick("abc",2) # =>[["c","a"],["b"]]
|
14
|
+
def pick(array,n=1)
|
15
|
+
array=array.split(//) if array.class==String
|
16
|
+
|
17
|
+
x=[]
|
18
|
+
begin
|
19
|
+
n.times do
|
20
|
+
if array.size !=0
|
21
|
+
i=rand(array.size)
|
22
|
+
x << array[i]
|
23
|
+
array.delete_at(i)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
return x,array
|
27
|
+
rescue
|
28
|
+
return x,array
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
if $0==__FILE__
|
34
|
+
include Kansi_valid
|
35
|
+
x,y=pick([])
|
36
|
+
p pick([])
|
37
|
+
p x
|
38
|
+
p y
|
39
|
+
x,y=pick(["a","b","c"])
|
40
|
+
p x
|
41
|
+
p y
|
42
|
+
x,y=pick(["a","b","c"],2)
|
43
|
+
p x
|
44
|
+
p y
|
45
|
+
x,y=pick(["a","b","c"],-1)
|
46
|
+
p x
|
47
|
+
p y
|
48
|
+
x,y=pick(["a","b","c"],4)
|
49
|
+
p x
|
50
|
+
p y
|
51
|
+
x,y=pick(["a","b","c"],0)
|
52
|
+
p x
|
53
|
+
p y
|
54
|
+
x,y=pick("abc",2)
|
55
|
+
p x
|
56
|
+
p y
|
57
|
+
end
|