opener-opinion-detector-basic 1.0.0
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.
- checksums.yaml +7 -0
- data/README.md +30 -0
- data/bin/opinion-detector-basic +19 -0
- data/bin/opinion-detector-basic-server +10 -0
- data/config.ru +4 -0
- data/core/opinion_detector_basic_multi.py +499 -0
- data/core/packages/KafNafParser-1.3.tar.gz +0 -0
- data/core/packages/VUA_pylib-1.4.tar.gz +0 -0
- data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/PKG-INFO +10 -0
- data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/SOURCES.txt +7 -0
- data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/dependency_links.txt +1 -0
- data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/installed-files.txt +11 -0
- data/core/site-packages/pre_build/VUKafParserPy-1.0-py2.7.egg-info/top_level.txt +1 -0
- data/core/site-packages/pre_build/VUKafParserPy/KafDataObjectsMod.py +165 -0
- data/core/site-packages/pre_build/VUKafParserPy/KafDataObjectsMod.pyc +0 -0
- data/core/site-packages/pre_build/VUKafParserPy/KafParserMod.py +439 -0
- data/core/site-packages/pre_build/VUKafParserPy/KafParserMod.pyc +0 -0
- data/core/site-packages/pre_build/VUKafParserPy/__init__.py +7 -0
- data/core/site-packages/pre_build/VUKafParserPy/__init__.pyc +0 -0
- data/core/vendor/src/crfsuite/AUTHORS +1 -0
- data/core/vendor/src/crfsuite/COPYING +27 -0
- data/core/vendor/src/crfsuite/ChangeLog +103 -0
- data/core/vendor/src/crfsuite/INSTALL +236 -0
- data/core/vendor/src/crfsuite/Makefile.am +19 -0
- data/core/vendor/src/crfsuite/Makefile.in +783 -0
- data/core/vendor/src/crfsuite/README +183 -0
- data/core/vendor/src/crfsuite/aclocal.m4 +9018 -0
- data/core/vendor/src/crfsuite/autogen.sh +38 -0
- data/core/vendor/src/crfsuite/compile +143 -0
- data/core/vendor/src/crfsuite/config.guess +1502 -0
- data/core/vendor/src/crfsuite/config.h.in +198 -0
- data/core/vendor/src/crfsuite/config.sub +1714 -0
- data/core/vendor/src/crfsuite/configure +14273 -0
- data/core/vendor/src/crfsuite/configure.in +149 -0
- data/core/vendor/src/crfsuite/crfsuite.sln +42 -0
- data/core/vendor/src/crfsuite/depcomp +630 -0
- data/core/vendor/src/crfsuite/example/chunking.py +49 -0
- data/core/vendor/src/crfsuite/example/crfutils.py +179 -0
- data/core/vendor/src/crfsuite/example/ner.py +270 -0
- data/core/vendor/src/crfsuite/example/pos.py +78 -0
- data/core/vendor/src/crfsuite/example/template.py +88 -0
- data/core/vendor/src/crfsuite/frontend/Makefile.am +29 -0
- data/core/vendor/src/crfsuite/frontend/Makefile.in +640 -0
- data/core/vendor/src/crfsuite/frontend/dump.c +116 -0
- data/core/vendor/src/crfsuite/frontend/frontend.vcxproj +129 -0
- data/core/vendor/src/crfsuite/frontend/iwa.c +273 -0
- data/core/vendor/src/crfsuite/frontend/iwa.h +65 -0
- data/core/vendor/src/crfsuite/frontend/learn.c +439 -0
- data/core/vendor/src/crfsuite/frontend/main.c +137 -0
- data/core/vendor/src/crfsuite/frontend/option.c +93 -0
- data/core/vendor/src/crfsuite/frontend/option.h +86 -0
- data/core/vendor/src/crfsuite/frontend/readdata.h +38 -0
- data/core/vendor/src/crfsuite/frontend/reader.c +136 -0
- data/core/vendor/src/crfsuite/frontend/tag.c +427 -0
- data/core/vendor/src/crfsuite/genbinary.sh.in +15 -0
- data/core/vendor/src/crfsuite/include/Makefile.am +11 -0
- data/core/vendor/src/crfsuite/include/Makefile.in +461 -0
- data/core/vendor/src/crfsuite/include/crfsuite.h +1063 -0
- data/core/vendor/src/crfsuite/include/crfsuite.hpp +555 -0
- data/core/vendor/src/crfsuite/include/crfsuite_api.hpp +400 -0
- data/core/vendor/src/crfsuite/include/os.h +61 -0
- data/core/vendor/src/crfsuite/install-sh +520 -0
- data/core/vendor/src/crfsuite/lib/cqdb/COPYING +28 -0
- data/core/vendor/src/crfsuite/lib/cqdb/Makefile.am +21 -0
- data/core/vendor/src/crfsuite/lib/cqdb/Makefile.in +549 -0
- data/core/vendor/src/crfsuite/lib/cqdb/cqdb.vcxproj +86 -0
- data/core/vendor/src/crfsuite/lib/cqdb/include/cqdb.h +524 -0
- data/core/vendor/src/crfsuite/lib/cqdb/src/cqdb.c +587 -0
- data/core/vendor/src/crfsuite/lib/cqdb/src/lookup3.c +976 -0
- data/core/vendor/src/crfsuite/lib/crf/Makefile.am +46 -0
- data/core/vendor/src/crfsuite/lib/crf/Makefile.in +721 -0
- data/core/vendor/src/crfsuite/lib/crf/crf.vcxproj +216 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crf1d.h +353 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crf1d_context.c +705 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crf1d_encode.c +943 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crf1d_feature.c +352 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crf1d_model.c +994 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crf1d_tag.c +550 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crfsuite.c +492 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crfsuite_internal.h +236 -0
- data/core/vendor/src/crfsuite/lib/crf/src/crfsuite_train.c +272 -0
- data/core/vendor/src/crfsuite/lib/crf/src/dataset.c +106 -0
- data/core/vendor/src/crfsuite/lib/crf/src/dictionary.c +118 -0
- data/core/vendor/src/crfsuite/lib/crf/src/holdout.c +80 -0
- data/core/vendor/src/crfsuite/lib/crf/src/logging.c +91 -0
- data/core/vendor/src/crfsuite/lib/crf/src/logging.h +48 -0
- data/core/vendor/src/crfsuite/lib/crf/src/params.c +335 -0
- data/core/vendor/src/crfsuite/lib/crf/src/params.h +80 -0
- data/core/vendor/src/crfsuite/lib/crf/src/quark.c +172 -0
- data/core/vendor/src/crfsuite/lib/crf/src/quark.h +46 -0
- data/core/vendor/src/crfsuite/lib/crf/src/rumavl.c +1107 -0
- data/core/vendor/src/crfsuite/lib/crf/src/rumavl.h +160 -0
- data/core/vendor/src/crfsuite/lib/crf/src/train_arow.c +408 -0
- data/core/vendor/src/crfsuite/lib/crf/src/train_averaged_perceptron.c +242 -0
- data/core/vendor/src/crfsuite/lib/crf/src/train_l2sgd.c +507 -0
- data/core/vendor/src/crfsuite/lib/crf/src/train_lbfgs.c +338 -0
- data/core/vendor/src/crfsuite/lib/crf/src/train_passive_aggressive.c +435 -0
- data/core/vendor/src/crfsuite/lib/crf/src/vecmath.h +341 -0
- data/core/vendor/src/crfsuite/ltmain.sh +8413 -0
- data/core/vendor/src/crfsuite/missing +376 -0
- data/core/vendor/src/crfsuite/swig/Makefile.am +13 -0
- data/core/vendor/src/crfsuite/swig/Makefile.in +365 -0
- data/core/vendor/src/crfsuite/swig/crfsuite.cpp +2 -0
- data/core/vendor/src/crfsuite/swig/export.i +32 -0
- data/core/vendor/src/crfsuite/swig/python/README +92 -0
- data/core/vendor/src/crfsuite/swig/python/crfsuite.py +329 -0
- data/core/vendor/src/crfsuite/swig/python/export_wrap.cpp +14355 -0
- data/core/vendor/src/crfsuite/swig/python/export_wrap.h +63 -0
- data/core/vendor/src/crfsuite/swig/python/prepare.sh +9 -0
- data/core/vendor/src/crfsuite/swig/python/sample_tag.py +52 -0
- data/core/vendor/src/crfsuite/swig/python/sample_train.py +68 -0
- data/core/vendor/src/crfsuite/swig/python/setup.py +44 -0
- data/core/vendor/src/crfsuite/win32/stdint.h +679 -0
- data/core/vendor/src/liblbfgs/AUTHORS +1 -0
- data/core/vendor/src/liblbfgs/COPYING +22 -0
- data/core/vendor/src/liblbfgs/ChangeLog +120 -0
- data/core/vendor/src/liblbfgs/INSTALL +231 -0
- data/core/vendor/src/liblbfgs/Makefile.am +10 -0
- data/core/vendor/src/liblbfgs/Makefile.in +638 -0
- data/core/vendor/src/liblbfgs/NEWS +0 -0
- data/core/vendor/src/liblbfgs/README +71 -0
- data/core/vendor/src/liblbfgs/aclocal.m4 +6985 -0
- data/core/vendor/src/liblbfgs/autogen.sh +38 -0
- data/core/vendor/src/liblbfgs/config.guess +1411 -0
- data/core/vendor/src/liblbfgs/config.h.in +64 -0
- data/core/vendor/src/liblbfgs/config.sub +1500 -0
- data/core/vendor/src/liblbfgs/configure +21146 -0
- data/core/vendor/src/liblbfgs/configure.in +107 -0
- data/core/vendor/src/liblbfgs/depcomp +522 -0
- data/core/vendor/src/liblbfgs/include/lbfgs.h +745 -0
- data/core/vendor/src/liblbfgs/install-sh +322 -0
- data/core/vendor/src/liblbfgs/lbfgs.sln +26 -0
- data/core/vendor/src/liblbfgs/lib/Makefile.am +24 -0
- data/core/vendor/src/liblbfgs/lib/Makefile.in +499 -0
- data/core/vendor/src/liblbfgs/lib/arithmetic_ansi.h +133 -0
- data/core/vendor/src/liblbfgs/lib/arithmetic_sse_double.h +294 -0
- data/core/vendor/src/liblbfgs/lib/arithmetic_sse_float.h +298 -0
- data/core/vendor/src/liblbfgs/lib/lbfgs.c +1371 -0
- data/core/vendor/src/liblbfgs/lib/lib.vcxproj +95 -0
- data/core/vendor/src/liblbfgs/ltmain.sh +6426 -0
- data/core/vendor/src/liblbfgs/missing +353 -0
- data/core/vendor/src/liblbfgs/sample/Makefile.am +15 -0
- data/core/vendor/src/liblbfgs/sample/Makefile.in +433 -0
- data/core/vendor/src/liblbfgs/sample/sample.c +81 -0
- data/core/vendor/src/liblbfgs/sample/sample.cpp +126 -0
- data/core/vendor/src/liblbfgs/sample/sample.vcxproj +105 -0
- data/core/vendor/src/svm_light/LICENSE.txt +59 -0
- data/core/vendor/src/svm_light/Makefile +105 -0
- data/core/vendor/src/svm_light/kernel.h +40 -0
- data/core/vendor/src/svm_light/svm_classify.c +197 -0
- data/core/vendor/src/svm_light/svm_common.c +985 -0
- data/core/vendor/src/svm_light/svm_common.h +301 -0
- data/core/vendor/src/svm_light/svm_hideo.c +1062 -0
- data/core/vendor/src/svm_light/svm_learn.c +4147 -0
- data/core/vendor/src/svm_light/svm_learn.h +169 -0
- data/core/vendor/src/svm_light/svm_learn_main.c +397 -0
- data/core/vendor/src/svm_light/svm_loqo.c +211 -0
- data/ext/hack/Rakefile +17 -0
- data/ext/hack/support.rb +88 -0
- data/lib/opener/opinion_detector_basic.rb +91 -0
- data/lib/opener/opinion_detector_basic/public/markdown.css +284 -0
- data/lib/opener/opinion_detector_basic/server.rb +16 -0
- data/lib/opener/opinion_detector_basic/version.rb +5 -0
- data/lib/opener/opinion_detector_basic/views/index.erb +97 -0
- data/lib/opener/opinion_detector_basic/views/result.erb +15 -0
- data/opener-opinion-detector-basic.gemspec +36 -0
- data/pre_build_requirements.txt +1 -0
- metadata +309 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/***********************************************************************/
|
|
2
|
+
/* */
|
|
3
|
+
/* svm_loqo.c */
|
|
4
|
+
/* */
|
|
5
|
+
/* Interface to the PR_LOQO optimization package for SVM. */
|
|
6
|
+
/* */
|
|
7
|
+
/* Author: Thorsten Joachims */
|
|
8
|
+
/* Date: 19.07.99 */
|
|
9
|
+
/* */
|
|
10
|
+
/* Copyright (c) 1999 Universitaet Dortmund - All rights reserved */
|
|
11
|
+
/* */
|
|
12
|
+
/* This software is available for non-commercial use only. It must */
|
|
13
|
+
/* not be modified and distributed without prior permission of the */
|
|
14
|
+
/* author. The author is not responsible for implications from the */
|
|
15
|
+
/* use of this software. */
|
|
16
|
+
/* */
|
|
17
|
+
/***********************************************************************/
|
|
18
|
+
|
|
19
|
+
# include <math.h>
|
|
20
|
+
# include "pr_loqo/pr_loqo.h"
|
|
21
|
+
# include "svm_common.h"
|
|
22
|
+
|
|
23
|
+
/* Common Block Declarations */
|
|
24
|
+
|
|
25
|
+
long verbosity;
|
|
26
|
+
|
|
27
|
+
/* /////////////////////////////////////////////////////////////// */
|
|
28
|
+
|
|
29
|
+
# define DEF_PRECISION_LINEAR 1E-8
|
|
30
|
+
# define DEF_PRECISION_NONLINEAR 1E-14
|
|
31
|
+
|
|
32
|
+
double *optimize_qp();
|
|
33
|
+
double *primal=0,*dual=0;
|
|
34
|
+
double init_margin=0.15;
|
|
35
|
+
long init_iter=500,precision_violations=0;
|
|
36
|
+
double model_b;
|
|
37
|
+
double opt_precision=DEF_PRECISION_LINEAR;
|
|
38
|
+
|
|
39
|
+
/* /////////////////////////////////////////////////////////////// */
|
|
40
|
+
|
|
41
|
+
void *my_malloc();
|
|
42
|
+
|
|
43
|
+
double *optimize_qp(qp,epsilon_crit,nx,threshold,learn_parm)
|
|
44
|
+
QP *qp;
|
|
45
|
+
double *epsilon_crit;
|
|
46
|
+
long nx; /* Maximum number of variables in QP */
|
|
47
|
+
double *threshold;
|
|
48
|
+
LEARN_PARM *learn_parm;
|
|
49
|
+
/* start the optimizer and return the optimal values */
|
|
50
|
+
{
|
|
51
|
+
register long i,j,result;
|
|
52
|
+
double margin,obj_before,obj_after;
|
|
53
|
+
double sigdig,dist,epsilon_loqo;
|
|
54
|
+
int iter;
|
|
55
|
+
|
|
56
|
+
if(!primal) { /* allocate memory at first call */
|
|
57
|
+
primal=(double *)my_malloc(sizeof(double)*nx*3);
|
|
58
|
+
dual=(double *)my_malloc(sizeof(double)*(nx*2+1));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if(verbosity>=4) { /* really verbose */
|
|
62
|
+
printf("\n\n");
|
|
63
|
+
for(i=0;i<qp->opt_n;i++) {
|
|
64
|
+
printf("%f: ",qp->opt_g0[i]);
|
|
65
|
+
for(j=0;j<qp->opt_n;j++) {
|
|
66
|
+
printf("%f ",qp->opt_g[i*qp->opt_n+j]);
|
|
67
|
+
}
|
|
68
|
+
printf(": a%ld=%.10f < %f",i,qp->opt_xinit[i],qp->opt_up[i]);
|
|
69
|
+
printf(": y=%f\n",qp->opt_ce[i]);
|
|
70
|
+
}
|
|
71
|
+
for(j=0;j<qp->opt_m;j++) {
|
|
72
|
+
printf("EQ-%ld: %f*a0",j,qp->opt_ce[j]);
|
|
73
|
+
for(i=1;i<qp->opt_n;i++) {
|
|
74
|
+
printf(" + %f*a%ld",qp->opt_ce[i],i);
|
|
75
|
+
}
|
|
76
|
+
printf(" = %f\n\n",-qp->opt_ce0[0]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
obj_before=0; /* calculate objective before optimization */
|
|
81
|
+
for(i=0;i<qp->opt_n;i++) {
|
|
82
|
+
obj_before+=(qp->opt_g0[i]*qp->opt_xinit[i]);
|
|
83
|
+
obj_before+=(0.5*qp->opt_xinit[i]*qp->opt_xinit[i]*qp->opt_g[i*qp->opt_n+i]);
|
|
84
|
+
for(j=0;j<i;j++) {
|
|
85
|
+
obj_before+=(qp->opt_xinit[j]*qp->opt_xinit[i]*qp->opt_g[j*qp->opt_n+i]);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
result=STILL_RUNNING;
|
|
90
|
+
qp->opt_ce0[0]*=(-1.0);
|
|
91
|
+
/* Run pr_loqo. If a run fails, try again with parameters which lead */
|
|
92
|
+
/* to a slower, but more robust setting. */
|
|
93
|
+
for(margin=init_margin,iter=init_iter;
|
|
94
|
+
(margin<=0.9999999) && (result!=OPTIMAL_SOLUTION);) {
|
|
95
|
+
sigdig=-log10(opt_precision);
|
|
96
|
+
|
|
97
|
+
result=pr_loqo((int)qp->opt_n,(int)qp->opt_m,
|
|
98
|
+
(double *)qp->opt_g0,(double *)qp->opt_g,
|
|
99
|
+
(double *)qp->opt_ce,(double *)qp->opt_ce0,
|
|
100
|
+
(double *)qp->opt_low,(double *)qp->opt_up,
|
|
101
|
+
(double *)primal,(double *)dual,
|
|
102
|
+
(int)(verbosity-2),
|
|
103
|
+
(double)sigdig,(int)iter,
|
|
104
|
+
(double)margin,(double)(qp->opt_up[0])/4.0,(int)0);
|
|
105
|
+
|
|
106
|
+
if(isnan(dual[0])) { /* check for choldc problem */
|
|
107
|
+
if(verbosity>=2) {
|
|
108
|
+
printf("NOTICE: Restarting PR_LOQO with more conservative parameters.\n");
|
|
109
|
+
}
|
|
110
|
+
if(init_margin<0.80) { /* become more conservative in general */
|
|
111
|
+
init_margin=(4.0*margin+1.0)/5.0;
|
|
112
|
+
}
|
|
113
|
+
margin=(margin+1.0)/2.0;
|
|
114
|
+
(opt_precision)*=10.0; /* reduce precision */
|
|
115
|
+
if(verbosity>=2) {
|
|
116
|
+
printf("NOTICE: Reducing precision of PR_LOQO.\n");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if(result!=OPTIMAL_SOLUTION) {
|
|
120
|
+
iter+=2000;
|
|
121
|
+
init_iter+=10;
|
|
122
|
+
(opt_precision)*=10.0; /* reduce precision */
|
|
123
|
+
if(verbosity>=2) {
|
|
124
|
+
printf("NOTICE: Reducing precision of PR_LOQO due to (%ld).\n",result);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if(qp->opt_m) /* Thanks to Alex Smola for this hint */
|
|
130
|
+
model_b=dual[0];
|
|
131
|
+
else
|
|
132
|
+
model_b=0;
|
|
133
|
+
|
|
134
|
+
/* Check the precision of the alphas. If results of current optimization */
|
|
135
|
+
/* violate KT-Conditions, relax the epsilon on the bounds on alphas. */
|
|
136
|
+
epsilon_loqo=1E-10;
|
|
137
|
+
for(i=0;i<qp->opt_n;i++) {
|
|
138
|
+
dist=-model_b*qp->opt_ce[i];
|
|
139
|
+
dist+=(qp->opt_g0[i]+1.0);
|
|
140
|
+
for(j=0;j<i;j++) {
|
|
141
|
+
dist+=(primal[j]*qp->opt_g[j*qp->opt_n+i]);
|
|
142
|
+
}
|
|
143
|
+
for(j=i;j<qp->opt_n;j++) {
|
|
144
|
+
dist+=(primal[j]*qp->opt_g[i*qp->opt_n+j]);
|
|
145
|
+
}
|
|
146
|
+
/* printf("LOQO: a[%d]=%f, dist=%f, b=%f\n",i,primal[i],dist,dual[0]); */
|
|
147
|
+
if((primal[i]<(qp->opt_up[i]-epsilon_loqo)) && (dist < (1.0-(*epsilon_crit)))) {
|
|
148
|
+
epsilon_loqo=(qp->opt_up[i]-primal[i])*2.0;
|
|
149
|
+
}
|
|
150
|
+
else if((primal[i]>(0+epsilon_loqo)) && (dist > (1.0+(*epsilon_crit)))) {
|
|
151
|
+
epsilon_loqo=primal[i]*2.0;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
for(i=0;i<qp->opt_n;i++) { /* clip alphas to bounds */
|
|
156
|
+
if(primal[i]<=(0+epsilon_loqo)) {
|
|
157
|
+
primal[i]=0;
|
|
158
|
+
}
|
|
159
|
+
else if(primal[i]>=(qp->opt_up[i]-epsilon_loqo)) {
|
|
160
|
+
primal[i]=qp->opt_up[i];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
obj_after=0; /* calculate objective after optimization */
|
|
165
|
+
for(i=0;i<qp->opt_n;i++) {
|
|
166
|
+
obj_after+=(qp->opt_g0[i]*primal[i]);
|
|
167
|
+
obj_after+=(0.5*primal[i]*primal[i]*qp->opt_g[i*qp->opt_n+i]);
|
|
168
|
+
for(j=0;j<i;j++) {
|
|
169
|
+
obj_after+=(primal[j]*primal[i]*qp->opt_g[j*qp->opt_n+i]);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* if optimizer returned NAN values, reset and retry with smaller */
|
|
174
|
+
/* working set. */
|
|
175
|
+
if(isnan(obj_after) || isnan(model_b)) {
|
|
176
|
+
for(i=0;i<qp->opt_n;i++) {
|
|
177
|
+
primal[i]=qp->opt_xinit[i];
|
|
178
|
+
}
|
|
179
|
+
model_b=0;
|
|
180
|
+
if(learn_parm->svm_maxqpsize>2) {
|
|
181
|
+
learn_parm->svm_maxqpsize--; /* decrease size of qp-subproblems */
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if(obj_after >= obj_before) { /* check whether there was progress */
|
|
186
|
+
(opt_precision)/=100.0;
|
|
187
|
+
precision_violations++;
|
|
188
|
+
if(verbosity>=2) {
|
|
189
|
+
printf("NOTICE: Increasing Precision of PR_LOQO.\n");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if(precision_violations > 500) {
|
|
194
|
+
(*epsilon_crit)*=10.0;
|
|
195
|
+
precision_violations=0;
|
|
196
|
+
if(verbosity>=1) {
|
|
197
|
+
printf("\nWARNING: Relaxing epsilon on KT-Conditions.\n");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
(*threshold)=model_b;
|
|
202
|
+
|
|
203
|
+
if(result!=OPTIMAL_SOLUTION) {
|
|
204
|
+
printf("\nERROR: PR_LOQO did not converge. \n");
|
|
205
|
+
return(qp->opt_xinit);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
return(primal);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
data/ext/hack/Rakefile
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
require_relative 'support'
|
|
3
|
+
|
|
4
|
+
desc 'Verifies the requirements'
|
|
5
|
+
task :requirements do
|
|
6
|
+
verify_requirements
|
|
7
|
+
require_executable("make")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
task :compile => :requirements do
|
|
11
|
+
compile_vendored_code
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
task :default => [:compile] do
|
|
15
|
+
# path = File.join(PYTHON_SITE_PACKAGES, 'pre_install')
|
|
16
|
+
# pip_install(PRE_INSTALL_REQUIREMENTS, path)
|
|
17
|
+
end
|
data/ext/hack/support.rb
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'opener/build-tools'
|
|
2
|
+
|
|
3
|
+
include Opener::BuildTools::Requirements
|
|
4
|
+
include Opener::BuildTools::Python
|
|
5
|
+
include Opener::BuildTools::Files
|
|
6
|
+
|
|
7
|
+
# Directory of the core
|
|
8
|
+
CORE_DIR = File.expand_path('../../../core', __FILE__)
|
|
9
|
+
|
|
10
|
+
# Directory where packages will be installed to.
|
|
11
|
+
PYTHON_SITE_PACKAGES = File.expand_path(
|
|
12
|
+
'../../../core/site-packages',
|
|
13
|
+
__FILE__
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# Directory containing the temporary files.
|
|
17
|
+
TMP_DIRECTORY = File.expand_path('../../../tmp', __FILE__)
|
|
18
|
+
|
|
19
|
+
# Path to the pip requirements file used to install requirements before
|
|
20
|
+
# packaging the Gem.
|
|
21
|
+
PRE_BUILD_REQUIREMENTS = File.expand_path(
|
|
22
|
+
'../../../pre_build_requirements.txt',
|
|
23
|
+
__FILE__
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
# Path to the pip requirements file used to install requirements upon Gem
|
|
27
|
+
# installation.
|
|
28
|
+
PRE_INSTALL_REQUIREMENTS = File.expand_path(
|
|
29
|
+
'../../../pre_install_requirements.txt',
|
|
30
|
+
__FILE__
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# Path to the vendor directory for C code.
|
|
34
|
+
VENDOR_DIRECTORY = File.expand_path('../../../core/vendor', __FILE__)
|
|
35
|
+
|
|
36
|
+
# Path to the directory to install vendored C code into.
|
|
37
|
+
VENDOR_BUILD_DIRECTORY = File.expand_path(
|
|
38
|
+
'../../../core/vendor/build',
|
|
39
|
+
__FILE__
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Path to the directory that contains the source C code to compile.
|
|
43
|
+
VENDOR_SRC_DIRECTORY = File.expand_path('../../../core/vendor/src', __FILE__)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
##
|
|
47
|
+
# Verifies the requirements to install thi Gem.
|
|
48
|
+
#
|
|
49
|
+
def verify_requirements
|
|
50
|
+
require_executable('python')
|
|
51
|
+
require_version('python', python_version, '2.6.0')
|
|
52
|
+
require_executable('pip')
|
|
53
|
+
require_version('pip', pip_version, '1.3.1')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
# Compiles C code in the current directory using `make`.
|
|
58
|
+
#
|
|
59
|
+
# @param [Array] args The arguments to pass to ./configure
|
|
60
|
+
#
|
|
61
|
+
def compile(*args)
|
|
62
|
+
sh "./configure #{args.join(' ')}"
|
|
63
|
+
sh 'make'
|
|
64
|
+
sh 'make install'
|
|
65
|
+
sh 'make distclean'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
# Compiles the C code found in src/vendor.
|
|
70
|
+
#
|
|
71
|
+
def compile_vendored_code
|
|
72
|
+
src = VENDOR_SRC_DIRECTORY
|
|
73
|
+
build = VENDOR_BUILD_DIRECTORY
|
|
74
|
+
|
|
75
|
+
Dir.chdir(File.join(src, "liblbfgs")) do
|
|
76
|
+
compile("--prefix=#{build}")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
Dir.chdir(File.join(src, "crfsuite")) do
|
|
80
|
+
compile("--prefix=#{build}", "--with-liblbfgs=#{build}")
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
Dir.chdir(File.join(src, "svm_light")) do
|
|
84
|
+
sh 'make'
|
|
85
|
+
sh 'mv svm_classify svm_learn ../../build/bin'
|
|
86
|
+
sh 'make clean'
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'open3'
|
|
2
|
+
|
|
3
|
+
require_relative 'opinion_detector_basic/version'
|
|
4
|
+
|
|
5
|
+
module Opener
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
##
|
|
9
|
+
# The basic Opinion detector.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] args
|
|
12
|
+
# @return [Array]
|
|
13
|
+
# @!attribute [r] options
|
|
14
|
+
# @return [Hash]
|
|
15
|
+
#
|
|
16
|
+
class OpinionDetectorBasic
|
|
17
|
+
attr_reader :args, :options
|
|
18
|
+
|
|
19
|
+
def initialize(options = {})
|
|
20
|
+
@args = options.delete(:args) || []
|
|
21
|
+
@options = options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
##
|
|
25
|
+
# Builds the command used to execute the kernel.
|
|
26
|
+
#
|
|
27
|
+
# @param [Array] args Commandline arguments passed to the command.
|
|
28
|
+
#
|
|
29
|
+
def command
|
|
30
|
+
return "#{adjust_python_path} python -E -OO #{kernel} #{args.join(' ')}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# Runs the command and returns the output of STDOUT, STDERR and the
|
|
35
|
+
# process information.
|
|
36
|
+
#
|
|
37
|
+
# @param [String] input The input to tag.
|
|
38
|
+
# @return [Array]
|
|
39
|
+
#
|
|
40
|
+
def run(input)
|
|
41
|
+
capture(input)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
protected
|
|
45
|
+
##
|
|
46
|
+
# @return [String]
|
|
47
|
+
#
|
|
48
|
+
def adjust_python_path
|
|
49
|
+
site_packages = File.join(core_dir, 'site-packages')
|
|
50
|
+
"env PYTHONPATH=#{site_packages}:$PYTHONPATH"
|
|
51
|
+
end
|
|
52
|
+
##
|
|
53
|
+
# capture3 method doesn't work properly with Jruby, so
|
|
54
|
+
# this is a workaround
|
|
55
|
+
#
|
|
56
|
+
|
|
57
|
+
def capture(input)
|
|
58
|
+
Open3.popen3(*command.split(" ")) {|i, o, e, t|
|
|
59
|
+
out_reader = Thread.new { o.read }
|
|
60
|
+
err_reader = Thread.new { e.read }
|
|
61
|
+
i.write input
|
|
62
|
+
i.close
|
|
63
|
+
[out_reader.value, err_reader.value, t.value]
|
|
64
|
+
}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
##
|
|
68
|
+
# @return [String]
|
|
69
|
+
#
|
|
70
|
+
def core_dir
|
|
71
|
+
return File.expand_path('../../../core', __FILE__)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
# @return [String]
|
|
76
|
+
#
|
|
77
|
+
def kernel
|
|
78
|
+
return File.join(core_dir, 'opinion_detector_basic_multi.py')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
##
|
|
82
|
+
# @return the language from the KAF
|
|
83
|
+
#
|
|
84
|
+
def language(input)
|
|
85
|
+
document = Nokogiri::XML(input)
|
|
86
|
+
language = document.at('KAF').attr('xml:lang')
|
|
87
|
+
return language
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end # OpinionDetectorBasic
|
|
91
|
+
end # Opener
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
|
|
2
|
+
input[type="text"], textarea
|
|
3
|
+
{
|
|
4
|
+
width: 500px;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
body {
|
|
8
|
+
font-family: Helvetica, arial, sans-serif;
|
|
9
|
+
font-size: 14px;
|
|
10
|
+
line-height: 1.6;
|
|
11
|
+
padding-top: 10px;
|
|
12
|
+
padding-bottom: 10px;
|
|
13
|
+
background-color: white;
|
|
14
|
+
padding: 30px; }
|
|
15
|
+
|
|
16
|
+
body > *:first-child {
|
|
17
|
+
margin-top: 0 !important; }
|
|
18
|
+
body > *:last-child {
|
|
19
|
+
margin-bottom: 0 !important; }
|
|
20
|
+
|
|
21
|
+
a {
|
|
22
|
+
color: #4183C4; }
|
|
23
|
+
a.absent {
|
|
24
|
+
color: #cc0000; }
|
|
25
|
+
a.anchor {
|
|
26
|
+
display: block;
|
|
27
|
+
padding-left: 30px;
|
|
28
|
+
margin-left: -30px;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
position: absolute;
|
|
31
|
+
top: 0;
|
|
32
|
+
left: 0;
|
|
33
|
+
bottom: 0; }
|
|
34
|
+
|
|
35
|
+
h1, h2, h3, h4, h5, h6 {
|
|
36
|
+
margin: 20px 0 10px;
|
|
37
|
+
padding: 0;
|
|
38
|
+
font-weight: bold;
|
|
39
|
+
-webkit-font-smoothing: antialiased;
|
|
40
|
+
cursor: text;
|
|
41
|
+
position: relative; }
|
|
42
|
+
|
|
43
|
+
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
|
|
44
|
+
background: url("../../images/modules/styleguide/para.png") no-repeat 10px center;
|
|
45
|
+
text-decoration: none; }
|
|
46
|
+
|
|
47
|
+
h1 tt, h1 code {
|
|
48
|
+
font-size: inherit; }
|
|
49
|
+
|
|
50
|
+
h2 tt, h2 code {
|
|
51
|
+
font-size: inherit; }
|
|
52
|
+
|
|
53
|
+
h3 tt, h3 code {
|
|
54
|
+
font-size: inherit; }
|
|
55
|
+
|
|
56
|
+
h4 tt, h4 code {
|
|
57
|
+
font-size: inherit; }
|
|
58
|
+
|
|
59
|
+
h5 tt, h5 code {
|
|
60
|
+
font-size: inherit; }
|
|
61
|
+
|
|
62
|
+
h6 tt, h6 code {
|
|
63
|
+
font-size: inherit; }
|
|
64
|
+
|
|
65
|
+
h1 {
|
|
66
|
+
font-size: 28px;
|
|
67
|
+
color: black; }
|
|
68
|
+
|
|
69
|
+
h2 {
|
|
70
|
+
font-size: 24px;
|
|
71
|
+
border-bottom: 1px solid #cccccc;
|
|
72
|
+
color: black; }
|
|
73
|
+
|
|
74
|
+
h3 {
|
|
75
|
+
font-size: 18px; }
|
|
76
|
+
|
|
77
|
+
h4 {
|
|
78
|
+
font-size: 16px; }
|
|
79
|
+
|
|
80
|
+
h5 {
|
|
81
|
+
font-size: 14px; }
|
|
82
|
+
|
|
83
|
+
h6 {
|
|
84
|
+
color: #777777;
|
|
85
|
+
font-size: 14px; }
|
|
86
|
+
|
|
87
|
+
p, blockquote, ul, ol, dl, li, table, pre {
|
|
88
|
+
margin: 15px 0; }
|
|
89
|
+
|
|
90
|
+
hr {
|
|
91
|
+
background: transparent url("../../images/modules/pulls/dirty-shade.png") repeat-x 0 0;
|
|
92
|
+
border: 0 none;
|
|
93
|
+
color: #cccccc;
|
|
94
|
+
height: 4px;
|
|
95
|
+
padding: 0; }
|
|
96
|
+
|
|
97
|
+
body > h2:first-child {
|
|
98
|
+
margin-top: 0;
|
|
99
|
+
padding-top: 0; }
|
|
100
|
+
body > h1:first-child {
|
|
101
|
+
margin-top: 0;
|
|
102
|
+
padding-top: 0; }
|
|
103
|
+
body > h1:first-child + h2 {
|
|
104
|
+
margin-top: 0;
|
|
105
|
+
padding-top: 0; }
|
|
106
|
+
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
|
|
107
|
+
margin-top: 0;
|
|
108
|
+
padding-top: 0; }
|
|
109
|
+
|
|
110
|
+
a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
|
|
111
|
+
margin-top: 0;
|
|
112
|
+
padding-top: 0; }
|
|
113
|
+
|
|
114
|
+
h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
|
|
115
|
+
margin-top: 0; }
|
|
116
|
+
|
|
117
|
+
li p.first {
|
|
118
|
+
display: inline-block; }
|
|
119
|
+
|
|
120
|
+
ul, ol {
|
|
121
|
+
padding-left: 30px; }
|
|
122
|
+
|
|
123
|
+
ul :first-child, ol :first-child {
|
|
124
|
+
margin-top: 0; }
|
|
125
|
+
|
|
126
|
+
ul :last-child, ol :last-child {
|
|
127
|
+
margin-bottom: 0; }
|
|
128
|
+
|
|
129
|
+
dl {
|
|
130
|
+
padding: 0; }
|
|
131
|
+
dl dt {
|
|
132
|
+
font-size: 14px;
|
|
133
|
+
font-weight: bold;
|
|
134
|
+
font-style: italic;
|
|
135
|
+
padding: 0;
|
|
136
|
+
margin: 15px 0 5px; }
|
|
137
|
+
dl dt:first-child {
|
|
138
|
+
padding: 0; }
|
|
139
|
+
dl dt > :first-child {
|
|
140
|
+
margin-top: 0; }
|
|
141
|
+
dl dt > :last-child {
|
|
142
|
+
margin-bottom: 0; }
|
|
143
|
+
dl dd {
|
|
144
|
+
margin: 0 0 15px;
|
|
145
|
+
padding: 0 15px; }
|
|
146
|
+
dl dd > :first-child {
|
|
147
|
+
margin-top: 0; }
|
|
148
|
+
dl dd > :last-child {
|
|
149
|
+
margin-bottom: 0; }
|
|
150
|
+
|
|
151
|
+
blockquote {
|
|
152
|
+
border-left: 4px solid #dddddd;
|
|
153
|
+
padding: 0 15px;
|
|
154
|
+
color: #777777; }
|
|
155
|
+
blockquote > :first-child {
|
|
156
|
+
margin-top: 0; }
|
|
157
|
+
blockquote > :last-child {
|
|
158
|
+
margin-bottom: 0; }
|
|
159
|
+
|
|
160
|
+
table {
|
|
161
|
+
padding: 0; }
|
|
162
|
+
table tr {
|
|
163
|
+
border-top: 1px solid #cccccc;
|
|
164
|
+
background-color: white;
|
|
165
|
+
margin: 0;
|
|
166
|
+
padding: 0; }
|
|
167
|
+
table tr:nth-child(2n) {
|
|
168
|
+
background-color: #f8f8f8; }
|
|
169
|
+
table tr th {
|
|
170
|
+
font-weight: bold;
|
|
171
|
+
border: 1px solid #cccccc;
|
|
172
|
+
text-align: left;
|
|
173
|
+
margin: 0;
|
|
174
|
+
padding: 6px 13px; }
|
|
175
|
+
table tr td {
|
|
176
|
+
border: 1px solid #cccccc;
|
|
177
|
+
text-align: left;
|
|
178
|
+
margin: 0;
|
|
179
|
+
padding: 6px 13px; }
|
|
180
|
+
table tr th :first-child, table tr td :first-child {
|
|
181
|
+
margin-top: 0; }
|
|
182
|
+
table tr th :last-child, table tr td :last-child {
|
|
183
|
+
margin-bottom: 0; }
|
|
184
|
+
|
|
185
|
+
img {
|
|
186
|
+
max-width: 100%; }
|
|
187
|
+
|
|
188
|
+
span.frame {
|
|
189
|
+
display: block;
|
|
190
|
+
overflow: hidden; }
|
|
191
|
+
span.frame > span {
|
|
192
|
+
border: 1px solid #dddddd;
|
|
193
|
+
display: block;
|
|
194
|
+
float: left;
|
|
195
|
+
overflow: hidden;
|
|
196
|
+
margin: 13px 0 0;
|
|
197
|
+
padding: 7px;
|
|
198
|
+
width: auto; }
|
|
199
|
+
span.frame span img {
|
|
200
|
+
display: block;
|
|
201
|
+
float: left; }
|
|
202
|
+
span.frame span span {
|
|
203
|
+
clear: both;
|
|
204
|
+
color: #333333;
|
|
205
|
+
display: block;
|
|
206
|
+
padding: 5px 0 0; }
|
|
207
|
+
span.align-center {
|
|
208
|
+
display: block;
|
|
209
|
+
overflow: hidden;
|
|
210
|
+
clear: both; }
|
|
211
|
+
span.align-center > span {
|
|
212
|
+
display: block;
|
|
213
|
+
overflow: hidden;
|
|
214
|
+
margin: 13px auto 0;
|
|
215
|
+
text-align: center; }
|
|
216
|
+
span.align-center span img {
|
|
217
|
+
margin: 0 auto;
|
|
218
|
+
text-align: center; }
|
|
219
|
+
span.align-right {
|
|
220
|
+
display: block;
|
|
221
|
+
overflow: hidden;
|
|
222
|
+
clear: both; }
|
|
223
|
+
span.align-right > span {
|
|
224
|
+
display: block;
|
|
225
|
+
overflow: hidden;
|
|
226
|
+
margin: 13px 0 0;
|
|
227
|
+
text-align: right; }
|
|
228
|
+
span.align-right span img {
|
|
229
|
+
margin: 0;
|
|
230
|
+
text-align: right; }
|
|
231
|
+
span.float-left {
|
|
232
|
+
display: block;
|
|
233
|
+
margin-right: 13px;
|
|
234
|
+
overflow: hidden;
|
|
235
|
+
float: left; }
|
|
236
|
+
span.float-left span {
|
|
237
|
+
margin: 13px 0 0; }
|
|
238
|
+
span.float-right {
|
|
239
|
+
display: block;
|
|
240
|
+
margin-left: 13px;
|
|
241
|
+
overflow: hidden;
|
|
242
|
+
float: right; }
|
|
243
|
+
span.float-right > span {
|
|
244
|
+
display: block;
|
|
245
|
+
overflow: hidden;
|
|
246
|
+
margin: 13px auto 0;
|
|
247
|
+
text-align: right; }
|
|
248
|
+
|
|
249
|
+
code, tt {
|
|
250
|
+
margin: 0 2px;
|
|
251
|
+
padding: 0 5px;
|
|
252
|
+
white-space: nowrap;
|
|
253
|
+
border: 1px solid #eaeaea;
|
|
254
|
+
background-color: #f8f8f8;
|
|
255
|
+
border-radius: 3px; }
|
|
256
|
+
|
|
257
|
+
pre code {
|
|
258
|
+
margin: 0;
|
|
259
|
+
padding: 0;
|
|
260
|
+
white-space: pre;
|
|
261
|
+
border: none;
|
|
262
|
+
background: transparent; }
|
|
263
|
+
|
|
264
|
+
.highlight pre {
|
|
265
|
+
background-color: #f8f8f8;
|
|
266
|
+
border: 1px solid #cccccc;
|
|
267
|
+
font-size: 13px;
|
|
268
|
+
line-height: 19px;
|
|
269
|
+
overflow: auto;
|
|
270
|
+
padding: 6px 10px;
|
|
271
|
+
border-radius: 3px; }
|
|
272
|
+
|
|
273
|
+
pre {
|
|
274
|
+
background-color: #f8f8f8;
|
|
275
|
+
border: 1px solid #cccccc;
|
|
276
|
+
font-size: 13px;
|
|
277
|
+
line-height: 19px;
|
|
278
|
+
overflow: auto;
|
|
279
|
+
padding: 6px 10px;
|
|
280
|
+
border-radius: 3px; }
|
|
281
|
+
pre code, pre tt {
|
|
282
|
+
background-color: transparent;
|
|
283
|
+
border: none; }
|
|
284
|
+
|