opener-opinion-detector-basic 1.1.0 → 2.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 +4 -4
- data/README.md +62 -53
- data/bin/opinion-detector-basic +2 -10
- data/bin/opinion-detector-basic-daemon +6 -5
- data/bin/opinion-detector-basic-server +6 -4
- data/exec/opinion-detector-basic.rb +3 -3
- data/lib/opener/opinion_detector_basic.rb +26 -22
- data/lib/opener/opinion_detector_basic/cli.rb +62 -0
- data/lib/opener/opinion_detector_basic/server.rb +4 -5
- data/lib/opener/opinion_detector_basic/version.rb +1 -1
- data/opener-opinion-detector-basic.gemspec +5 -6
- metadata +26 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ffb23060aa771379f81ad7e3afeb854dc0b02f9
|
4
|
+
data.tar.gz: 6c3cc572d420793124bef66ee3e8a43e4d09ee61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ffc414059c2e342934f708b04065defa434f572cf90bf1f587a4a6abb8baee4147eb1fdd0a0c0f6f7f6acf4fc18611780792f91974f378f872a4fa7697ca227
|
7
|
+
data.tar.gz: 37f14ff748c15df4d9454b7862ec1b459c75f860ccb6b6cdfea2ca51bc2e63f67aa42352b71d7acd698f583f14a475e815aa59f8cf86390405cd6bc13cd05863
|
data/README.md
CHANGED
@@ -1,32 +1,43 @@
|
|
1
|
-
Opinion Detector Basic
|
2
|
-
---------------------
|
1
|
+
# Opinion Detector Basic
|
3
2
|
|
4
|
-
This module implements a opinion detector for all the languages covered in the
|
5
|
-
|
3
|
+
This module implements a opinion detector for all the languages covered in the
|
4
|
+
OpeNER project (English, Dutch, German, Italian, Spanish and French). The
|
5
|
+
language is determined by the "xml:lang" attribut in the input KAF file.
|
6
|
+
Depending on the value of this attribute, the corresponding lexicon will be
|
7
|
+
loaded. This module detects three elements of the opinions:
|
6
8
|
|
7
9
|
* Expression: the actual opinion expression
|
8
10
|
* Target: about what is the previous expression
|
9
11
|
* Holder: who is stating that expression
|
10
12
|
|
11
|
-
This module is based on a set of rules for extracting the opinion expressions
|
12
|
-
|
13
|
+
This module is based on a set of rules for extracting the opinion expressions
|
14
|
+
first (taking into account polarity words and sentiment modifiers) and then
|
15
|
+
other rules to determine the targets and holders for those expressions. The
|
16
|
+
input KAF file needs to be processed at least with the tokenizer, pos-tagger and
|
17
|
+
polarity-tagger.
|
13
18
|
|
14
|
-
|
19
|
+
## Confused by some terminology?
|
15
20
|
|
16
|
-
This software is part of a larger collection of natural language processing
|
21
|
+
This software is part of a larger collection of natural language processing
|
22
|
+
tools known as "the OpeNER project". You can find more information about the
|
23
|
+
project at [the OpeNER portal](http://opener-project.github.io). There you can
|
24
|
+
also find references to terms like KAF (an XML standard to represent linguistic
|
25
|
+
annotations in texts), component, cores, scenario's and pipelines.
|
17
26
|
|
18
|
-
Quick Use Example
|
19
|
-
-----------------
|
27
|
+
## Quick Use Example
|
20
28
|
|
21
29
|
Installing the opinion-detector-basic can be done by executing:
|
22
30
|
|
23
31
|
gem install opener-opinion-detector-basic
|
24
32
|
|
25
|
-
Please
|
33
|
+
Please keep in mind that all components in OpeNER take KAF as an input and
|
34
|
+
output KAF by default.
|
26
35
|
|
27
36
|
### Command line interface
|
28
37
|
|
29
|
-
The input KAF file has to be annotated with at least the term layer, with
|
38
|
+
The input KAF file has to be annotated with at least the term layer, with
|
39
|
+
polarity information. Correct input files for this module are the output KAF
|
40
|
+
files from the polarity tagger module
|
30
41
|
|
31
42
|
To tag an input KAF file example.kaf with opinions you can run:
|
32
43
|
|
@@ -36,25 +47,23 @@ The output will the input KAF file extended with the opinion layer.
|
|
36
47
|
|
37
48
|
Excerpt of example output.
|
38
49
|
|
39
|
-
|
40
|
-
<
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
</opinions>
|
57
|
-
```
|
50
|
+
<opinions>
|
51
|
+
<opinion oid="o1">
|
52
|
+
<opinion_target>
|
53
|
+
<!--hotel-->
|
54
|
+
<span>
|
55
|
+
<target id="t_6"/>
|
56
|
+
</span>
|
57
|
+
</opinion_target>
|
58
|
+
<opinion_expression polarity="positive" strength="2">
|
59
|
+
<!--heel mooi-->
|
60
|
+
<span>
|
61
|
+
<target id="t_4"/>
|
62
|
+
<target id="t_5"/>
|
63
|
+
</span>
|
64
|
+
</opinion_expression>
|
65
|
+
</opinion>
|
66
|
+
</opinions>
|
58
67
|
|
59
68
|
### Webservices
|
60
69
|
|
@@ -62,7 +71,8 @@ You can launch a webservice by executing:
|
|
62
71
|
|
63
72
|
opinion-detector-basic-server
|
64
73
|
|
65
|
-
This will launch a mini webserver with the webservice. It defaults to port 9292,
|
74
|
+
This will launch a mini webserver with the webservice. It defaults to port 9292,
|
75
|
+
so you can access it at <http://localhost:9292>.
|
66
76
|
|
67
77
|
To launch it on a different port provide the `-p [port-number]` option like this:
|
68
78
|
|
@@ -70,19 +80,24 @@ To launch it on a different port provide the `-p [port-number]` option like this
|
|
70
80
|
|
71
81
|
It then launches at <http://localhost:1234>
|
72
82
|
|
73
|
-
Documentation on the Webservice is provided by surfing to the urls provided
|
83
|
+
Documentation on the Webservice is provided by surfing to the urls provided
|
84
|
+
above. For more information on how to launch a webservice run the command with
|
85
|
+
the `--help` option.
|
74
86
|
|
75
87
|
### Daemon
|
76
88
|
|
77
|
-
Last but not least the opinion detector basic comes shipped with a daemon that
|
89
|
+
Last but not least the opinion detector basic comes shipped with a daemon that
|
90
|
+
can read jobs (and write) jobs to and from Amazon SQS queues. For more
|
91
|
+
information type:
|
78
92
|
|
79
93
|
opinion-detector-basic-daemon -h
|
80
94
|
|
95
|
+
## Description of dependencies
|
81
96
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
97
|
+
This component runs best if you run it in an environment suited for OpeNER
|
98
|
+
components. You can find an installation guide and helper tools in the
|
99
|
+
[OpeNER installer](https://github.com/opener-project/opener-installer) and an
|
100
|
+
[installation guide on the Opener Website](http://opener-project.github.io/getting-started/how-to/local-installation.html)
|
86
101
|
|
87
102
|
At least you need the following system setup:
|
88
103
|
|
@@ -92,32 +107,26 @@ At least you need the following system setup:
|
|
92
107
|
* Python 2.6
|
93
108
|
* lxml: library for processing xml in python
|
94
109
|
|
95
|
-
Domain Adaption
|
96
|
-
---------------
|
97
|
-
|
98
|
-
TODO
|
110
|
+
## Domain Adaption
|
99
111
|
|
100
|
-
|
101
|
-
------------------
|
112
|
+
TODO
|
102
113
|
|
103
|
-
|
114
|
+
## Language Extension
|
104
115
|
|
116
|
+
TODO
|
105
117
|
|
106
|
-
Where to go from here
|
107
|
-
---------------------
|
118
|
+
## Where to go from here
|
108
119
|
|
109
120
|
* [Check the project website](http://opener-project.github.io)
|
110
121
|
* [Checkout the webservice](http://opener.olery.com/opinion-detector-basic)
|
111
122
|
|
112
|
-
Report problem/Get help
|
113
|
-
-----------------------
|
123
|
+
## Report problem/Get help
|
114
124
|
|
115
|
-
If you encounter problems, please email <support@opener-project.eu> or leave an
|
125
|
+
If you encounter problems, please email <support@opener-project.eu> or leave an
|
126
|
+
issue in the
|
116
127
|
[issue tracker](https://github.com/opener-project/opinion-detector-basic/issues).
|
117
128
|
|
118
|
-
|
119
|
-
Contributing
|
120
|
-
------------
|
129
|
+
## Contributing
|
121
130
|
|
122
131
|
1. Fork it <http://github.com/opener-project/opinion-detector-basic/fork>
|
123
132
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
data/bin/opinion-detector-basic
CHANGED
@@ -2,14 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative '../lib/opener/opinion_detector_basic'
|
4
4
|
|
5
|
-
|
6
|
-
if STDIN.tty?
|
7
|
-
input = nil
|
8
|
-
else
|
9
|
-
input = STDIN.read
|
10
|
-
end
|
5
|
+
cli = Opener::OpinionDetectorBasic::CLI.new
|
11
6
|
|
12
|
-
|
13
|
-
stdout, stderr, process = kernel.run(input)
|
14
|
-
|
15
|
-
puts stdout
|
7
|
+
cli.run
|
@@ -2,9 +2,10 @@
|
|
2
2
|
|
3
3
|
require 'opener/daemons'
|
4
4
|
|
5
|
-
exec_path
|
6
|
-
|
7
|
-
|
8
|
-
:name => 'opinion-detector-basic',
|
5
|
+
exec_path = File.expand_path('../../exec/opinion-detector-basic.rb', __FILE__)
|
6
|
+
controller = Opener::Daemons::Controller.new(
|
7
|
+
:name => 'opener-opinion-detector-basic',
|
9
8
|
:exec_path => exec_path
|
10
|
-
)
|
9
|
+
)
|
10
|
+
|
11
|
+
controller.run
|
@@ -1,8 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'opener/webservice'
|
4
4
|
|
5
|
-
|
5
|
+
parser = Opener::Webservice::OptionParser.new(
|
6
|
+
'opener-opinion-detector-basic',
|
7
|
+
File.expand_path('../../config.ru', __FILE__)
|
8
|
+
)
|
6
9
|
|
7
|
-
|
8
|
-
cli.run
|
10
|
+
parser.run
|
@@ -1,9 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'opener/daemons'
|
4
|
+
|
4
5
|
require_relative '../lib/opener/opinion_detector_basic'
|
5
6
|
|
6
|
-
|
7
|
-
daemon = Opener::Daemons::Daemon.new(Opener::OpinionDetectorBasic, options)
|
7
|
+
daemon = Opener::Daemons::Daemon.new(Opener::OpinionDetectorBasic)
|
8
8
|
|
9
|
-
daemon.start
|
9
|
+
daemon.start
|
@@ -1,25 +1,31 @@
|
|
1
1
|
require 'open3'
|
2
|
-
require '
|
2
|
+
require 'slop'
|
3
3
|
|
4
4
|
require_relative 'opinion_detector_basic/version'
|
5
|
+
require_relative 'opinion_detector_basic/cli'
|
5
6
|
|
6
7
|
module Opener
|
7
|
-
|
8
|
-
|
9
8
|
##
|
10
|
-
#
|
9
|
+
# Rule based opinion detector.
|
11
10
|
#
|
12
11
|
# @!attribute [r] args
|
13
12
|
# @return [Array]
|
13
|
+
#
|
14
14
|
# @!attribute [r] options
|
15
15
|
# @return [Hash]
|
16
16
|
#
|
17
17
|
class OpinionDetectorBasic
|
18
18
|
attr_reader :args, :options
|
19
19
|
|
20
|
+
##
|
21
|
+
# @param [Hash] options
|
22
|
+
#
|
23
|
+
# @option options [Array] :args Command-line arguments to pass to the
|
24
|
+
# underlying Python kernel.
|
25
|
+
#
|
20
26
|
def initialize(options = {})
|
21
|
-
@args
|
22
|
-
@options
|
27
|
+
@args = options.delete(:args) || []
|
28
|
+
@options = options
|
23
29
|
end
|
24
30
|
|
25
31
|
##
|
@@ -32,36 +38,35 @@ module Opener
|
|
32
38
|
end
|
33
39
|
|
34
40
|
##
|
35
|
-
#
|
36
|
-
#
|
41
|
+
# Processes an input KAF document and returns the results as a new KAF
|
42
|
+
# document.
|
37
43
|
#
|
38
|
-
# @param [String] input
|
39
|
-
# @return [
|
44
|
+
# @param [String] input
|
45
|
+
# @return [String]
|
40
46
|
#
|
41
47
|
def run(input)
|
42
|
-
|
43
|
-
stdout, stderr, process = capture(input)
|
44
|
-
raise stderr unless process.success?
|
45
|
-
return stdout
|
48
|
+
stdout, stderr, process = capture(input)
|
46
49
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
+
raise stderr unless process.success?
|
51
|
+
|
52
|
+
return stdout
|
50
53
|
end
|
51
54
|
|
52
55
|
protected
|
56
|
+
|
53
57
|
##
|
54
58
|
# @return [String]
|
55
59
|
#
|
56
60
|
def adjust_python_path
|
57
61
|
site_packages = File.join(core_dir, 'site-packages')
|
58
|
-
|
62
|
+
|
63
|
+
return "env PYTHONPATH=#{site_packages}:$PYTHONPATH"
|
59
64
|
end
|
65
|
+
|
60
66
|
##
|
61
67
|
# capture3 method doesn't work properly with Jruby, so
|
62
68
|
# this is a workaround
|
63
69
|
#
|
64
|
-
|
65
70
|
def capture(input)
|
66
71
|
Open3.popen3(*command.split(" ")) {|i, o, e, t|
|
67
72
|
out_reader = Thread.new { o.read }
|
@@ -91,9 +96,8 @@ module Opener
|
|
91
96
|
#
|
92
97
|
def language(input)
|
93
98
|
document = Nokogiri::XML(input)
|
94
|
-
language = document.at('KAF').attr('xml:lang')
|
95
|
-
return language
|
96
|
-
end
|
97
99
|
|
100
|
+
return document.at('KAF').attr('xml:lang')
|
101
|
+
end
|
98
102
|
end # OpinionDetectorBasic
|
99
103
|
end # Opener
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Opener
|
2
|
+
class OpinionDetectorBasic
|
3
|
+
##
|
4
|
+
# CLI wrapper around {Opener::OpinionDetectorBasic} using Slop.
|
5
|
+
#
|
6
|
+
# @!attribute [r] parser
|
7
|
+
# @return [Slop]
|
8
|
+
#
|
9
|
+
class CLI
|
10
|
+
attr_reader :parser
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@parser = configure_slop
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# @param [Array] argv
|
18
|
+
#
|
19
|
+
def run(argv = ARGV)
|
20
|
+
parser.parse(argv)
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# @return [Slop]
|
25
|
+
#
|
26
|
+
def configure_slop
|
27
|
+
return Slop.new(:strict => false, :indent => 2, :help => true) do
|
28
|
+
banner 'Usage: opinion-detector-basic [OPTIONS]'
|
29
|
+
|
30
|
+
separator <<-EOF.chomp
|
31
|
+
|
32
|
+
About:
|
33
|
+
|
34
|
+
Rule based opinion detection for various languages such as Dutch and
|
35
|
+
English. This command reads input from STDIN.
|
36
|
+
|
37
|
+
Example:
|
38
|
+
|
39
|
+
cat some_file.kaf | opinion-detector-basic
|
40
|
+
EOF
|
41
|
+
|
42
|
+
separator "\nOptions:\n"
|
43
|
+
|
44
|
+
on :v, :version, 'Shows the current version' do
|
45
|
+
abort "opinion-detector-basic v#{VERSION} on #{RUBY_DESCRIPTION}"
|
46
|
+
end
|
47
|
+
|
48
|
+
run do |opts, args|
|
49
|
+
detector = OpinionDetectorBasic.new(
|
50
|
+
:args => args,
|
51
|
+
:domain => opts[:domain]
|
52
|
+
)
|
53
|
+
|
54
|
+
input = STDIN.tty? ? nil : STDIN.read
|
55
|
+
|
56
|
+
puts detector.run(input)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end # CLI
|
61
|
+
end # OpinionDetectorBasic
|
62
|
+
end # Opener
|
@@ -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
|
# Basic opinion detector 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 = OpinionDetectorBasic
|
12
|
+
self.accepted_params = [:input]
|
14
13
|
end # Server
|
15
14
|
end # OpinionDetectorBasic
|
16
15
|
end # Opener
|
@@ -28,15 +28,14 @@ Gem::Specification.new do |gem|
|
|
28
28
|
|
29
29
|
gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
|
30
30
|
|
31
|
+
gem.add_dependency 'opener-daemons', '~> 2.2'
|
32
|
+
gem.add_dependency 'opener-webservice', '~> 2.1'
|
33
|
+
gem.add_dependency 'opener-core', '~> 2.2'
|
34
|
+
|
31
35
|
gem.add_dependency 'rake'
|
32
|
-
gem.add_dependency 'sinatra'
|
33
|
-
gem.add_dependency 'httpclient'
|
34
|
-
gem.add_dependency 'puma'
|
35
|
-
gem.add_dependency 'opener-daemons'
|
36
|
-
gem.add_dependency 'opener-core', '~> 1.0'
|
37
|
-
gem.add_dependency 'opener-webservice'
|
38
36
|
gem.add_dependency 'nokogiri'
|
39
37
|
gem.add_dependency 'cliver'
|
38
|
+
gem.add_dependency 'slop', '~> 3.5'
|
40
39
|
|
41
40
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
42
41
|
gem.add_development_dependency 'cucumber'
|
metadata
CHANGED
@@ -1,73 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opener-opinion-detector-basic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.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-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: sinatra
|
14
|
+
name: opener-daemons
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - "~>"
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
19
|
+
version: '2.2'
|
34
20
|
type: :runtime
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- - "
|
24
|
+
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
26
|
+
version: '2.2'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
28
|
+
name: opener-webservice
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- - "
|
31
|
+
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
33
|
+
version: '2.1'
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- - "
|
38
|
+
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
40
|
+
version: '2.1'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
42
|
+
name: opener-core
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- - "
|
45
|
+
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
47
|
+
version: '2.2'
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- - "
|
52
|
+
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
54
|
+
version: '2.2'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: rake
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - ">="
|
@@ -81,21 +67,7 @@ dependencies:
|
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '1.0'
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '1.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: opener-webservice
|
70
|
+
name: nokogiri
|
99
71
|
requirement: !ruby/object:Gem::Requirement
|
100
72
|
requirements:
|
101
73
|
- - ">="
|
@@ -109,7 +81,7 @@ dependencies:
|
|
109
81
|
- !ruby/object:Gem::Version
|
110
82
|
version: '0'
|
111
83
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
84
|
+
name: cliver
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
87
|
- - ">="
|
@@ -123,19 +95,19 @@ dependencies:
|
|
123
95
|
- !ruby/object:Gem::Version
|
124
96
|
version: '0'
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
98
|
+
name: slop
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
|
-
- - "
|
101
|
+
- - "~>"
|
130
102
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
103
|
+
version: '3.5'
|
132
104
|
type: :runtime
|
133
105
|
prerelease: false
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
135
107
|
requirements:
|
136
|
-
- - "
|
108
|
+
- - "~>"
|
137
109
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
110
|
+
version: '3.5'
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
112
|
name: rspec
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -322,6 +294,7 @@ files:
|
|
322
294
|
- exec/opinion-detector-basic.rb
|
323
295
|
- ext/hack/Rakefile
|
324
296
|
- lib/opener/opinion_detector_basic.rb
|
297
|
+
- lib/opener/opinion_detector_basic/cli.rb
|
325
298
|
- lib/opener/opinion_detector_basic/public/markdown.css
|
326
299
|
- lib/opener/opinion_detector_basic/server.rb
|
327
300
|
- lib/opener/opinion_detector_basic/version.rb
|