cycr 0.2.6 → 0.2.7
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/Rakefile +3 -2
- data/changelog.txt +2 -0
- data/integration/name_service.rb +57 -0
- data/lib/cyc/service/name_service.rb +123 -0
- data/lib/cyc/term.rb +49 -0
- data/lib/cyc/version.rb +1 -1
- data/lib/cycr.rb +2 -0
- metadata +9 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: 2d7f4bcddb89239483cb031ff210bf14f23a55e6
|
4
|
+
data.tar.gz: 2f070d448de23cb1c881638b2d9f914b558b1195
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9b016868803302a20f55688ed9192a84190a5caf2a6b59f716f10614f117bca91b7a33b7a74f4027651e524490f99b65d123e09711c388f85222111ad322275b
|
7
|
+
data.tar.gz: 318d115f7645310244a7480cad11917c4618219ddcb56ffa8566802f32e7068b4f9fee7685872b4c061acf7ee20fbe9b3659f96f9cbe221af86f030406d86e4c
|
data/Rakefile
CHANGED
@@ -11,6 +11,7 @@ task :test do
|
|
11
11
|
sh "rspec spec/parser.rb"
|
12
12
|
sh "rspec integration/assertion.rb"
|
13
13
|
sh "rspec integration/client.rb"
|
14
|
+
sh "rspec integration/name_service.rb"
|
14
15
|
end
|
15
16
|
|
16
17
|
desc "Build the gem"
|
@@ -19,7 +20,7 @@ task :build do
|
|
19
20
|
end
|
20
21
|
|
21
22
|
desc "Install the library at local machnie"
|
22
|
-
task :install => :build do
|
23
|
+
task :install => :build do
|
23
24
|
sh "sudo gem install #$gem_name -l"
|
24
25
|
end
|
25
26
|
|
@@ -30,7 +31,7 @@ end
|
|
30
31
|
|
31
32
|
desc "Clean"
|
32
33
|
task :clean do
|
33
|
-
sh "rm #$gem_name*.gem"
|
34
|
+
sh "rm #$gem_name*.gem"
|
34
35
|
end
|
35
36
|
|
36
37
|
desc "Show changelog from the last release"
|
data/changelog.txt
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.unshift "lib"
|
3
|
+
require 'cycr'
|
4
|
+
|
5
|
+
|
6
|
+
describe Cyc::Service::NameService do
|
7
|
+
let(:service) { Cyc::Service::NameService.new(@client) }
|
8
|
+
|
9
|
+
before(:all) do
|
10
|
+
@client = Cyc::Client.new()
|
11
|
+
#@client.debug = true
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
@client.close
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should find term by exact name" do
|
19
|
+
service.find_by_term_name("Dog").should_not == nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should find term by id" do
|
23
|
+
term = service.find_by_term_name("Dog")
|
24
|
+
service.find_by_id(term.id).should_not == nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should find concept by name" do
|
28
|
+
service.find_by_name("dog").should_not == nil
|
29
|
+
service.find_by_name("dog").should_not be_empty
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should find concept by label" do
|
33
|
+
service.find_by_label("dog").should_not == nil
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should convert Ruby term" do
|
37
|
+
term = service.convert_ruby_term(:Dog)
|
38
|
+
term.name.should == "Dog"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should transliterate non-ascii characters" do
|
42
|
+
service.find_by_term_name("Dóg").name.should == "Dog"
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "with term" do
|
46
|
+
let(:term) { service.find_by_term_name("Dog") }
|
47
|
+
|
48
|
+
it "should return canonical label" do
|
49
|
+
service.canonical_label(term).should == "dog"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should return labels" do
|
53
|
+
service.labels(term).should include("dogs")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'iconv'
|
3
|
+
|
4
|
+
module Cyc
|
5
|
+
module Service
|
6
|
+
class AmbiguousResult < Exception
|
7
|
+
attr_reader :results
|
8
|
+
|
9
|
+
def initialize(results)
|
10
|
+
super("Ambiguous prefered label results")
|
11
|
+
@results = results
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Class used to find Cyc terms by their name.
|
16
|
+
class NameService
|
17
|
+
attr_accessor :cyc
|
18
|
+
|
19
|
+
def initialize(cyc_client=Client.new,term_factory=Term)
|
20
|
+
@cyc = cyc_client
|
21
|
+
@cyc.connect
|
22
|
+
@factory = term_factory
|
23
|
+
end
|
24
|
+
|
25
|
+
# Look-up by +name+, i.e. the exact name of the Cyc term.
|
26
|
+
def find_by_term_name(name)
|
27
|
+
if name =~ /\A\[/
|
28
|
+
convert_ruby_term(eval(name))
|
29
|
+
else
|
30
|
+
term = @cyc.find_constant(transliterate(name))
|
31
|
+
if term
|
32
|
+
id = @cyc.compact_hl_external_id_string(term)
|
33
|
+
@factory.new(term,id)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Look-up by ID, i.e. external identifier of the term.
|
39
|
+
def find_by_id(id)
|
40
|
+
begin
|
41
|
+
term = @cyc.find_cycl_object_by_compact_hl_external_id_string(id)
|
42
|
+
if term and term!='<The'
|
43
|
+
@factory.new(term,id)
|
44
|
+
end
|
45
|
+
rescue CycError
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Approximate find by name - the result is ambiguous, so the result is an
|
51
|
+
# array.
|
52
|
+
def find_by_name(name)
|
53
|
+
result = @cyc.denotation_mapper(transliterate(name))
|
54
|
+
if result
|
55
|
+
result.select{|label,_,_| label == name }.
|
56
|
+
map{|_,_,ruby_term| convert_ruby_term(ruby_term) }
|
57
|
+
else
|
58
|
+
[]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Find term by prefered +label+. In rare cases the result is ambiguous - an
|
63
|
+
# AmbiguousResult is raised then. You can get the result, by calling 'result' on
|
64
|
+
# the returned exception.
|
65
|
+
def find_by_label(label)
|
66
|
+
result = @cyc.cyc_query( -> { '`(#$prettyString-Canonical ?s ' + transliterate(label).to_cyc + ')' }, :EnglishMt)
|
67
|
+
if result
|
68
|
+
result.map!{|e| convert_ruby_term(extract_term_name(e.first))}
|
69
|
+
if result.size == 1
|
70
|
+
result.first
|
71
|
+
else
|
72
|
+
raise AmbiguousResult.new(result)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Returns canonical label for the +term+.
|
78
|
+
def canonical_label(term)
|
79
|
+
(@cyc.cyc_query(-> { '\'(#$prettyString-Canonical ' + term.to_cyc(true) + ' ?s)'}, :EnglishMt) || []).
|
80
|
+
map{|e| e.first.last }.first
|
81
|
+
end
|
82
|
+
|
83
|
+
# Returns all (non-canonical) labels for the +term+.
|
84
|
+
def labels(term)
|
85
|
+
begin
|
86
|
+
(@cyc.cyc_query(-> { '\'(#$prettyString ' + term.to_cyc(true) + ' ?s)'}, :EnglishMt) || []).
|
87
|
+
map{|e| e.first.last }
|
88
|
+
rescue CycError
|
89
|
+
[]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Close connection to Cyc server.
|
94
|
+
def close
|
95
|
+
@cyc.close
|
96
|
+
end
|
97
|
+
|
98
|
+
# Convert Ruby term (e.g. :Dog) to cyc term representation.
|
99
|
+
def convert_ruby_term(term)
|
100
|
+
id = @cyc.compact_hl_external_id_string(term)
|
101
|
+
if id
|
102
|
+
@factory.new(term,id)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
# Extracts term name from a result that might be either Lisp pair or Lisp
|
108
|
+
# list.
|
109
|
+
def extract_term_name(expression)
|
110
|
+
if expression[1] == "."
|
111
|
+
expression[2]
|
112
|
+
else
|
113
|
+
expression[1..-1]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Transliterate non-ascii characters.
|
118
|
+
def transliterate(string)
|
119
|
+
Iconv.iconv('ascii//translit//ignore', 'utf-8', string).join("")
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/lib/cyc/term.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
module Cyc
|
2
|
+
class Term
|
3
|
+
# Create new Term using Ruby representation of the term (Symbol or
|
4
|
+
# Array).
|
5
|
+
def initialize(ruby_term,id)
|
6
|
+
@ruby_term = ruby_term
|
7
|
+
@id = id
|
8
|
+
end
|
9
|
+
|
10
|
+
# Return Ruby representation of the term.
|
11
|
+
def to_ruby
|
12
|
+
@ruby_term
|
13
|
+
end
|
14
|
+
|
15
|
+
# Return external ID of the term.
|
16
|
+
def id
|
17
|
+
@id
|
18
|
+
end
|
19
|
+
|
20
|
+
# Return Cyc-protocol compatible representation of the term.
|
21
|
+
def to_cyc(raw=false)
|
22
|
+
self.to_ruby.to_cyc(raw)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Inspect the term.
|
26
|
+
def inspect
|
27
|
+
"#{@ruby_term}:#{@id}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def name
|
31
|
+
self.to_ruby.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
def ==(other)
|
35
|
+
return false if !(self.class === other)
|
36
|
+
@ruby_term == other.to_ruby
|
37
|
+
end
|
38
|
+
|
39
|
+
def eql?(other)
|
40
|
+
self == other
|
41
|
+
end
|
42
|
+
|
43
|
+
def hash
|
44
|
+
@ruby_term.hash
|
45
|
+
end
|
46
|
+
|
47
|
+
alias to_s inspect
|
48
|
+
end
|
49
|
+
end
|
data/lib/cyc/version.rb
CHANGED
data/lib/cycr.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cycr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Aleksander Pohl
|
@@ -10,12 +9,11 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2015-08-21 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rspec
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
18
|
- - ~>
|
21
19
|
- !ruby/object:Gem::Version
|
@@ -23,7 +21,6 @@ dependencies:
|
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
25
|
- - ~>
|
29
26
|
- !ruby/object:Gem::Version
|
@@ -31,7 +28,6 @@ dependencies:
|
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: em-synchrony
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
32
|
- - ~>
|
37
33
|
- !ruby/object:Gem::Version
|
@@ -39,7 +35,6 @@ dependencies:
|
|
39
35
|
type: :development
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
39
|
- - ~>
|
45
40
|
- !ruby/object:Gem::Version
|
@@ -47,7 +42,6 @@ dependencies:
|
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: ref
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
46
|
- - ~>
|
53
47
|
- !ruby/object:Gem::Version
|
@@ -55,7 +49,6 @@ dependencies:
|
|
55
49
|
type: :runtime
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
53
|
- - ~>
|
61
54
|
- !ruby/object:Gem::Version
|
@@ -74,6 +67,7 @@ files:
|
|
74
67
|
- cycr.gemspec
|
75
68
|
- integration/assertion.rb
|
76
69
|
- integration/client.rb
|
70
|
+
- integration/name_service.rb
|
77
71
|
- lib/cyc/assertion.rb
|
78
72
|
- lib/cyc/builder.rb
|
79
73
|
- lib/cyc/cache.rb
|
@@ -87,9 +81,11 @@ files:
|
|
87
81
|
- lib/cyc/exception.rb
|
88
82
|
- lib/cyc/extensions.rb
|
89
83
|
- lib/cyc/parser.rb
|
84
|
+
- lib/cyc/service/name_service.rb
|
90
85
|
- lib/cyc/sexpr.rex
|
91
86
|
- lib/cyc/sexpr.rex.rb
|
92
87
|
- lib/cyc/symbol.rb
|
88
|
+
- lib/cyc/term.rb
|
93
89
|
- lib/cyc/variable.rb
|
94
90
|
- lib/cyc/version.rb
|
95
91
|
- lib/cycr.rb
|
@@ -97,6 +93,7 @@ files:
|
|
97
93
|
- spec/parser.rb
|
98
94
|
homepage: http://github.com/apohllo/cycr
|
99
95
|
licenses: []
|
96
|
+
metadata: {}
|
100
97
|
post_install_message:
|
101
98
|
rdoc_options:
|
102
99
|
- --main
|
@@ -104,26 +101,25 @@ rdoc_options:
|
|
104
101
|
require_paths:
|
105
102
|
- lib
|
106
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
104
|
requirements:
|
109
105
|
- - ! '>='
|
110
106
|
- !ruby/object:Gem::Version
|
111
107
|
version: 1.9.2
|
112
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
109
|
requirements:
|
115
110
|
- - ! '>='
|
116
111
|
- !ruby/object:Gem::Version
|
117
112
|
version: '0'
|
118
113
|
requirements: []
|
119
114
|
rubyforge_project:
|
120
|
-
rubygems_version:
|
115
|
+
rubygems_version: 2.2.2
|
121
116
|
signing_key:
|
122
|
-
specification_version:
|
117
|
+
specification_version: 4
|
123
118
|
summary: Ruby client for the (Open)Cyc server
|
124
119
|
test_files:
|
125
120
|
- spec/parser.rb
|
126
121
|
- spec/conversion.rb
|
122
|
+
- integration/name_service.rb
|
127
123
|
- integration/assertion.rb
|
128
124
|
- integration/client.rb
|
129
125
|
has_rdoc: true
|