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,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
|