nysol-take 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/mbiclique.rb +317 -0
- data/bin/mbipolish.rb +362 -0
- data/bin/mccomp.rb +235 -0
- data/bin/mclique.rb +295 -0
- data/bin/mclique2g.rb +105 -0
- data/bin/mcliqueInfo.rb +203 -0
- data/bin/mfriends.rb +202 -0
- data/bin/mgdiff.rb +252 -0
- data/bin/mhifriend.rb +456 -0
- data/bin/mhipolish.rb +465 -0
- data/bin/mitemset.rb +168 -0
- data/bin/mpal.rb +410 -0
- data/bin/mpolishing.rb +399 -0
- data/bin/msequence.rb +165 -0
- data/bin/mtra2g.rb +476 -0
- data/bin/mtra2gc.rb +360 -0
- data/ext/grhfilrun/extconf.rb +12 -0
- data/ext/grhfilrun/grhfilrun.c +85 -0
- data/ext/grhfilrun/src/_sspc.c +358 -0
- data/ext/grhfilrun/src/aheap.c +545 -0
- data/ext/grhfilrun/src/aheap.h +251 -0
- data/ext/grhfilrun/src/base.c +92 -0
- data/ext/grhfilrun/src/base.h +59 -0
- data/ext/grhfilrun/src/fstar.c +497 -0
- data/ext/grhfilrun/src/fstar.h +80 -0
- data/ext/grhfilrun/src/grhfil.c +214 -0
- data/ext/grhfilrun/src/itemset.c +713 -0
- data/ext/grhfilrun/src/itemset.h +170 -0
- data/ext/grhfilrun/src/problem.c +415 -0
- data/ext/grhfilrun/src/problem.h +179 -0
- data/ext/grhfilrun/src/queue.c +533 -0
- data/ext/grhfilrun/src/queue.h +182 -0
- data/ext/grhfilrun/src/sample.c +19 -0
- data/ext/grhfilrun/src/sspc.c +597 -0
- data/ext/grhfilrun/src/sspc2.c +491 -0
- data/ext/grhfilrun/src/stdlib2.c +1482 -0
- data/ext/grhfilrun/src/stdlib2.h +892 -0
- data/ext/grhfilrun/src/trsact.c +817 -0
- data/ext/grhfilrun/src/trsact.h +160 -0
- data/ext/grhfilrun/src/vec.c +745 -0
- data/ext/grhfilrun/src/vec.h +172 -0
- data/ext/lcmrun/extconf.rb +20 -0
- data/ext/lcmrun/lcmrun.cpp +99 -0
- data/ext/lcmrun/src/aheap.c +216 -0
- data/ext/lcmrun/src/aheap.h +111 -0
- data/ext/lcmrun/src/base.c +92 -0
- data/ext/lcmrun/src/base.h +59 -0
- data/ext/lcmrun/src/itemset.c +496 -0
- data/ext/lcmrun/src/itemset.h +157 -0
- data/ext/lcmrun/src/lcm.c +427 -0
- data/ext/lcmrun/src/problem.c +349 -0
- data/ext/lcmrun/src/problem.h +177 -0
- data/ext/lcmrun/src/queue.c +528 -0
- data/ext/lcmrun/src/queue.h +176 -0
- data/ext/lcmrun/src/sgraph.c +359 -0
- data/ext/lcmrun/src/sgraph.h +173 -0
- data/ext/lcmrun/src/stdlib2.c +1282 -0
- data/ext/lcmrun/src/stdlib2.h +823 -0
- data/ext/lcmrun/src/trsact.c +747 -0
- data/ext/lcmrun/src/trsact.h +159 -0
- data/ext/lcmrun/src/vec.c +731 -0
- data/ext/lcmrun/src/vec.h +171 -0
- data/ext/lcmseq0run/extconf.rb +20 -0
- data/ext/lcmseq0run/lcmseq0run.cpp +59 -0
- data/ext/lcmseq0run/src/aheap.c +216 -0
- data/ext/lcmseq0run/src/aheap.h +111 -0
- data/ext/lcmseq0run/src/base.c +92 -0
- data/ext/lcmseq0run/src/base.h +59 -0
- data/ext/lcmseq0run/src/itemset.c +518 -0
- data/ext/lcmseq0run/src/itemset.h +157 -0
- data/ext/lcmseq0run/src/itemset_zero.c +522 -0
- data/ext/lcmseq0run/src/lcm_seq.c +446 -0
- data/ext/lcmseq0run/src/lcm_seq_zero.c +446 -0
- data/ext/lcmseq0run/src/problem.c +439 -0
- data/ext/lcmseq0run/src/problem.h +179 -0
- data/ext/lcmseq0run/src/problem_zero.c +439 -0
- data/ext/lcmseq0run/src/queue.c +533 -0
- data/ext/lcmseq0run/src/queue.h +182 -0
- data/ext/lcmseq0run/src/stdlib2.c +1350 -0
- data/ext/lcmseq0run/src/stdlib2.h +864 -0
- data/ext/lcmseq0run/src/trsact.c +747 -0
- data/ext/lcmseq0run/src/trsact.h +159 -0
- data/ext/lcmseq0run/src/vec.c +779 -0
- data/ext/lcmseq0run/src/vec.h +172 -0
- data/ext/lcmseqrun/extconf.rb +20 -0
- data/ext/lcmseqrun/lcmseqrun.cpp +101 -0
- data/ext/lcmseqrun/src/aheap.c +216 -0
- data/ext/lcmseqrun/src/aheap.h +111 -0
- data/ext/lcmseqrun/src/base.c +92 -0
- data/ext/lcmseqrun/src/base.h +59 -0
- data/ext/lcmseqrun/src/itemset.c +518 -0
- data/ext/lcmseqrun/src/itemset.h +157 -0
- data/ext/lcmseqrun/src/itemset_zero.c +522 -0
- data/ext/lcmseqrun/src/lcm_seq.c +447 -0
- data/ext/lcmseqrun/src/lcm_seq_zero.c +446 -0
- data/ext/lcmseqrun/src/problem.c +439 -0
- data/ext/lcmseqrun/src/problem.h +179 -0
- data/ext/lcmseqrun/src/problem_zero.c +439 -0
- data/ext/lcmseqrun/src/queue.c +533 -0
- data/ext/lcmseqrun/src/queue.h +182 -0
- data/ext/lcmseqrun/src/stdlib2.c +1350 -0
- data/ext/lcmseqrun/src/stdlib2.h +864 -0
- data/ext/lcmseqrun/src/trsact.c +747 -0
- data/ext/lcmseqrun/src/trsact.h +159 -0
- data/ext/lcmseqrun/src/vec.c +779 -0
- data/ext/lcmseqrun/src/vec.h +172 -0
- data/ext/lcmtransrun/extconf.rb +18 -0
- data/ext/lcmtransrun/lcmtransrun.cpp +264 -0
- data/ext/macerun/extconf.rb +20 -0
- data/ext/macerun/macerun.cpp +57 -0
- data/ext/macerun/src/aheap.c +217 -0
- data/ext/macerun/src/aheap.h +112 -0
- data/ext/macerun/src/itemset.c +491 -0
- data/ext/macerun/src/itemset.h +158 -0
- data/ext/macerun/src/mace.c +503 -0
- data/ext/macerun/src/problem.c +346 -0
- data/ext/macerun/src/problem.h +174 -0
- data/ext/macerun/src/queue.c +529 -0
- data/ext/macerun/src/queue.h +177 -0
- data/ext/macerun/src/sgraph.c +360 -0
- data/ext/macerun/src/sgraph.h +174 -0
- data/ext/macerun/src/stdlib2.c +993 -0
- data/ext/macerun/src/stdlib2.h +811 -0
- data/ext/macerun/src/vec.c +634 -0
- data/ext/macerun/src/vec.h +170 -0
- data/ext/sspcrun/extconf.rb +20 -0
- data/ext/sspcrun/src/_sspc.c +358 -0
- data/ext/sspcrun/src/aheap.c +545 -0
- data/ext/sspcrun/src/aheap.h +251 -0
- data/ext/sspcrun/src/base.c +92 -0
- data/ext/sspcrun/src/base.h +59 -0
- data/ext/sspcrun/src/fstar.c +496 -0
- data/ext/sspcrun/src/fstar.h +80 -0
- data/ext/sspcrun/src/grhfil.c +213 -0
- data/ext/sspcrun/src/itemset.c +713 -0
- data/ext/sspcrun/src/itemset.h +170 -0
- data/ext/sspcrun/src/problem.c +415 -0
- data/ext/sspcrun/src/problem.h +179 -0
- data/ext/sspcrun/src/queue.c +533 -0
- data/ext/sspcrun/src/queue.h +182 -0
- data/ext/sspcrun/src/sample.c +19 -0
- data/ext/sspcrun/src/sspc.c +598 -0
- data/ext/sspcrun/src/sspc2.c +491 -0
- data/ext/sspcrun/src/stdlib2.c +1482 -0
- data/ext/sspcrun/src/stdlib2.h +892 -0
- data/ext/sspcrun/src/trsact.c +817 -0
- data/ext/sspcrun/src/trsact.h +160 -0
- data/ext/sspcrun/src/vec.c +745 -0
- data/ext/sspcrun/src/vec.h +172 -0
- data/ext/sspcrun/sspcrun.cpp +54 -0
- data/lib/nysol/enumLcmEp.rb +338 -0
- data/lib/nysol/enumLcmEsp.rb +284 -0
- data/lib/nysol/enumLcmIs.rb +275 -0
- data/lib/nysol/enumLcmSeq.rb +143 -0
- data/lib/nysol/items.rb +201 -0
- data/lib/nysol/seqDB.rb +256 -0
- data/lib/nysol/take.rb +39 -0
- data/lib/nysol/taxonomy.rb +113 -0
- data/lib/nysol/traDB.rb +257 -0
- metadata +239 -0
data/bin/mpal.rb
ADDED
@@ -0,0 +1,410 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "nysol/mcmd"
|
6
|
+
|
7
|
+
# 1.0 initial development: 2016/12/23
|
8
|
+
# 1.1 dir=x追加: 2016/12/29
|
9
|
+
# 1.2 jac=等追加: 2017/1/10
|
10
|
+
# 1.3 ro=追加: 2017/1/15
|
11
|
+
$version="1.3"
|
12
|
+
|
13
|
+
def help
|
14
|
+
|
15
|
+
STDERR.puts <<EOF
|
16
|
+
----------------------------
|
17
|
+
#{$cmd} version #{$version}
|
18
|
+
----------------------------
|
19
|
+
概要) トランザクションデータから2アイテム相関ルールを求め、ランクに基づいた類似関係にある相関ルールを選択する
|
20
|
+
|
21
|
+
書式) #{$cmd} i= tid= item= [class=] [ro=] [no=] eo= s=|S= [filter=] [lb=] [ub=] [sim=] [rank=] [dir=] [-prune] [T=] [--help]
|
22
|
+
i= : トランザクションデータファイル【必須】
|
23
|
+
tid= : トランザクションID項目名【必須】
|
24
|
+
item= : アイテム項目名【必須】
|
25
|
+
ro= : 出力ルールファイル
|
26
|
+
no= : 出力ファイル(節点)
|
27
|
+
eo= : 出力ファイル(辺:節点ペア)
|
28
|
+
s= : 最小支持度(全トランザクション数に対する割合による指定): 0以上1以下の実数
|
29
|
+
S= : 最小支持度(トランザクション数による指定): 1以上の整数
|
30
|
+
filter=: 相関ルールの評価指標(省略可,複数指定可)
|
31
|
+
指定できる類似度は以下の4つ(括弧内は値域)。
|
32
|
+
J: Jaccard(0..1), P:normalized PMI(-1..0..1), C:Confidence(0..1)
|
33
|
+
lb= : filter=で指定した相関ルール評価指標の下限値
|
34
|
+
ub= : filter=で指定した相関ルール評価指標の上限値
|
35
|
+
lb=が省略された場合のデフォルトで0、ub=のデフォルトは1
|
36
|
+
例1: sim=P lb=0.5 : normalized PMIが0.5以上1以下の相関ルールを列挙する
|
37
|
+
例2: sim=P,C lb=0.5,0.2 ub=,0.8 : 例1に加えて、confidenceが0.2以上0.8以下の相関ルールを列挙する
|
38
|
+
|
39
|
+
sim= : 列挙された相関ルールを元にして枝を張る条件となる指標を指定する。
|
40
|
+
以下に示す4つの相関ルール評価指標が指定できる(デフォルト:S)。
|
41
|
+
S:Support, J: Jaccard, P:normalized PMI, C:Confidence
|
42
|
+
rank= : 枝を張る条件で、類似枝の上位何個までを選択するか(デフォルト:3)
|
43
|
+
dir= : 双方向類似関係(b)のみを出力するか、単方向類似関係(m)のみか、両方とも含める(x)かを指定する。(デフォルト:b)
|
44
|
+
相関ルールa=>bの類似度をsim(a=>b)としたとき、
|
45
|
+
b:(bi-directional) sim(a=>b)およびsim(b=>a)がrank=で指定した順位内である相関ルールのみ選択される。
|
46
|
+
m:(mono-directional) 片方向の類似度のみが、指定された順位内である相関ルールが選択される。
|
47
|
+
x:(both) bとmの両方共含める。
|
48
|
+
以上の3つのパラメータは複数指定することが可能(3つまで)。
|
49
|
+
例1: sim=S dir=b rank=3 :
|
50
|
+
アイテムaからみてsupport(a=>b)が3位以内で、かつ
|
51
|
+
アイテムbからみてsupport(b=>a)も3位以内であるような相関ルールを選択する
|
52
|
+
例2: sim=S,C dir=b,m rank=3,1
|
53
|
+
例1に加えて、アイテムaから見てconfidenc(a=>b)が3以内、もしくは
|
54
|
+
アイテムbから見てconfidenc(b=>a)が3以内であれば、そのような相関ルールも選択する
|
55
|
+
-prune : sim=等を複数指定した場合、マルチ枝を単一化する。
|
56
|
+
第1優先順位: 双方向>片方向
|
57
|
+
第2優先順位: パラメータ位置昇順
|
58
|
+
|
59
|
+
その他
|
60
|
+
T= : ワークディレクトリ(default:/tmp)
|
61
|
+
--help : ヘルプの表示
|
62
|
+
|
63
|
+
入力ファイル形式)
|
64
|
+
トランザクションIDとアイテムの2項目によるトランザクションデータ。
|
65
|
+
|
66
|
+
o=の出力形式)
|
67
|
+
枝ファイル: simType,simPriority,node1,node2,sim,dir,color
|
68
|
+
節点ファイル: node,support,frequency,total
|
69
|
+
|
70
|
+
例)
|
71
|
+
$ cat tra.csv
|
72
|
+
id,item
|
73
|
+
1,a
|
74
|
+
1,b
|
75
|
+
2,a
|
76
|
+
2,b
|
77
|
+
3,a
|
78
|
+
3,b
|
79
|
+
4,b
|
80
|
+
4,c
|
81
|
+
5,a
|
82
|
+
5,c
|
83
|
+
6,a
|
84
|
+
6,c
|
85
|
+
7,d
|
86
|
+
7,e
|
87
|
+
8,d
|
88
|
+
8,e
|
89
|
+
9,d
|
90
|
+
9,e
|
91
|
+
A,d
|
92
|
+
A,c
|
93
|
+
B,e
|
94
|
+
B,b
|
95
|
+
C,e
|
96
|
+
C,a
|
97
|
+
D,f
|
98
|
+
D,c
|
99
|
+
E,f
|
100
|
+
E,b
|
101
|
+
F,f
|
102
|
+
F,a
|
103
|
+
|
104
|
+
$ #{$cmd} i=tra1.csv no=node11.csv eo=edge11.csv tid=id S=1 item=item sim=S rank=1 dir=b
|
105
|
+
$ cat edge11.csv
|
106
|
+
simType,simPriority,node1,node2,sim,dir,color
|
107
|
+
support,0,a,e,0.2727272727,W,FF0000
|
108
|
+
support,0,d,e,0.2727272727,W,FF0000
|
109
|
+
support,0,c,f,0.1818181818,W,FF0000
|
110
|
+
support,0,g,h,0.1818181818,W,FF0000
|
111
|
+
|
112
|
+
$ #{$cmd} i=tra2.csv no=node51.csv eo=edge51.csv tid=id S=1 item=item sim=S,C rank=1,1 dir=b,m -prune
|
113
|
+
$ cat edge51.csv
|
114
|
+
simType,simPriority%3n,node1%0,node2%1,sim,dir%2r,color
|
115
|
+
support,0,a,b,0.2,W,FF0000
|
116
|
+
confidence,1,c,a,0.4,F,8888FF
|
117
|
+
support,0,d,e,0.2,W,FF0000
|
118
|
+
confidence,1,f,a,0.3333333333,F,8888FF
|
119
|
+
confidence,1,f,b,0.3333333333,F,8888FF
|
120
|
+
confidence,1,f,c,0.3333333333,F,8888FF
|
121
|
+
|
122
|
+
# Copyright(c) NYSOL 2012- All Rights Reserved.
|
123
|
+
EOF
|
124
|
+
exit
|
125
|
+
end
|
126
|
+
|
127
|
+
def ver()
|
128
|
+
STDERR.puts "version #{$version}"
|
129
|
+
exit
|
130
|
+
end
|
131
|
+
|
132
|
+
help() if ARGV.size <= 0 or ARGV[0]=="--help"
|
133
|
+
ver() if ARGV[0]=="--version"
|
134
|
+
|
135
|
+
args=MCMD::Margs.new(ARGV,"i=,tid=,item=,ro=,eo=,no=,s=,S=,filter=,lb=,ub=,sim=,dir=,rank=,-prune,-num,-verbose","i=,tid=,item=,eo=,no=")
|
136
|
+
|
137
|
+
# mcmdのメッセージは警告とエラーのみ
|
138
|
+
ENV["KG_VerboseLevel"]="2" unless args.bool("-mcmdenv")
|
139
|
+
|
140
|
+
#ワークファイルパス
|
141
|
+
if args.str("T=")!=nil then
|
142
|
+
ENV["KG_TmpPath"] = args.str("T=").sub(/\/$/,"")
|
143
|
+
end
|
144
|
+
iFile = args.str("i=")
|
145
|
+
idFN = args.str("tid=")
|
146
|
+
itemFN = args.str("item=")
|
147
|
+
sp1 = args.str("s=")
|
148
|
+
sp2 = args.str("S=")
|
149
|
+
#node_support=args.bool("-node_support")
|
150
|
+
numtp = args.bool("-num")
|
151
|
+
|
152
|
+
filter= args.str("filter=","",",")
|
153
|
+
ub = args.str("ub=" ,"",",")
|
154
|
+
lb = args.str("lb=" ,"",",")
|
155
|
+
|
156
|
+
sim = args.str("sim=" ,"S",",")
|
157
|
+
dir = args.str("dir=" ,"b",",")
|
158
|
+
rank = args.str("rank=","3",",")
|
159
|
+
prune = args.bool("-prune")
|
160
|
+
|
161
|
+
# chicking parameter for filter=
|
162
|
+
if filter.size>0
|
163
|
+
unless lb
|
164
|
+
MCMD::errorLog("lb= have to be set with filter=")
|
165
|
+
raise ArgumentError
|
166
|
+
end
|
167
|
+
|
168
|
+
(0...filter.size-1).each{|i|
|
169
|
+
(i...filter.size).each{|j|
|
170
|
+
next if i==j
|
171
|
+
if filter[i]==filter[j]
|
172
|
+
MCMD::errorLog("filter= cannot take same values")
|
173
|
+
raise ArgumentError
|
174
|
+
end
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
if filter.size>3
|
179
|
+
MCMD::errorLog("flter=,lb=,ub= takes parameters with 0<size<=3")
|
180
|
+
raise ArgumentError
|
181
|
+
end
|
182
|
+
|
183
|
+
filter.each{|s|
|
184
|
+
unless ["J","P","C"].index(s)
|
185
|
+
MCMD::errorLog("filter= takes J, P or C")
|
186
|
+
raise ArgumentError
|
187
|
+
end
|
188
|
+
}
|
189
|
+
|
190
|
+
filterStr=[]
|
191
|
+
(0...filter.size).each{|i|
|
192
|
+
if filter[i]=="J"
|
193
|
+
filterStr[i]="jaccard"
|
194
|
+
elsif filter[i]=="P"
|
195
|
+
filterStr[i]="PMI"
|
196
|
+
elsif filter[i]=="C"
|
197
|
+
filterStr[i]="confidence"
|
198
|
+
end
|
199
|
+
}
|
200
|
+
|
201
|
+
lbStr=[]
|
202
|
+
lbStr << (lb and lb[0]) ? lb[0]:0
|
203
|
+
lbStr << (lb and lb[1]) ? lb[1]:0
|
204
|
+
lbStr << (lb and lb[2]) ? lb[2]:0
|
205
|
+
|
206
|
+
ubStr=[]
|
207
|
+
ubStr << (ub and ub[0]) ? ub[0]:1
|
208
|
+
ubStr << (ub and ub[1]) ? ub[1]:1
|
209
|
+
ubStr << (ub and ub[2]) ? ub[2]:1
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
# chicking parameter for sim=
|
214
|
+
(0...sim.size-1).each{|i|
|
215
|
+
(i...sim.size).each{|j|
|
216
|
+
next if i==j
|
217
|
+
if sim[i]==sim[j]
|
218
|
+
MCMD::errorLog("sim= cannot take same values")
|
219
|
+
raise ArgumentError
|
220
|
+
end
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
if sim.size>3
|
225
|
+
MCMD::errorLog("sim=,dir=,rank= takes parameters with 0<size<=3")
|
226
|
+
raise ArgumentError
|
227
|
+
end
|
228
|
+
|
229
|
+
unless sim.size==dir.size and dir.size==rank.size
|
230
|
+
MCMD::errorLog("sim=,dir=,rank= must take same size of parameters")
|
231
|
+
raise ArgumentError
|
232
|
+
end
|
233
|
+
|
234
|
+
sim.each{|s|
|
235
|
+
unless ["S","J","P","C"].index(s)
|
236
|
+
MCMD::errorLog("sim= takes S, J, P or C")
|
237
|
+
raise ArgumentError
|
238
|
+
end
|
239
|
+
}
|
240
|
+
|
241
|
+
dir.each{|s|
|
242
|
+
unless ["b","m","x"].index(s)
|
243
|
+
MCMD::errorLog("dir= takes b, m, x")
|
244
|
+
raise ArgumentError
|
245
|
+
end
|
246
|
+
}
|
247
|
+
|
248
|
+
rank.each{|s|
|
249
|
+
if s.to_i<0
|
250
|
+
MCMD::errorLog("rank= takes positive integer")
|
251
|
+
raise ArgumentError
|
252
|
+
end
|
253
|
+
}
|
254
|
+
|
255
|
+
simStr=[]
|
256
|
+
(0...sim.size).each{|i|
|
257
|
+
if sim[i]=="S"
|
258
|
+
simStr[i]="support"
|
259
|
+
elsif sim[i]=="J"
|
260
|
+
simStr[i]="jaccard"
|
261
|
+
elsif sim[i]=="P"
|
262
|
+
simStr[i]="PMI"
|
263
|
+
elsif sim[i]=="C"
|
264
|
+
simStr[i]="confidence"
|
265
|
+
end
|
266
|
+
}
|
267
|
+
|
268
|
+
orFile = args. file("ro=", "w")
|
269
|
+
onFile = args. file("no=", "w")
|
270
|
+
oeFile = args. file("eo=", "w")
|
271
|
+
|
272
|
+
# ============
|
273
|
+
# entry point
|
274
|
+
temp=MCMD::Mtemp.new
|
275
|
+
xxsimgN=temp.file
|
276
|
+
xxsimgE0=temp.file
|
277
|
+
xxsimgE=temp.file
|
278
|
+
xxfriendE=temp.file
|
279
|
+
xxrecs2=temp.file
|
280
|
+
xxfriends=temp.file
|
281
|
+
xxw=temp.file
|
282
|
+
xxf=temp.file
|
283
|
+
xxff=temp.file
|
284
|
+
xxor=temp.file
|
285
|
+
|
286
|
+
### mtra2g.rb
|
287
|
+
param = "i=#{iFile}"
|
288
|
+
param << " tid=#{idFN}" if idFN
|
289
|
+
param << " item=#{itemFN}" if itemFN
|
290
|
+
param << " s=#{sp1}" if sp1
|
291
|
+
param << " S=#{sp2}" if sp2
|
292
|
+
|
293
|
+
#####################
|
294
|
+
# 異なる向きのconfidenceを列挙するためにsim=C th=0として双方向列挙しておく
|
295
|
+
# 出力データは倍になるが、mfriendsで-directedとすることで元が取れている
|
296
|
+
param << " sim=C"
|
297
|
+
param << " th=0"
|
298
|
+
#####################
|
299
|
+
param << " -node_support"
|
300
|
+
param << " -num" if numtp
|
301
|
+
system "mtra2gc.rb #{param} no=#{xxsimgN} eo=#{xxsimgE0}"
|
302
|
+
#puts "mtra2gc.rb #{param} no=#{xxsimgN} eo=#{xxsimgE}"
|
303
|
+
#system "cp #{xxsimgE} xxsimgE"
|
304
|
+
if filter.size>0
|
305
|
+
f=""
|
306
|
+
f << "mselnum f=#{filterStr[0]} c='[#{lb[0]},#{ubStr[0]}]' i=#{xxsimgE0} |"
|
307
|
+
f << "mselnum f=#{filterStr[1]} c='[#{lb[1]},#{ubStr[1]}]' |" if filterStr[1]
|
308
|
+
f << "mselnum f=#{filterStr[2]} c='[#{lb[2]},#{ubStr[2]}]' |" if filterStr[2]
|
309
|
+
f << "cat >#{xxsimgE}"
|
310
|
+
system(f)
|
311
|
+
else
|
312
|
+
system "mv #{xxsimgE0} #{xxsimgE}"
|
313
|
+
end
|
314
|
+
|
315
|
+
col=[
|
316
|
+
["FF000080","FF888880"],
|
317
|
+
["0000FF80","8888FF80"],
|
318
|
+
["00FF0080","88FF8880"]
|
319
|
+
]
|
320
|
+
|
321
|
+
# friendの結果dir
|
322
|
+
MCMD::mkDir(xxfriends,true)
|
323
|
+
(0...sim.size).each{|i|
|
324
|
+
param = "ei=#{xxsimgE}"
|
325
|
+
param << " ni=#{xxsimgN}"
|
326
|
+
param << " ef=node1,node2"
|
327
|
+
param << " nf=node"
|
328
|
+
param << " sim=#{simStr[i]}"
|
329
|
+
param << " -directed"
|
330
|
+
param << " dir=#{dir[i]}" if dir[i]
|
331
|
+
param << " rank=#{rank[i]}"
|
332
|
+
system "mfriends.rb #{param} eo=#{xxfriendE} no=#{xxfriends}/n_#{i}"
|
333
|
+
|
334
|
+
#system "msortf f=node1,node2,#{simStr[i]}%nr i=#{xxfriendE}"
|
335
|
+
|
336
|
+
# 双方向枝を統合するする
|
337
|
+
# 枝が2本=双方向枝を選択
|
338
|
+
f=""
|
339
|
+
f << "mfsort f=node1,node2 i=#{xxfriendE} |"
|
340
|
+
f << "msummary k=node1,node2 f=#{simStr[i]} c=count,mean |"
|
341
|
+
# node1%0,node2%1,fld,count,mean
|
342
|
+
# a,b,support,2,0.1818181818
|
343
|
+
# a,d,support,2,0.1818181818
|
344
|
+
f << "mselstr f=count v=2 o=#{xxrecs2}"
|
345
|
+
system(f)
|
346
|
+
#system "msortf f=node1,node2 i=#{xxrecs2}"
|
347
|
+
|
348
|
+
f=""
|
349
|
+
f << "mjoin k=node1,node2 K=node1,node2 m=#{xxrecs2} f=mean:s1 -n i=#{xxfriendE} |"
|
350
|
+
f << "mjoin k=node2,node1 K=node1,node2 m=#{xxrecs2} f=mean:s2 -n |"
|
351
|
+
# 1) xxrecs2でsimをjoinできない(s1,s2共にnull)ということは、それは片方向枝なので"F"をつける
|
352
|
+
# 2) 双方向枝a->b,b->aのうちa->bのみ(s1がnullでない)に"W"の印をつける。
|
353
|
+
# 3) それ以外の枝は"D"として削除
|
354
|
+
f << "mcal c='if(isnull($s{s1}),if(isnull($s{s2}),\"F\",\"D\"),\"W\")' a=dir |"
|
355
|
+
f << "mselstr f=dir v=D -r |"
|
356
|
+
f << "mcal c='if($s{dir}==\"W\",$s{s1},$s{#{simStr[i]}})' a=sim |"
|
357
|
+
f << "mchgstr f=dir:color c=W:#{col[i][0]},F:#{col[i][1]} -A |"
|
358
|
+
f << "msetstr v=#{simStr[i]},#{i} a=simType,simPriority |"
|
359
|
+
f << "mcut f=simType,simPriority,node1,node2,sim,dir,color o=#{xxfriends}/e_#{i}"
|
360
|
+
system(f)
|
361
|
+
# node1%1,node2%0,simType,sim,dir,color
|
362
|
+
# b,a,jaccard,0.3333333333,F,8888FF
|
363
|
+
# j,c,jaccard,0.3333333333,F,8888FF
|
364
|
+
# b,d,jaccard,0.3333333333,F,8888FF
|
365
|
+
# a,e,jaccard,0.5,W,0000FF
|
366
|
+
# d,e,jaccard,0.5,W,0000FF
|
367
|
+
}
|
368
|
+
|
369
|
+
# rule fileの出力
|
370
|
+
if orFile
|
371
|
+
system "mcat i=#{xxfriends}/e_* | muniq k=node1,node2 o=#{xxor}"
|
372
|
+
f=""
|
373
|
+
f << "mcommon k=node1,node2 m=#{xxor} i=#{xxsimgE} o=#{orFile}"
|
374
|
+
system(f)
|
375
|
+
end
|
376
|
+
|
377
|
+
# マルチ枝の単一化(W優先,パラメータ位置優先)
|
378
|
+
if prune
|
379
|
+
# 双方向と片方向に分割
|
380
|
+
f=""
|
381
|
+
f << "mcat i=#{xxfriends}/e_* |"
|
382
|
+
f << "mselstr f=dir v=W o=#{xxw} u=#{xxf}"
|
383
|
+
system(f)
|
384
|
+
#puts "----------xxw"
|
385
|
+
#system "cat #{xxw}"
|
386
|
+
#puts "----------xxf"
|
387
|
+
#system "cat #{xxf}"
|
388
|
+
# 片方向のみの枝を選択
|
389
|
+
f=""
|
390
|
+
f << "mcommon k=node1,node2 K=node1,node2 -r m=#{xxw} i=#{xxf} |"
|
391
|
+
f << "mcommon k=node1,node2 K=node2,node1 -r m=#{xxw} o=#{xxff}"
|
392
|
+
system(f)
|
393
|
+
#puts "----------xxff"
|
394
|
+
#system "cat #{xxff}"
|
395
|
+
|
396
|
+
# catして、双方向がダブってたら単一化する
|
397
|
+
f=""
|
398
|
+
f << "mcat i=#{xxw},#{xxff} |"
|
399
|
+
f << "mbest k=node1,node2 s=dir%r,simPriority%n o=#{oeFile}"
|
400
|
+
system(f)
|
401
|
+
else
|
402
|
+
system "mcat i=#{xxfriends}/e_* o=#{oeFile}"
|
403
|
+
end
|
404
|
+
system "mv #{xxfriends}/n_0 #{onFile}"
|
405
|
+
|
406
|
+
#system "m2gv.rb -noiso ni=#{onFile} nf=node nv=support ei=#{oeFile} ef=node1,node2 ed=dir ec=color ev=sim -d o=#{dotFile}"
|
407
|
+
|
408
|
+
# end message
|
409
|
+
MCMD::endLog(args.cmdline)
|
410
|
+
|