svmlightcli 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +85 -0
- data/README.md +49 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/svm_classify +23 -0
- data/bin/svm_learn +23 -0
- data/ext/svmlightcli/Makefile +95 -0
- data/ext/svmlightcli/extconf.rb +33 -0
- data/ext/svmlightcli/kernel.h +40 -0
- data/ext/svmlightcli/svm_classify.c +197 -0
- data/ext/svmlightcli/svm_common.c +985 -0
- data/ext/svmlightcli/svm_common.h +301 -0
- data/ext/svmlightcli/svm_hideo.c +1062 -0
- data/ext/svmlightcli/svm_learn.c +4147 -0
- data/ext/svmlightcli/svm_learn.h +169 -0
- data/ext/svmlightcli/svm_learn_main.c +397 -0
- data/lib/svmlightcli.rb +6 -0
- data/lib/svmlightcli/version.rb +3 -0
- data/svmlightcli.gemspec +28 -0
- metadata +113 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 47812adeae8ac5a264485ac0c22d08925697641d
|
4
|
+
data.tar.gz: c1a90ced6c01a0516063697ecceb80a4e996f9dc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d544caeb924c3d364a12ca86ae5f51e73dd1877014f30bc4254692ef550cdb8afee8ab17ec05cbaf24def082ed41bd252d6a9a1133e3af43481ef45b33d380b8
|
7
|
+
data.tar.gz: 559b30f61f2ab3dfd8988ed5ab7ba86b58436b4b65d6174966f516307a2e7b16a5cd4bf74ca5859b643eb65811f01b689d4360afe99783fc7f20a73abafbc979
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
svmlightcli (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
rake (10.5.0)
|
10
|
+
rake-compiler (1.0.4)
|
11
|
+
rake
|
12
|
+
|
13
|
+
PLATFORMS
|
14
|
+
ruby
|
15
|
+
|
16
|
+
DEPENDENCIES
|
17
|
+
bundler (~> 1.14)
|
18
|
+
rake (~> 10.0)
|
19
|
+
rake-compiler
|
20
|
+
svmlightcli!
|
21
|
+
|
22
|
+
BUNDLED WITH
|
23
|
+
1.14.6
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 QCRI - Hossam Hammady
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
Original SVM-Light license:
|
26
|
+
|
27
|
+
SVM-Light
|
28
|
+
---------
|
29
|
+
|
30
|
+
Available at http://svmlight.joachims.org/
|
31
|
+
|
32
|
+
Author: Thorsten Joachims
|
33
|
+
thorsten@joachims.org
|
34
|
+
|
35
|
+
Cornell University
|
36
|
+
Department of Computer Science
|
37
|
+
4153 Upson Hall
|
38
|
+
Ithaca, NY 14853
|
39
|
+
USA
|
40
|
+
|
41
|
+
LICENSING TERMS
|
42
|
+
|
43
|
+
This program is granted free of charge for research and education
|
44
|
+
purposes. However you must obtain a license from the author to use it
|
45
|
+
for commercial purposes.
|
46
|
+
|
47
|
+
Scientific results produced using the software provided shall
|
48
|
+
acknowledge the use of SVM-Light. Please cite as
|
49
|
+
|
50
|
+
T. Joachims, Making large-Scale SVM Learning
|
51
|
+
Practical. Advances in Kernel Methods - Support Vector
|
52
|
+
Learning, B. Schölkopf and C. Burges and A. Smola (ed.),
|
53
|
+
MIT-Press, 1999.
|
54
|
+
http://www-ai.cs.uni-dortmund.de/DOKUMENTE/joachims_99a.pdf
|
55
|
+
|
56
|
+
Moreover shall the author of SVM-Light be informed about the
|
57
|
+
publication.
|
58
|
+
|
59
|
+
The software must not be modified and distributed without prior
|
60
|
+
permission of the author.
|
61
|
+
|
62
|
+
By using SVM-Light you agree to the licensing terms.
|
63
|
+
|
64
|
+
|
65
|
+
NO WARRANTY
|
66
|
+
|
67
|
+
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
68
|
+
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
|
69
|
+
WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
|
70
|
+
PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
|
71
|
+
EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
72
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
73
|
+
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
74
|
+
PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
|
75
|
+
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
76
|
+
|
77
|
+
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
78
|
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
79
|
+
REDISTRIBUTE THE PROGRAM, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
80
|
+
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
|
81
|
+
THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
|
82
|
+
LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
83
|
+
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
|
84
|
+
OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED
|
85
|
+
OF THE POSSIBILITY OF SUCH DAMAGES.
|
data/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# svmlightcli
|
2
|
+
|
3
|
+
This is a convenience gem wrapper for the [svm_light](http://svmlight.joachims.org/)
|
4
|
+
command line binaries. No Ruby interfaces.
|
5
|
+
After installation, it offers 2 binaries in the path: `svm_learn` and `svm_classify`.
|
6
|
+
In other words, it is something like:
|
7
|
+
`brew install svm_light` or `apt-get install svm_light`
|
8
|
+
(which do not exist), but using the RubyGems way.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'svmlightcli'
|
16
|
+
```
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
Or install it yourself as:
|
23
|
+
|
24
|
+
$ gem install svmlightcli
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
Use the binaries the same exact way you use them when compiling from source:
|
29
|
+
|
30
|
+
$ svm_learn ...
|
31
|
+
|
32
|
+
$ svm_classify ...
|
33
|
+
|
34
|
+
## Development
|
35
|
+
|
36
|
+
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
37
|
+
|
38
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
39
|
+
|
40
|
+
## Contributing
|
41
|
+
|
42
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/hammady/svmlightcli.
|
43
|
+
|
44
|
+
|
45
|
+
## License
|
46
|
+
|
47
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
48
|
+
The original license of the svm_light author is also maintained in [LICENSE.txt](https://github.com/hammady/svmlightcli/blob/master/LICENSE.txt).
|
49
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "svmlightcli"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/bin/svm_classify
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This is copied from the generated RubyGems bin stub
|
4
|
+
# It basically runs a specified version of the gem if given
|
5
|
+
|
6
|
+
version = ">= 0.a"
|
7
|
+
|
8
|
+
if ARGV.first
|
9
|
+
str = ARGV.first
|
10
|
+
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
11
|
+
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
12
|
+
version = $1
|
13
|
+
ARGV.shift
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
gem 'svmlightcli', version
|
18
|
+
|
19
|
+
# Now we don't want to just load the ruby bin file, we want to execute it
|
20
|
+
# The reason is that it may not be necessarily a ruby file, could be native
|
21
|
+
system(Gem.bin_path('svmlightcli', 'svm_classify_native', version))
|
22
|
+
# Capture the exit status of the binary and exit with the same
|
23
|
+
exit($?.exitstatus)
|
data/bin/svm_learn
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This is copied from the generated RubyGems bin stub
|
4
|
+
# It basically runs a specified version of the gem if given
|
5
|
+
|
6
|
+
version = ">= 0.a"
|
7
|
+
|
8
|
+
if ARGV.first
|
9
|
+
str = ARGV.first
|
10
|
+
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
11
|
+
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
12
|
+
version = $1
|
13
|
+
ARGV.shift
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
gem 'svmlightcli', version
|
18
|
+
|
19
|
+
# Now we don't want to just load the ruby bin file, we want to execute it
|
20
|
+
# The reason is that it may not be necessarily a ruby file, could be native
|
21
|
+
system(Gem.bin_path('svmlightcli', 'svm_learn_native', version))
|
22
|
+
# Capture the exit status of the binary and exit with the same
|
23
|
+
exit($?.exitstatus)
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#
|
2
|
+
# makefile for svm_light
|
3
|
+
#
|
4
|
+
# Thorsten Joachims, 2002
|
5
|
+
#
|
6
|
+
|
7
|
+
#Use the following to compile under unix or cygwin
|
8
|
+
CC = gcc
|
9
|
+
LD = gcc
|
10
|
+
|
11
|
+
#Uncomment the following line to make CYGWIN produce stand-alone Windows executables
|
12
|
+
#SFLAGS= -mno-cygwin
|
13
|
+
|
14
|
+
#CFLAGS= $(SFLAGS) -ggdb3 -O0 -pg -Wall -pedantic # release C-Compiler flags
|
15
|
+
CFLAGS= $(SFLAGS) -O3 # release C-Compiler flags
|
16
|
+
#LFLAGS= $(SFLAGS) -O0 -pg # release linker flags
|
17
|
+
LFLAGS= $(SFLAGS) -O3 # release linker flags
|
18
|
+
#CFLAGS= $(SFLAGS) -pg -Wall -pedantic # debugging C-Compiler flags
|
19
|
+
#LFLAGS= $(SFLAGS) -pg # debugging linker flags
|
20
|
+
LIBS=-L. -lm #-lsvmlight # used libraries
|
21
|
+
SRC_DIR=.
|
22
|
+
BIN_DIR=../../bin
|
23
|
+
|
24
|
+
all: svm_learn_hideo svm_classify
|
25
|
+
|
26
|
+
tidy:
|
27
|
+
rm -f ./*.o
|
28
|
+
|
29
|
+
clean: tidy
|
30
|
+
rm -f ./svm_learn
|
31
|
+
rm -f ./svm_classify
|
32
|
+
rm -f ./libsvmlight.so
|
33
|
+
|
34
|
+
help: info
|
35
|
+
|
36
|
+
info:
|
37
|
+
@echo
|
38
|
+
@echo "make for SVM-light Thorsten Joachims, 1998"
|
39
|
+
@echo
|
40
|
+
@echo "Thanks to Ralf Herbrich for the initial version."
|
41
|
+
@echo
|
42
|
+
@echo "USAGE: make [svm_learn | svm_learn_loqo | svm_learn_hideo | "
|
43
|
+
@echo " libsvmlight_hideo | libsvmlight_loqo | "
|
44
|
+
@echo " svm_classify | all | clean | tidy]"
|
45
|
+
@echo
|
46
|
+
@echo " svm_learn builds the learning module (prefers HIDEO)"
|
47
|
+
@echo " svm_learn_hideo builds the learning module using HIDEO optimizer"
|
48
|
+
@echo " svm_classify builds the classfication module"
|
49
|
+
@echo " libsvmlight_hideo builds shared object library that can be linked into"
|
50
|
+
@echo " other code using HIDEO"
|
51
|
+
@echo " all (default) builds svm_learn + svm_classify"
|
52
|
+
@echo " clean removes .o and target files"
|
53
|
+
@echo " tidy removes .o files"
|
54
|
+
@echo
|
55
|
+
|
56
|
+
# Create executables svm_learn and svm_classify
|
57
|
+
|
58
|
+
svm_learn_hideo: svm_learn_main.o svm_learn.o svm_common.o svm_hideo.o
|
59
|
+
$(LD) $(LFLAGS) svm_learn_main.o svm_learn.o svm_common.o svm_hideo.o -o svm_learn $(LIBS)
|
60
|
+
|
61
|
+
svm_classify: svm_classify.o svm_common.o
|
62
|
+
$(LD) $(LFLAGS) svm_classify.o svm_common.o -o svm_classify $(LIBS)
|
63
|
+
|
64
|
+
|
65
|
+
# Create library libsvmlight.so, so that external code can get access to the
|
66
|
+
# learning and classification functions of svm-light by linking this library.
|
67
|
+
|
68
|
+
svm_learn_hideo_noexe: svm_learn_main.o svm_learn.o svm_common.o svm_hideo.o
|
69
|
+
|
70
|
+
libsvmlight_hideo: svm_learn_main.o svm_learn.o svm_common.o svm_hideo.o
|
71
|
+
$(LD) -shared svm_learn.o svm_common.o svm_hideo.o -o libsvmlight.so
|
72
|
+
|
73
|
+
#svm_learn_loqo_noexe: svm_learn_main.o svm_learn.o svm_common.o svm_loqo.o loqo
|
74
|
+
|
75
|
+
# Compile components
|
76
|
+
|
77
|
+
svm_hideo.o: $(SRC_DIR)/svm_hideo.c
|
78
|
+
$(CC) -c $(CFLAGS) $(SRC_DIR)/svm_hideo.c -o svm_hideo.o
|
79
|
+
|
80
|
+
svm_common.o: $(SRC_DIR)/svm_common.c $(SRC_DIR)/svm_common.h $(SRC_DIR)/kernel.h
|
81
|
+
$(CC) -c $(CFLAGS) $(SRC_DIR)/svm_common.c -o svm_common.o
|
82
|
+
|
83
|
+
svm_learn.o: $(SRC_DIR)/svm_learn.c $(SRC_DIR)/svm_common.h
|
84
|
+
$(CC) -c $(CFLAGS) $(SRC_DIR)/svm_learn.c -o svm_learn.o
|
85
|
+
|
86
|
+
svm_learn_main.o: $(SRC_DIR)/svm_learn_main.c $(SRC_DIR)/svm_learn.h $(SRC_DIR)/svm_common.h
|
87
|
+
$(CC) -c $(CFLAGS) $(SRC_DIR)/svm_learn_main.c -o svm_learn_main.o
|
88
|
+
|
89
|
+
svm_classify.o: $(SRC_DIR)/svm_classify.c $(SRC_DIR)/svm_common.h $(SRC_DIR)/kernel.h
|
90
|
+
$(CC) -c $(CFLAGS) $(SRC_DIR)/svm_classify.c -o svm_classify.o
|
91
|
+
|
92
|
+
install: svm_learn_hideo svm_classify
|
93
|
+
cp svm_learn $(BIN_DIR)/svm_learn_native
|
94
|
+
cp svm_classify $(BIN_DIR)/svm_classify_native
|
95
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "mkmf"
|
2
|
+
|
3
|
+
# The $makefile_created and fake library are taken from:
|
4
|
+
# https://yorickpeterse.com/articles/hacking-extconf-rb/
|
5
|
+
|
6
|
+
# copy Makefile which is beside this file to current working directory
|
7
|
+
# this is only needed in the Makefile preparation phase
|
8
|
+
# later on, when installing the gem using gem or bundle
|
9
|
+
# Makefile is used from the ext/svmlightcli directory
|
10
|
+
begin
|
11
|
+
makefile = File.expand_path('../Makefile', __FILE__)
|
12
|
+
FileUtils.cp(makefile, '.')
|
13
|
+
# replace SRC_DIR in the copied Makefile with the correct path
|
14
|
+
src_dir = File.dirname __FILE__
|
15
|
+
new_contents = File.read('Makefile').sub("SRC_DIR=.", "SRC_DIR=#{src_dir}")
|
16
|
+
File.write('Makefile', new_contents)
|
17
|
+
rescue Exception => e
|
18
|
+
# in the installation phase, cp will complain from copying to same dir
|
19
|
+
end
|
20
|
+
|
21
|
+
# This is normally set by calling create_makefile() but we don't need that
|
22
|
+
# method since we'll provide a dummy Makefile. Without setting this value
|
23
|
+
# RubyGems will abort the installation.
|
24
|
+
$makefile_created = true
|
25
|
+
|
26
|
+
# Create a dummy extension file. Without this RubyGems would abort the
|
27
|
+
# installation process. On Linux this would result in the file "svmlightcli.so"
|
28
|
+
# being created in the current working directory.
|
29
|
+
#
|
30
|
+
# Normally the generated Makefile would take care of this but since we
|
31
|
+
# don't generate one we'll have to do this manually.
|
32
|
+
#
|
33
|
+
File.write("svmlightcli.#{RbConfig::CONFIG['DLEXT']}", '')
|
@@ -0,0 +1,40 @@
|
|
1
|
+
/************************************************************************/
|
2
|
+
/* */
|
3
|
+
/* kernel.h */
|
4
|
+
/* */
|
5
|
+
/* User defined kernel function. Feel free to plug in your own. */
|
6
|
+
/* */
|
7
|
+
/* Copyright: Thorsten Joachims */
|
8
|
+
/* Date: 16.12.97 */
|
9
|
+
/* */
|
10
|
+
/************************************************************************/
|
11
|
+
|
12
|
+
/* KERNEL_PARM is defined in svm_common.h The field 'custom' is reserved for */
|
13
|
+
/* parameters of the user defined kernel. You can also access and use */
|
14
|
+
/* the parameters of the other kernels. Just replace the line
|
15
|
+
return((double)(1.0));
|
16
|
+
with your own kernel. */
|
17
|
+
|
18
|
+
/* Example: The following computes the polynomial kernel. sprod_ss
|
19
|
+
computes the inner product between two sparse vectors.
|
20
|
+
|
21
|
+
return((CFLOAT)pow(kernel_parm->coef_lin*sprod_ss(a->words,b->words)
|
22
|
+
+kernel_parm->coef_const,(double)kernel_parm->poly_degree));
|
23
|
+
*/
|
24
|
+
|
25
|
+
/* If you are implementing a kernel that is not based on a
|
26
|
+
feature/value representation, you might want to make use of the
|
27
|
+
field "userdefined" in SVECTOR. By default, this field will contain
|
28
|
+
whatever string you put behind a # sign in the example file. So, if
|
29
|
+
a line in your training file looks like
|
30
|
+
|
31
|
+
-1 1:3 5:6 #abcdefg
|
32
|
+
|
33
|
+
then the SVECTOR field "words" will contain the vector 1:3 5:6, and
|
34
|
+
"userdefined" will contain the string "abcdefg". */
|
35
|
+
|
36
|
+
double custom_kernel(KERNEL_PARM *kernel_parm, SVECTOR *a, SVECTOR *b)
|
37
|
+
/* plug in you favorite kernel */
|
38
|
+
{
|
39
|
+
return((double)(1.0));
|
40
|
+
}
|