opener-polarity-tagger 2.5.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +111 -92
- data/bin/polarity-tagger +8 -2
- data/bin/polarity-tagger-daemon +9 -5
- data/bin/polarity-tagger-server +8 -48
- data/exec/polarity-tagger.rb +1 -11
- data/lib/opener/polarity_tagger/cli.rb +39 -49
- data/lib/opener/polarity_tagger/server.rb +4 -5
- data/lib/opener/polarity_tagger/version.rb +1 -1
- data/lib/opener/polarity_tagger.rb +19 -14
- data/opener-polarity-tagger.gemspec +5 -6
- metadata +23 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4704e0e656fbe2aeed40ebad8f54aef94c950294
|
4
|
+
data.tar.gz: 4b80616f84a4286973bd7473f9b805c023f44ded
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daca3e529b5c0dfe94f01f77ea7c4b2dbc5380e57a29971ab3254d628ef8dc9e16483fc3ee9da0bc901a34c56d0c81349552465c5fe257101a26d1378082fec7
|
7
|
+
data.tar.gz: 30b5efbf6caf1892e8c3d9210399448a53a84dff3634f1ff1463d59f2924340cb48bb9062d09325018e1af429cbcbe0c8f5f5683a41b30242ecf7057c3534677
|
data/README.md
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
Introduction
|
2
|
-
------------
|
1
|
+
# Introduction
|
3
2
|
|
4
|
-
This repository contains the code for the OpeNER polarity tagger. This tool tags
|
3
|
+
This repository contains the code for the OpeNER polarity tagger. This tool tags
|
4
|
+
words in a KAF file with polarity information, which basically is:
|
5
5
|
|
6
|
-
* Polarity information, which represents positive or negative facts in a certain
|
7
|
-
|
6
|
+
* Polarity information, which represents positive or negative facts in a certain
|
7
|
+
domain. Good, cheap and clean can be positive words in a hotel domain, while
|
8
|
+
bad, expensive and dirty could be negative ones.
|
9
|
+
* Sentiment modifiers, which modify the polarity of a surrounding polarity word.
|
10
|
+
For instance very or no are sentiment modifiers
|
8
11
|
|
9
12
|
The polarity tagger supports the following languages:
|
10
13
|
|
@@ -15,72 +18,82 @@ The polarity tagger supports the following languages:
|
|
15
18
|
* Italian
|
16
19
|
* Spanish
|
17
20
|
|
18
|
-
##How-
|
19
|
-
|
20
|
-
The main script of this tool is a python file, which accepts a set of parameters
|
21
|
-
or options we want to use. The language is read from
|
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
|
-
|
21
|
+
## How-To
|
22
|
+
|
23
|
+
The main script of this tool is a python file, which accepts a set of parameters
|
24
|
+
to determine which features or options we want to use. The language is read from
|
25
|
+
the KAF file, so it doesn't need to be specified as a parameter The program
|
26
|
+
reads a KAF file from the standard input and writes the resulting KAf in the
|
27
|
+
standard output. To see the options you can call to the main script with the -h
|
28
|
+
or `--help` option.
|
29
|
+
|
30
|
+
$ python core/poltagger-basic-multi.py -h
|
31
|
+
usage: poltagger-basic-multi.py [-h] [--no-time] [--ignore-pos]
|
32
|
+
[--show-lexicons {nl,en,de,es,it,fr}]
|
33
|
+
[--lexicon LEXICON] [--silent] [--version]
|
34
|
+
|
35
|
+
Tags a text with polarities at lemma level
|
36
|
+
|
37
|
+
optional arguments:
|
38
|
+
-h, --help show this help message and exit
|
39
|
+
--no-time For not including timestamp in header
|
40
|
+
--ignore-pos Ignore the pos labels
|
41
|
+
--show-lexicons {nl,en,de,es,it,fr}
|
42
|
+
Show lexicons for the given language and exit
|
43
|
+
--lexicon LEXICON Lexicon identifier, check with --show-lexicons LANG
|
44
|
+
for options
|
45
|
+
--lexicon-path LEXICON The path of the lexicons
|
46
|
+
--silent Turn off debug info
|
47
|
+
--version show program's version number and exit
|
48
|
+
|
49
|
+
The `--ignore-pos` parameter must be used when want to ignore the part-of-speech
|
50
|
+
information assigned to the lemmas, and we want to assign polarities just to the
|
51
|
+
lemmas, not considering the POS tag. This could be useful when the information
|
52
|
+
provided by the pos-tagger is not accurate or the pos-tagging has not been
|
53
|
+
processed.
|
54
|
+
|
55
|
+
The main options are those concerning with the usage of different lexicons. The
|
56
|
+
lexicons are provided by the VU-sentiment-lexicon library
|
57
|
+
(https://github.com/opener-project/VU-sentiment-lexicon), which needs to be
|
58
|
+
installed. You can see what the lexicons available for a given language are by
|
59
|
+
calling to the program with the option --show-lexicons LANG, for instance:
|
60
|
+
|
61
|
+
core/poltagger-basic-multi.py --show-lexicons nl
|
62
|
+
|
63
|
+
##############################
|
64
|
+
Available lexicons for nl
|
65
|
+
Identifier: "hotel" (Default)
|
66
|
+
Desc: Hotel domain lexicon for Dutch
|
67
|
+
Res: VUA_olery_lexicon_nl_lmf
|
68
|
+
File: /Users/ruben/python_envs/python2.7/lib/python2.7/VUSentimentLexicon/NL-lexicon/Sentiment-Dutch-HotelDomain.xml
|
69
|
+
|
70
|
+
Identifier:"general"
|
71
|
+
Desc: General lexicon for Dutch
|
72
|
+
Res: VUA_olery_lexicon_nl_lmf
|
73
|
+
File: /Users/ruben/python_envs/python2.7/lib/python2.7/VUSentimentLexicon/NL-lexicon/Sentiment-Dutch-general.xml
|
74
|
+
|
75
|
+
##############################
|
76
|
+
|
77
|
+
Then you can use the lexicon identifiers to select the proper lexicon, with the
|
78
|
+
option --lexicon
|
79
|
+
|
80
|
+
cat my_input.nl.kaf | core/poltagger-basic-multi.py --lexicon general
|
81
|
+
|
82
|
+
This command will call to the polarity tagger using the general lexicon for
|
83
|
+
Dutch. The lexicon identifiers are unique only per language. If the lexicon id
|
84
|
+
is not specified(you skip the --lexicon option), or you provide a wrong
|
85
|
+
identifier, the default lexicon will be loaded. If there is no lexicon marked
|
86
|
+
as default in the --show-lexicon options, the first one in the list will be
|
87
|
+
used. Check the VU-sentiment-lexicon for further information about how to manage
|
88
|
+
lexicons and add new ones.
|
80
89
|
|
81
90
|
### Confused by some terminology?
|
82
91
|
|
83
|
-
This software is part of a larger collection of natural language processing
|
92
|
+
This software is part of a larger collection of natural language processing
|
93
|
+
tools known as "the OpeNER project". You can find more information about the
|
94
|
+
project at [the OpeNER portal](http://opener-project.github.io). There you can
|
95
|
+
also find references to terms like KAF (an XML standard to represent linguistic
|
96
|
+
annotations in texts), component, cores, scenario's and pipelines.
|
84
97
|
|
85
98
|
Quick Use Example
|
86
99
|
-----------------
|
@@ -89,32 +102,33 @@ Installing the polarity-tagger can be done by executing:
|
|
89
102
|
|
90
103
|
gem install opener-polarity-tagger
|
91
104
|
|
92
|
-
The polarity tagger uses python. So it is advised to run a virtualenv before
|
105
|
+
The polarity tagger uses python. So it is advised to run a virtualenv before
|
106
|
+
installing the gem.
|
93
107
|
|
94
|
-
Please bare in mind that all components in OpeNER take KAF as an input and
|
108
|
+
Please bare in mind that all components in OpeNER take KAF as an input and
|
109
|
+
output KAF by default.
|
95
110
|
|
96
111
|
### Command line interface
|
97
112
|
|
98
|
-
You should now be able to call the polarity tagger as a regular shell command:
|
113
|
+
You should now be able to call the polarity tagger as a regular shell command:
|
114
|
+
by its name. Once installed the gem normally sits in your path so you can call
|
115
|
+
it directly from anywhere.
|
99
116
|
|
100
117
|
This aplication reads a text from standard input in order process it.
|
101
118
|
|
102
119
|
cat some_kind_of_kaf_file.kaf | polarity-tagger
|
103
120
|
|
104
|
-
|
105
121
|
This will output:
|
106
122
|
|
107
|
-
|
108
|
-
<
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
</term>
|
115
|
-
```
|
123
|
+
<term lemma="donner" morphofeat="VP3s" pos="V" tid="t119" type="open">
|
124
|
+
<span>
|
125
|
+
<!--donne-->
|
126
|
+
<target id="w119"/>
|
127
|
+
</span>
|
128
|
+
<sentiment polarity="neutral" resource="General domain lexicon for French . Vicomtech_general_lexicon_french"/>
|
129
|
+
</term>
|
116
130
|
|
117
|
-
##Requirements
|
131
|
+
## Requirements
|
118
132
|
|
119
133
|
* Python 2.7.0 or newer
|
120
134
|
* Ruby 1.9.2 or newer
|
@@ -127,7 +141,8 @@ You can launch a webservice by executing:
|
|
127
141
|
|
128
142
|
polarity-tagger-server
|
129
143
|
|
130
|
-
This will launch a mini webserver with the webservice. It defaults to port 9292,
|
144
|
+
This will launch a mini webserver with the webservice. It defaults to port 9292,
|
145
|
+
so you can access it at <http://localhost:9292>.
|
131
146
|
|
132
147
|
To launch it on a different port provide the `-p [port-number]` option like this:
|
133
148
|
|
@@ -135,20 +150,24 @@ To launch it on a different port provide the `-p [port-number]` option like this
|
|
135
150
|
|
136
151
|
It then launches at <http://localhost:1234>
|
137
152
|
|
138
|
-
Documentation on the Webservice is provided by surfing to the urls provided
|
139
|
-
|
153
|
+
Documentation on the Webservice is provided by surfing to the urls provided
|
154
|
+
above. For more information on how to launch a webservice run the command with
|
155
|
+
the `--help` option.
|
140
156
|
|
141
157
|
### Daemon
|
142
158
|
|
143
|
-
Last but not least the polarity tagger comes shipped with a daemon that can read
|
159
|
+
Last but not least the polarity tagger comes shipped with a daemon that can read
|
160
|
+
jobs (and write) jobs to and from Amazon SQS queues. For more information type:
|
144
161
|
|
145
162
|
polarity-tagger-daemon -h
|
146
163
|
|
147
|
-
|
148
164
|
Description of dependencies
|
149
165
|
---------------------------
|
150
166
|
|
151
|
-
This component runs best if you run it in an environment suited for OpeNER
|
167
|
+
This component runs best if you run it in an environment suited for OpeNER
|
168
|
+
components. You can find an installation guide and helper tools in the
|
169
|
+
[OpeNER installer](https://github.com/opener-project/opener-installer) and an
|
170
|
+
[installation guide on the Opener Website](http://opener-project.github.io/getting-started/how-to/local-installation.html)
|
152
171
|
|
153
172
|
At least you need the following system setup:
|
154
173
|
|
@@ -171,7 +190,8 @@ Language Extension
|
|
171
190
|
The Core
|
172
191
|
--------
|
173
192
|
|
174
|
-
The component is a
|
193
|
+
The component is a wrapper around the actual language technology core. You
|
194
|
+
can find the core technolies in the `core/` folder.
|
175
195
|
|
176
196
|
Where to go from here
|
177
197
|
---------------------
|
@@ -182,10 +202,10 @@ Where to go from here
|
|
182
202
|
Report problem/Get help
|
183
203
|
-----------------------
|
184
204
|
|
185
|
-
If you encounter problems, please email <support@opener-project.eu> or leave an
|
205
|
+
If you encounter problems, please email <support@opener-project.eu> or leave an
|
206
|
+
issue in the
|
186
207
|
[issue tracker](https://github.com/opener-project/polarity-tagger/issues).
|
187
208
|
|
188
|
-
|
189
209
|
Contributing
|
190
210
|
------------
|
191
211
|
|
@@ -194,4 +214,3 @@ Contributing
|
|
194
214
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
195
215
|
4. Push to the branch (`git push origin my-new-feature`)
|
196
216
|
5. Create new Pull Request
|
197
|
-
|
data/bin/polarity-tagger
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'opener/core'
|
4
|
+
|
3
5
|
require_relative '../lib/opener/polarity_tagger'
|
4
6
|
|
5
|
-
|
6
|
-
cli
|
7
|
+
switcher = Opener::Core::ResourceSwitcher.new
|
8
|
+
cli = Opener::PolarityTagger::CLI.new
|
9
|
+
|
10
|
+
switcher.bind(cli.parser)
|
11
|
+
|
12
|
+
cli.run
|
data/bin/polarity-tagger-daemon
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'opener/daemons'
|
4
|
+
require 'opener/core'
|
4
5
|
|
5
|
-
|
6
|
+
switcher = Opener::Core::ResourceSwitcher.new
|
7
|
+
controller = Opener::Daemons::Controller.new(
|
8
|
+
:name => 'opener-polarity-tagger',
|
9
|
+
:exec_path => File.expand_path('../../exec/polarity-tagger.rb', __FILE__)
|
10
|
+
)
|
6
11
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
)
|
12
|
+
switcher.bind(controller.parser.parser)
|
13
|
+
|
14
|
+
controller.run
|
data/bin/polarity-tagger-server
CHANGED
@@ -1,54 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'optparse'
|
3
|
+
require 'opener/webservice'
|
5
4
|
require 'opener/core'
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
switcher = Opener::Core::ResourceSwitcher.new
|
7
|
+
parser = Opener::Webservice::OptionParser.new(
|
8
|
+
'opener-polarity-tagger',
|
9
|
+
File.expand_path('../../config.ru', __FILE__)
|
10
|
+
)
|
11
11
|
|
12
|
-
|
13
|
-
opts.banner = "Usage: #{File.basename($0)} [OPTIONS]"
|
12
|
+
switcher.bind(parser.parser)
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
opts.on('-h', '--help', 'Shows this help message') do
|
18
|
-
abort option_parser.to_s
|
19
|
-
end
|
20
|
-
|
21
|
-
opts.on('-S', '--state PATH', 'Where to store the state details') do |val|
|
22
|
-
puma_args += ['--state', val]
|
23
|
-
end
|
24
|
-
|
25
|
-
opts.on('-b', '--bind URI', 'URI to bind to (tcp://, unix://, ssl://)') do |val|
|
26
|
-
puma_args += ['--bind', val]
|
27
|
-
end
|
28
|
-
|
29
|
-
opts.on('--pidfile PATH', 'Use PATH as a pidfile') do |val|
|
30
|
-
puma_args += ['--pidfile', val]
|
31
|
-
end
|
32
|
-
|
33
|
-
opts.on('--daemon', 'Daemonize the server into the background') do |val|
|
34
|
-
puma_args << '--daemon'
|
35
|
-
end
|
36
|
-
|
37
|
-
opts.on('-e', '--environment ENVIRONMENT', 'The environment to use') do |val|
|
38
|
-
puma_args += ['--environment', val]
|
39
|
-
end
|
40
|
-
|
41
|
-
opts.separator "\nResource Options:\n\n"
|
42
|
-
|
43
|
-
switcher.bind(opts, switcher_opts)
|
44
|
-
end
|
45
|
-
|
46
|
-
option_parser.parse!(ARGV)
|
47
|
-
|
48
|
-
switcher.install(switcher_opts)
|
49
|
-
|
50
|
-
# Puma on JRuby does some weird stuff with forking/exec. As a result of this we
|
51
|
-
# *have to* update ARGV as otherwise running Puma as a daemon does not work.
|
52
|
-
ARGV.replace(puma_args)
|
53
|
-
|
54
|
-
Puma::CLI.new(ARGV).run
|
14
|
+
parser.run
|
data/exec/polarity-tagger.rb
CHANGED
@@ -1,19 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'opener/daemons'
|
4
|
-
require 'opener/core'
|
5
4
|
|
6
5
|
require_relative '../lib/opener/polarity_tagger'
|
7
6
|
|
8
|
-
|
9
|
-
switcher_opts = {}
|
7
|
+
daemon = Opener::Daemons::Daemon.new(Opener::PolarityTagger)
|
10
8
|
|
11
|
-
parser = Opener::Daemons::OptParser.new do |opts|
|
12
|
-
switcher.bind(opts, switcher_opts)
|
13
|
-
end
|
14
|
-
|
15
|
-
options = parser.parse!(ARGV)
|
16
|
-
daemon = Opener::Daemons::Daemon.new(Opener::PolarityTagger, options)
|
17
|
-
|
18
|
-
switcher.install(switcher_opts)
|
19
9
|
daemon.start
|
@@ -3,74 +3,64 @@ require 'opener/core'
|
|
3
3
|
module Opener
|
4
4
|
class PolarityTagger
|
5
5
|
##
|
6
|
-
# CLI wrapper around {Opener::LanguageIdentifier} using
|
6
|
+
# CLI wrapper around {Opener::LanguageIdentifier} using Slop.
|
7
7
|
#
|
8
|
-
# @!attribute [r]
|
9
|
-
# @return [
|
10
|
-
# @!attribute [r] option_parser
|
11
|
-
# @return [OptionParser]
|
8
|
+
# @!attribute [r] parser
|
9
|
+
# @return [Slop]
|
12
10
|
#
|
13
11
|
class CLI
|
14
|
-
attr_reader :
|
12
|
+
attr_reader :parser
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@parser = configure_slop
|
16
|
+
end
|
15
17
|
|
16
18
|
##
|
17
|
-
# @param [
|
19
|
+
# @param [Array] argv
|
18
20
|
#
|
19
|
-
def
|
20
|
-
|
21
|
+
def run(argv = ARGV)
|
22
|
+
parser.parse(argv)
|
23
|
+
end
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
##
|
26
|
+
# @return [Slop]
|
27
|
+
#
|
28
|
+
def configure_slop
|
29
|
+
return Slop.new(:strict => false, :indent => 2, :help => true) do
|
30
|
+
banner 'Usage: polarity-tagger [OPTIONS] -- [PYTHON OPTIONS]'
|
24
31
|
|
25
|
-
|
26
|
-
opts.program_name = 'polarity-tagger'
|
27
|
-
opts.summary_indent = ' '
|
32
|
+
separator <<-EOF.chomp
|
28
33
|
|
29
|
-
|
34
|
+
About:
|
30
35
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
36
|
+
Component for tagging the polarity of elements in a KAF document. This
|
37
|
+
command reads input from STDIN.
|
34
38
|
|
35
|
-
|
36
|
-
show_version
|
37
|
-
end
|
39
|
+
Examples:
|
38
40
|
|
39
|
-
|
40
|
-
@options[:logging] = true
|
41
|
-
end
|
42
|
-
end
|
41
|
+
Processing a KAF file:
|
43
42
|
|
44
|
-
|
45
|
-
force = false
|
46
|
-
resource_switcher.install(@options, force)
|
47
|
-
end
|
43
|
+
cat some_file.kaf | polarity-tagger
|
48
44
|
|
49
|
-
|
50
|
-
# @param [String] input
|
51
|
-
#
|
52
|
-
def run(input)
|
53
|
-
tagger = PolarityTagger.new(options)
|
45
|
+
Displaying the underlying kernel options:
|
54
46
|
|
55
|
-
|
47
|
+
polarity-tagger -- --help
|
56
48
|
|
57
|
-
|
58
|
-
end
|
49
|
+
EOF
|
59
50
|
|
60
|
-
|
51
|
+
separator "\nOptions:\n"
|
61
52
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
def show_help
|
66
|
-
abort option_parser.to_s
|
67
|
-
end
|
53
|
+
on :v, :version, 'Shows the current version' do
|
54
|
+
abort "polarity-tagger v#{VERSION} on #{RUBY_DESCRIPTION}"
|
55
|
+
end
|
68
56
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
57
|
+
run do |opts, args|
|
58
|
+
tagger = PolarityTagger.new(:args => args)
|
59
|
+
input = STDIN.tty? ? nil : STDIN.read
|
60
|
+
|
61
|
+
puts tagger.run(input)
|
62
|
+
end
|
63
|
+
end
|
74
64
|
end
|
75
65
|
end # CLI
|
76
66
|
end # PolarityTagger
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'sinatra/base'
|
2
|
-
require 'httpclient'
|
3
1
|
require 'opener/webservice'
|
4
2
|
|
5
3
|
module Opener
|
@@ -7,10 +5,11 @@ module Opener
|
|
7
5
|
##
|
8
6
|
# Polarity tagger server powered by Sinatra.
|
9
7
|
#
|
10
|
-
class Server < Webservice
|
8
|
+
class Server < Webservice::Server
|
11
9
|
set :views, File.expand_path('../views', __FILE__)
|
12
|
-
|
13
|
-
|
10
|
+
|
11
|
+
self.text_processor = PolarityTagger
|
12
|
+
self.accepted_params = [:input]
|
14
13
|
end # Server
|
15
14
|
end # PolarityTagger
|
16
15
|
end # Opener
|
@@ -11,6 +11,9 @@ module Opener
|
|
11
11
|
# @!attribute [r] options
|
12
12
|
# @return [Hash]
|
13
13
|
#
|
14
|
+
# @!attribute [r] args
|
15
|
+
# @return [Array]
|
16
|
+
#
|
14
17
|
class PolarityTagger
|
15
18
|
attr_reader :options, :args
|
16
19
|
|
@@ -20,6 +23,8 @@ module Opener
|
|
20
23
|
# @option options [Array] :args Collection of arbitrary arguments to pass
|
21
24
|
# to the underlying kernel.
|
22
25
|
#
|
26
|
+
# @option options [String] :resource_path Path to the lexicons to use.
|
27
|
+
#
|
23
28
|
def initialize(options = {})
|
24
29
|
@args = options.delete(:args) || []
|
25
30
|
@options = options
|
@@ -34,14 +39,14 @@ module Opener
|
|
34
39
|
return "#{adjust_python_path} python -E #{kernel} #{lexicon_path} #{args.join(" ")}"
|
35
40
|
end
|
36
41
|
|
42
|
+
##
|
43
|
+
# @return [String]
|
44
|
+
#
|
37
45
|
def lexicon_path
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
else
|
43
|
-
return nil
|
44
|
-
end
|
46
|
+
path = options[:resource_path] || ENV['RESOURCE_PATH'] ||
|
47
|
+
ENV['POLARITY_LEXICON_PATH']
|
48
|
+
|
49
|
+
return path ? "--lexicon-path #{path}" : nil
|
45
50
|
end
|
46
51
|
|
47
52
|
##
|
@@ -52,21 +57,21 @@ module Opener
|
|
52
57
|
# @return [Array]
|
53
58
|
#
|
54
59
|
def run(input)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
return Opener::Core::ErrorLayer.new(input, error.message, self.class).add
|
61
|
-
end
|
60
|
+
stdout, stderr, process = capture(input)
|
61
|
+
|
62
|
+
raise stderr unless process.success?
|
63
|
+
|
64
|
+
return stdout
|
62
65
|
end
|
63
66
|
|
64
67
|
protected
|
68
|
+
|
65
69
|
##
|
66
70
|
# @return [String]
|
67
71
|
#
|
68
72
|
def adjust_python_path
|
69
73
|
site_packages = File.join(core_dir, 'site-packages')
|
74
|
+
|
70
75
|
"env PYTHONPATH=#{site_packages}:$PYTHONPATH"
|
71
76
|
end
|
72
77
|
|
@@ -29,15 +29,14 @@ Gem::Specification.new do |gem|
|
|
29
29
|
|
30
30
|
gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
|
31
31
|
|
32
|
+
gem.add_dependency 'opener-daemons', '~> 2.2'
|
33
|
+
gem.add_dependency 'opener-webservice', '~> 2.1'
|
34
|
+
gem.add_dependency 'opener-core', '~> 2.2'
|
35
|
+
|
32
36
|
gem.add_dependency 'rake'
|
33
|
-
gem.add_dependency 'sinatra'
|
34
|
-
gem.add_dependency 'httpclient'
|
35
|
-
gem.add_dependency 'puma'
|
36
|
-
gem.add_dependency 'opener-daemons'
|
37
|
-
gem.add_dependency 'opener-webservice'
|
38
|
-
gem.add_dependency 'opener-core', '~> 1.0'
|
39
37
|
gem.add_dependency 'nokogiri'
|
40
38
|
gem.add_dependency 'cliver'
|
39
|
+
gem.add_dependency 'slop', '~> 3.5'
|
41
40
|
|
42
41
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
43
42
|
gem.add_development_dependency 'cucumber'
|
metadata
CHANGED
@@ -1,59 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opener-polarity-tagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- development@olery.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: opener-daemons
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: opener-webservice
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: opener-core
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.2'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: nokogiri
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: cliver
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,47 +95,19 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: slop
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.5'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: nokogiri
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: cliver
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
110
|
+
version: '3.5'
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
112
|
name: rspec
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|