rubyfca 0.2.2 → 0.2.4
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/.gitignore +3 -19
- data/README.rdoc +4 -3
- data/Rakefile +56 -2
- data/VERSION +1 -0
- data/bin/rubyfca +12 -24
- data/lib/{rubyfca/ruby_graphviz.rb → ruby_graphviz.rb} +0 -3
- data/lib/rubyfca.rb +15 -85
- data/lib/{rubyfca/trollop.rb → trollop.rb} +1 -1
- data/rubyfca.gemspec +55 -13
- data/test/test_data.cxt +6 -6
- metadata +51 -36
- checksums.yaml +0 -7
- data/Gemfile +0 -4
- data/lib/rubyfca/version.rb +0 -3
- data/test/test_data.csv +0 -7
data/.gitignore
CHANGED
@@ -1,21 +1,5 @@
|
|
1
|
-
*.
|
2
|
-
|
3
|
-
.bundle
|
4
|
-
.config
|
5
|
-
.yardoc
|
6
|
-
Gemfile.lock
|
7
|
-
InstalledFiles
|
8
|
-
_yardoc
|
1
|
+
*.sw?
|
2
|
+
.DS_Store
|
9
3
|
coverage
|
10
|
-
doc/
|
11
|
-
lib/bundler/man
|
12
|
-
pkg
|
13
4
|
rdoc
|
14
|
-
|
15
|
-
test/tmp
|
16
|
-
test/version_tmp
|
17
|
-
tmp
|
18
|
-
.DS_Store
|
19
|
-
*.bak
|
20
|
-
*.~
|
21
|
-
*.log
|
5
|
+
pkg
|
data/README.rdoc
CHANGED
@@ -4,7 +4,7 @@ Command line tool for Formal Concept Analysis (FCA) written in Ruby.
|
|
4
4
|
|
5
5
|
== Features
|
6
6
|
|
7
|
-
* Convert a Conexp's CXT
|
7
|
+
* Convert a Conexp's CXT file and generate a Graphviz DOT file, or a PNG/JPG/EPS image file.
|
8
8
|
* Adopt the Ganter algorithm (through its Perl implementation of Fcastone by Uta Priss).
|
9
9
|
|
10
10
|
== Installation
|
@@ -19,7 +19,7 @@ Install the gem:
|
|
19
19
|
|
20
20
|
where:
|
21
21
|
<source file>
|
22
|
-
"foo.cxt"
|
22
|
+
"foo.cxt"
|
23
23
|
<output file>
|
24
24
|
"bar.dot", "bar.png", "bar.jpg", or "bar.eps"
|
25
25
|
[options]:
|
@@ -33,6 +33,7 @@ Install the gem:
|
|
33
33
|
|
34
34
|
== ToDo
|
35
35
|
|
36
|
+
* Multiple input formats (such as CSV)
|
36
37
|
* Database connection capability
|
37
38
|
|
38
39
|
== Links
|
@@ -41,4 +42,4 @@ under construction
|
|
41
42
|
|
42
43
|
== Copyright
|
43
44
|
|
44
|
-
Copyright (c) 2009
|
45
|
+
Copyright (c) 2009 Yoichiro Hasebe and Kow Kuroda. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -1,2 +1,56 @@
|
|
1
|
-
|
2
|
-
require
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "rubyfca"
|
8
|
+
gem.summary = %Q{TODO: one-line summary of your gem}
|
9
|
+
gem.description = %Q{TODO: longer description of your gem}
|
10
|
+
gem.email = "yohasebe@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/yohasebe/rubyfca"
|
12
|
+
gem.authors = ["Yoichiro Hasebe"]
|
13
|
+
gem.add_development_dependency "thoughtbot-shoulda"
|
14
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
+
end
|
16
|
+
rescue LoadError
|
17
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'rake/testtask'
|
21
|
+
Rake::TestTask.new(:test) do |test|
|
22
|
+
test.libs << 'lib' << 'test'
|
23
|
+
test.pattern = 'test/**/*_test.rb'
|
24
|
+
test.verbose = true
|
25
|
+
end
|
26
|
+
|
27
|
+
begin
|
28
|
+
require 'rcov/rcovtask'
|
29
|
+
Rcov::RcovTask.new do |test|
|
30
|
+
test.libs << 'test'
|
31
|
+
test.pattern = 'test/**/*_test.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
rescue LoadError
|
35
|
+
task :rcov do
|
36
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
task :test => :check_dependencies
|
41
|
+
|
42
|
+
task :default => :test
|
43
|
+
|
44
|
+
require 'rake/rdoctask'
|
45
|
+
Rake::RDocTask.new do |rdoc|
|
46
|
+
if File.exist?('VERSION')
|
47
|
+
version = File.read('VERSION')
|
48
|
+
else
|
49
|
+
version = ""
|
50
|
+
end
|
51
|
+
|
52
|
+
rdoc.rdoc_dir = 'rdoc'
|
53
|
+
rdoc.title = "rubyfca #{version}"
|
54
|
+
rdoc.rdoc_files.include('README*')
|
55
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.4
|
data/bin/rubyfca
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
|
-
Encoding.default_external = "UTF-8"
|
4
|
-
|
5
2
|
|
6
3
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
+
require 'trollop'
|
7
5
|
require 'rubyfca'
|
6
|
+
require 'ruby_graphviz'
|
8
7
|
|
9
8
|
################ parse options ##########
|
10
9
|
|
11
10
|
opts = Trollop::options do
|
12
|
-
version
|
11
|
+
version = File.read(File.dirname(__FILE__) + "/../VERSION")
|
13
12
|
banner <<-EOS
|
14
13
|
|
15
14
|
RubuFCA converts Conexp CXT data to Graphviz dot format.
|
@@ -19,24 +18,19 @@ Usage:
|
|
19
18
|
|
20
19
|
where:
|
21
20
|
<source file>
|
22
|
-
".cxt"
|
21
|
+
".cxt"
|
23
22
|
<output file>
|
24
23
|
."dot", ".png", ".jpg", or ".eps"
|
25
24
|
[options]:
|
26
25
|
EOS
|
27
26
|
|
27
|
+
opt :circle, "Use circle shaped concept nodes", :default=> false
|
28
28
|
opt :full, "Do not contract concept labels", :default=> false
|
29
|
-
opt :coloring, "Color concept nodes [0 = none (default), 1 = lightblue/pink, 2 = monochrome]", :default => 0
|
30
|
-
opt :straight, "Straighten edges (available when output format is either png, jpg, svg, pdf, or eps)", :default => false
|
31
|
-
opt :nodesep, "Size of separation between sister nodes (from 0.1 to 5.0)", :default => 0.4
|
32
|
-
opt :ranksep, "Size of separation between ranks (from 0.1 to 5.0)", :default => 0.2
|
33
29
|
opt :legend, "Print the legend of concept nodes (available only when using circle node shape)", :default => false
|
34
|
-
opt :
|
35
|
-
|
30
|
+
opt :coloring, "Color concept nodes", :default => false
|
31
|
+
opt :straight, "Straighten edges (available when output format is either png, jpg, or eps)", :default => false
|
36
32
|
end
|
37
|
-
|
38
|
-
Trollop::die :ranksep, "must be within 0.1 - 5.0" if (opts[:ranksep] < 0.1 || opts[:ranksep] > 5.0)
|
39
|
-
Trollop::die :nodesep, "must be within 0.1 - 5.0" if (opts[:nodesep] < 0.1 || opts[:nodesep] > 5.0)
|
33
|
+
|
40
34
|
############### main program ###############
|
41
35
|
|
42
36
|
if ARGV.size != 2
|
@@ -52,17 +46,15 @@ filename2 = ARGV[1] #output filename
|
|
52
46
|
input_type = filename1.slice(/\.[^\.]+\z/).split(//)[1..-1].join("")
|
53
47
|
output_type = filename2.slice(/\.[^\.]+\z/).split(//)[1..-1].join("")
|
54
48
|
|
55
|
-
if (input_type !~ /\A(cxt|csv)\z/ || output_type !~ /\A(dot|png|jpg|
|
49
|
+
if (input_type !~ /\A(cxt|csv)\z/ || output_type !~ /\A(dot|png|jpg|eps)\z/)
|
56
50
|
showerror("These file extensions are not (yet) supported.", 1)
|
57
51
|
end
|
58
52
|
|
59
53
|
#
|
60
|
-
# input data is kept as plain text
|
54
|
+
# input cxt data is kept as plain text
|
61
55
|
#
|
62
|
-
f = File.open(filename1, "r
|
63
|
-
|
56
|
+
f = File.open(filename1, "r")
|
64
57
|
inputdata = f.read
|
65
|
-
inputdata.gsub!(/\r\n?/){"\n"}
|
66
58
|
f.close
|
67
59
|
|
68
60
|
#
|
@@ -80,7 +72,7 @@ end
|
|
80
72
|
# context data is converted to a hash table
|
81
73
|
#
|
82
74
|
begin
|
83
|
-
ctxt = FormalContext.new(inputdata,
|
75
|
+
ctxt = FormalContext.new(inputdata, opts[:full])
|
84
76
|
ctxt.calcurate
|
85
77
|
# rescue => e
|
86
78
|
# puts e
|
@@ -99,10 +91,6 @@ when "png"
|
|
99
91
|
ctxt.generate_img(filename2, "png", opts)
|
100
92
|
when "jpg"
|
101
93
|
ctxt.generate_img(filename2, "jpg", opts)
|
102
|
-
when "svg"
|
103
|
-
ctxt.generate_img(filename2, "svg", opts)
|
104
|
-
when "pdf"
|
105
|
-
ctxt.generate_img(filename2, "pdf", opts)
|
106
94
|
when "eps"
|
107
95
|
ctxt.generate_img(filename2, "eps", opts)
|
108
96
|
end
|
data/lib/rubyfca.rb
CHANGED
@@ -1,18 +1,11 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# -*- coding: utf-8 -*-
|
3
|
-
|
4
1
|
## lib/rubyfca.rb -- Formal Concept Analysis tool in Ruby
|
5
2
|
## Author:: Yoichiro Hasebe (mailto: yohasebe@gmail.com)
|
6
3
|
## Kow Kuroda (mailto: kuroda@nict.go.jp)
|
7
4
|
## Copyright:: Copyright 2009 Yoichiro Hasebe and Kow Kuroda
|
8
5
|
## License:: GNU GPL version 3
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
require 'csv'
|
7
|
+
$KCODE ='utf-8'
|
13
8
|
require 'ruby_graphviz'
|
14
|
-
require 'version'
|
15
|
-
require 'trollop'
|
16
9
|
|
17
10
|
private
|
18
11
|
|
@@ -46,65 +39,22 @@ end
|
|
46
39
|
class FormalContext
|
47
40
|
|
48
41
|
## Converte cxt data to three basic structures of objects, attributes, and matrix
|
49
|
-
def initialize(input,
|
42
|
+
def initialize(input, label_contraction = true)
|
50
43
|
if input.size == 0
|
51
44
|
showerror("File is empty", 1)
|
52
45
|
end
|
53
|
-
input.gsub!(" ", " ")
|
54
|
-
# begin
|
55
|
-
case mode
|
56
|
-
when /cxt\z/
|
57
|
-
read_cxt(input)
|
58
|
-
when /csv\z/
|
59
|
-
read_csv(input)
|
60
|
-
end
|
61
|
-
# rescue => e
|
62
|
-
# showerror("Input data contains a syntax problem.", 1)
|
63
|
-
# end
|
64
|
-
@label_contraction = label_contraction
|
65
|
-
end
|
66
|
-
|
67
|
-
## process cxt data
|
68
|
-
def read_cxt(input)
|
69
46
|
lines = input.split
|
70
47
|
t1 = 3
|
71
48
|
if (lines[0] !~ /B/i || (2 * lines[1].to_i + lines[2].to_i + t1) != lines.size)
|
72
49
|
showerror("Wrong cxt format!", 1)
|
73
50
|
end
|
51
|
+
|
52
|
+
@label_contraction = label_contraction
|
53
|
+
|
74
54
|
@objects = lines[t1..(lines[1].to_i + t1 - 1)]
|
75
55
|
@attributes = lines[(lines[1].to_i + t1) .. (lines[1].to_i + lines[2].to_i + t1 - 1)]
|
76
56
|
lines = lines[(lines[1].to_i + lines[2].to_i + t1) .. lines.size]
|
77
|
-
@matrix = changecrosssymbol("X", "\\.", lines)
|
78
|
-
end
|
79
|
-
|
80
|
-
# process csv data using the standard csv library
|
81
|
-
def read_csv(input)
|
82
|
-
input = remove_blank(input)
|
83
|
-
data = CSV.parse(input)
|
84
|
-
@objects = trim_ary(data.transpose.first[1..-1])
|
85
|
-
@attributes = trim_ary(data.first[1..-1])
|
86
|
-
@matrix = []
|
87
|
-
data[1..-1].each do |line|
|
88
|
-
@matrix << line[1..-1].collect { |cell| /x/i =~ cell ? 1 : 0 }
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def remove_blank(input)
|
93
|
-
blank_removed = ""
|
94
|
-
input.split("\n").each do |line|
|
95
|
-
line = line.strip
|
96
|
-
unless /\A\s*\z/ =~ line
|
97
|
-
blank_removed << line + "\n"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
blank_removed
|
101
|
-
end
|
102
|
-
|
103
|
-
def trim_ary(ary)
|
104
|
-
newary = ary.collect do |cell|
|
105
|
-
cell.strip
|
106
|
-
end
|
107
|
-
newary
|
57
|
+
@matrix = changecrosssymbol("X", "\\.", lines)
|
108
58
|
end
|
109
59
|
|
110
60
|
## Apply a formal concept analysis on the matrix
|
@@ -201,8 +151,8 @@ class FormalContext
|
|
201
151
|
a1 = extension[0].join("")
|
202
152
|
a2 = extension[1].join("")
|
203
153
|
if a1 == a2
|
204
|
-
extension
|
205
|
-
intension
|
154
|
+
shift extension
|
155
|
+
shift intension
|
206
156
|
anzCpt -= 1
|
207
157
|
end
|
208
158
|
|
@@ -334,9 +284,8 @@ class FormalContext
|
|
334
284
|
## For options, see 'rubyfca'
|
335
285
|
def generate_dot(opts)
|
336
286
|
index_max_width = @concepts.size.to_s.split(//).size
|
337
|
-
|
338
|
-
|
339
|
-
clattice = RubyGraphviz.new("clattice", :rankdir => "", :nodesep => nodesep, :ranksep => ranksep)
|
287
|
+
|
288
|
+
clattice = RubyGraphviz.new("clattice", :rankdir => "", :nodesep => "0.4", :ranksep => "0.2")
|
340
289
|
|
341
290
|
if opts[:circle] and opts[:legend]
|
342
291
|
legend = RubyGraphviz.new("legend", :rankdir => "TB", :lebelloc => "t", :centered => "false")
|
@@ -360,9 +309,7 @@ class FormalContext
|
|
360
309
|
attrfull = []
|
361
310
|
0.upto(@gammaM.size - 1) do |j|
|
362
311
|
if @gammaM[j][i] == 2
|
363
|
-
|
364
|
-
# obj = opts[:full] ? @objects[j] + " " + [0x261C].pack("U") : @objects[j]
|
365
|
-
obj = opts[:full] ? @objects[j] + "*" : @objects[j]
|
312
|
+
obj = opts[:full] ? @objects[j] + " " + [0x261C].pack("U") : @objects[j]
|
366
313
|
objfull << obj
|
367
314
|
elsif @gammaM[j][i] == 1
|
368
315
|
objfull << @objects[j]
|
@@ -370,9 +317,7 @@ class FormalContext
|
|
370
317
|
end
|
371
318
|
0.upto(@muM.size - 1) do |k|
|
372
319
|
if @muM[k][i] == 2
|
373
|
-
|
374
|
-
# att = opts[:full] ? @attributes[k] + " " + [0x261C].pack("U") : @attributes[k]
|
375
|
-
att = opts[:full] ? @attributes[k] + "*" : @attributes[k]
|
320
|
+
att = opts[:full] ? @attributes[k] + " " + [0x261C].pack("U") : @attributes[k]
|
376
321
|
attrfull << att
|
377
322
|
elsif @muM[k][i] == 1
|
378
323
|
attrfull << @attributes[k]
|
@@ -383,25 +328,10 @@ class FormalContext
|
|
383
328
|
|
384
329
|
attr_str = attrfull.join('<br />')
|
385
330
|
attr_str = attr_str == "" ? " " : attr_str
|
386
|
-
|
387
|
-
if opts[:coloring] == 0 or /\A\s+\z/ =~ attr_str
|
388
|
-
attr_color = "white"
|
389
|
-
elsif opts[:coloring] == 1
|
390
|
-
attr_color = "lightblue"
|
391
|
-
elsif opts[:coloring] == 2
|
392
|
-
attr_color = "gray87"
|
393
|
-
end
|
394
|
-
|
331
|
+
attr_color = (!opts[:coloring] || /\A\s+\z/ =~ attr_str) ? "white" : "lightblue"
|
395
332
|
obj_str = objfull.join('<br />')
|
396
333
|
obj_str = obj_str == "" ? " " : obj_str
|
397
|
-
|
398
|
-
if opts[:coloring] == 0 or /\A\s+\z/ =~ obj_str
|
399
|
-
obj_color = "white"
|
400
|
-
elsif opts[:coloring] == 1
|
401
|
-
obj_color = "pink"
|
402
|
-
elsif opts[:coloring] == 2
|
403
|
-
obj_color = "gray92"
|
404
|
-
end
|
334
|
+
obj_color = (!opts[:coloring] || /\A\s+\z/ =~ obj_str) ? "white" : "pink"
|
405
335
|
|
406
336
|
label = "<<table border=\"0\" cellborder=\"1\" cellspacing=\"0\">" +
|
407
337
|
"<tr><td balign=\"left\" align=\"left\" bgcolor=\"#{attr_color}\">#{attr_str}</td></tr>" +
|
@@ -415,7 +345,7 @@ class FormalContext
|
|
415
345
|
"<tr><td balign=\"left\" align=\"left\" bgcolor=\"#{obj_color}\">#{obj_str}</td></tr>" +
|
416
346
|
"</table>>"
|
417
347
|
|
418
|
-
if !attrfull.empty?
|
348
|
+
if !attrfull.empty? and !objfull.empty?
|
419
349
|
legend.node("cl#{concept_id}k", :label => concept_id, :style => "invis")
|
420
350
|
legend.node("cl#{concept_id}v", :label => leg, :fillcolor => "white")
|
421
351
|
legend.rank("cl#{concept_id}k", "cl#{concept_id}v", :style => "invis", :length => "0.0")
|
@@ -413,7 +413,7 @@ class Parser
|
|
413
413
|
|
414
414
|
## Print the help message to +stream+.
|
415
415
|
def educate stream=$stdout
|
416
|
-
width # just
|
416
|
+
width # just calculate it now; otherwise we have to be careful not to
|
417
417
|
# call this unless the cursor's at the beginning of a line.
|
418
418
|
|
419
419
|
left = {}
|
data/rubyfca.gemspec
CHANGED
@@ -1,17 +1,59 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
|
-
require File.expand_path('../lib/rubyfca/version', __FILE__)
|
3
5
|
|
4
|
-
Gem::Specification.new do |
|
5
|
-
|
6
|
-
|
7
|
-
gem.summary = %q{Command line FCA tool written in Ruby}
|
8
|
-
gem.description = %q{Command line Formal Concept Analysis (FCA) tool written in Ruby}
|
9
|
-
gem.homepage = "http://github.com/yohasebe/rubyfca"
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{rubyfca}
|
8
|
+
s.version = "0.2.4"
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Yoichiro Hasebe", "Kow Kuroda"]
|
12
|
+
s.date = %q{2009-09-04}
|
13
|
+
s.default_executable = %q{rubyfca}
|
14
|
+
s.description = %q{Command line Formal Concept Ananlysis (FCA) tool written in Ruby}
|
15
|
+
s.email = %q{yohasebe@gmail.com}
|
16
|
+
s.executables = ["rubyfca"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.rdoc"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
".gitignore",
|
24
|
+
"LICENSE",
|
25
|
+
"README.rdoc",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"bin/rubyfca",
|
29
|
+
"lib/ruby_graphviz.rb",
|
30
|
+
"lib/rubyfca.rb",
|
31
|
+
"lib/trollop.rb",
|
32
|
+
"rubyfca.gemspec",
|
33
|
+
"test/rubyfca_test.rb",
|
34
|
+
"test/test_data.cxt",
|
35
|
+
"test/test_helper.rb"
|
36
|
+
]
|
37
|
+
s.homepage = %q{http://github.com/yohasebe/rubyfca}
|
38
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
39
|
+
s.require_paths = ["lib"]
|
40
|
+
s.rubygems_version = %q{1.3.5}
|
41
|
+
s.summary = %q{Command line Formal Concept Analysis (FCA) tool written in Ruby}
|
42
|
+
s.test_files = [
|
43
|
+
"test/rubyfca_test.rb",
|
44
|
+
"test/test_helper.rb"
|
45
|
+
]
|
46
|
+
|
47
|
+
if s.respond_to? :specification_version then
|
48
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
49
|
+
s.specification_version = 3
|
50
|
+
|
51
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
52
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
53
|
+
else
|
54
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
55
|
+
end
|
56
|
+
else
|
57
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
58
|
+
end
|
17
59
|
end
|
data/test/test_data.cxt
CHANGED
@@ -8,18 +8,18 @@ Sparrow
|
|
8
8
|
Eagle
|
9
9
|
Lion
|
10
10
|
Bonobo
|
11
|
-
Human
|
11
|
+
Human
|
12
12
|
bird
|
13
13
|
mammal
|
14
14
|
ape
|
15
15
|
flying
|
16
16
|
preying
|
17
17
|
talking
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
X.....
|
19
|
+
X..X..
|
20
|
+
X..XX.
|
21
|
+
.X..X.
|
21
22
|
.XX...
|
22
|
-
|
23
|
-
.....X
|
23
|
+
.XX..X
|
24
24
|
|
25
25
|
|
metadata
CHANGED
@@ -1,65 +1,80 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyfca
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Yoichiro Hasebe
|
8
8
|
- Kow Kuroda
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
-
|
17
|
-
|
12
|
+
|
13
|
+
date: 2009-09-04 00:00:00 +09:00
|
14
|
+
default_executable: rubyfca
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: thoughtbot-shoulda
|
18
|
+
type: :development
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
version:
|
26
|
+
description: Command line Formal Concept Ananlysis (FCA) tool written in Ruby
|
27
|
+
email: yohasebe@gmail.com
|
28
|
+
executables:
|
18
29
|
- rubyfca
|
19
30
|
extensions: []
|
20
|
-
|
21
|
-
|
22
|
-
-
|
23
|
-
-
|
24
|
-
|
31
|
+
|
32
|
+
extra_rdoc_files:
|
33
|
+
- LICENSE
|
34
|
+
- README.rdoc
|
35
|
+
files:
|
36
|
+
- .document
|
37
|
+
- .gitignore
|
25
38
|
- LICENSE
|
26
39
|
- README.rdoc
|
27
40
|
- Rakefile
|
41
|
+
- VERSION
|
28
42
|
- bin/rubyfca
|
43
|
+
- lib/ruby_graphviz.rb
|
29
44
|
- lib/rubyfca.rb
|
30
|
-
- lib/
|
31
|
-
- lib/rubyfca/trollop.rb
|
32
|
-
- lib/rubyfca/version.rb
|
45
|
+
- lib/trollop.rb
|
33
46
|
- rubyfca.gemspec
|
34
47
|
- test/rubyfca_test.rb
|
35
|
-
- test/test_data.csv
|
36
48
|
- test/test_data.cxt
|
37
49
|
- test/test_helper.rb
|
50
|
+
has_rdoc: true
|
38
51
|
homepage: http://github.com/yohasebe/rubyfca
|
39
52
|
licenses: []
|
40
|
-
|
53
|
+
|
41
54
|
post_install_message:
|
42
|
-
rdoc_options:
|
43
|
-
|
55
|
+
rdoc_options:
|
56
|
+
- --charset=UTF-8
|
57
|
+
require_paths:
|
44
58
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
47
61
|
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version:
|
50
|
-
|
51
|
-
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
52
67
|
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version:
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: "0"
|
70
|
+
version:
|
55
71
|
requirements: []
|
72
|
+
|
56
73
|
rubyforge_project:
|
57
|
-
rubygems_version:
|
74
|
+
rubygems_version: 1.3.5
|
58
75
|
signing_key:
|
59
|
-
specification_version:
|
60
|
-
summary: Command line FCA tool written in Ruby
|
61
|
-
test_files:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Command line Formal Concept Analysis (FCA) tool written in Ruby
|
78
|
+
test_files:
|
62
79
|
- test/rubyfca_test.rb
|
63
|
-
- test/test_data.csv
|
64
|
-
- test/test_data.cxt
|
65
80
|
- test/test_helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 1a7c7bc3a45c296b6a2a7447106284ff7cef7871
|
4
|
-
data.tar.gz: d5da0d7b0dffe7d8b33dd662133222bbe0720c10
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 99a30f945baf45ec345c9ed614b9de725a743784f09136434117db65d6e2a7bef10ccf3cd9131eb28d1d5364efa9bf8d464e9ff939bbe789ef81a0ea2b2b109f
|
7
|
-
data.tar.gz: 4642dbe52edc0c57d17f3d8401f8531a29b2019327180114d9d7e38a375d76f858d6801e359036151bc88cdffe7186a17ea55a84754d64b41919afa747c1adeb
|
data/Gemfile
DELETED
data/lib/rubyfca/version.rb
DELETED