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