cycr 0.0.3
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.
- data/README.txt +0 -0
- data/Rakefile +23 -0
- data/cycr.gemspec +20 -0
- data/lib/cycr/assertion.rb +14 -0
- data/lib/cycr/client.rb +208 -0
- data/lib/cycr/collection.rb +76 -0
- data/lib/cycr/constants.rb +8 -0
- data/lib/cycr/domains.lisp +584 -0
- data/lib/cycr/extensions.rb +26 -0
- data/lib/cycr/nart.rb +21 -0
- data/lib/cycr/parser.rb +63 -0
- data/lib/cycr/sexpr.flex +74 -0
- data/lib/cycr/sexpr.rex +55 -0
- data/lib/cycr/sexpr.rex.rb +136 -0
- data/lib/cycr/words_reader.lisp +204 -0
- data/lib/cycr.rb +1 -0
- data/spec/assertion.rb +36 -0
- data/spec/client.rb +39 -0
- metadata +101 -0
data/lib/cycr/sexpr.flex
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
package pl.apohllo.lexicon.pwn.server;
|
2
|
+
|
3
|
+
import java.io.StringReader;
|
4
|
+
%%
|
5
|
+
|
6
|
+
%class Lexer
|
7
|
+
%unicode
|
8
|
+
%line
|
9
|
+
%public
|
10
|
+
%type Symbol
|
11
|
+
|
12
|
+
%{
|
13
|
+
StringBuffer string = new StringBuffer();
|
14
|
+
|
15
|
+
public Lexer(String input){
|
16
|
+
this.zzReader = new StringReader(input);
|
17
|
+
}
|
18
|
+
|
19
|
+
private Symbol symbol(int type) {
|
20
|
+
return new Symbol(type, yyline, yycolumn);
|
21
|
+
}
|
22
|
+
private Symbol symbol(int type, String value) {
|
23
|
+
return new Symbol(type, yyline, yycolumn, value);
|
24
|
+
}
|
25
|
+
%}
|
26
|
+
|
27
|
+
LineTerminator = \r|\n|\r\n
|
28
|
+
InputCharacter = [^\r\n\"\(\):& ]
|
29
|
+
WhiteSpace = {LineTerminator} | [ \t\f]
|
30
|
+
|
31
|
+
Symbol = : {InputCharacter}+
|
32
|
+
|
33
|
+
Atom = {InputCharacter}+
|
34
|
+
|
35
|
+
OpenPar = "("
|
36
|
+
ClosePar = ")"
|
37
|
+
|
38
|
+
%state STRING
|
39
|
+
|
40
|
+
|
41
|
+
%%
|
42
|
+
|
43
|
+
<YYINITIAL> {
|
44
|
+
/* keywords */
|
45
|
+
{OpenPar} { return symbol(Symbol.OPEN_PAR); }
|
46
|
+
{ClosePar} { return symbol(Symbol.CLOSE_PAR); }
|
47
|
+
|
48
|
+
/* identifiers */
|
49
|
+
{Symbol} { return symbol(Symbol.SYMBOL,yytext()); }
|
50
|
+
{Atom} { return symbol(Symbol.ATOM,yytext()); }
|
51
|
+
|
52
|
+
|
53
|
+
/* literals */
|
54
|
+
\" { string.setLength(0); yybegin(STRING); }
|
55
|
+
|
56
|
+
/* whitespace */
|
57
|
+
{WhiteSpace} { /* ignore */ }
|
58
|
+
}
|
59
|
+
|
60
|
+
<STRING> {
|
61
|
+
\" { yybegin(YYINITIAL);
|
62
|
+
return symbol(Symbol.STRING_LITERAL, string.toString()); }
|
63
|
+
[^\n\r\"\\]+ { string.append( yytext() ); }
|
64
|
+
\\t { string.append('\t'); }
|
65
|
+
\\n { string.append('\n'); }
|
66
|
+
|
67
|
+
\\r { string.append('\r'); }
|
68
|
+
\\\" { string.append('\"'); }
|
69
|
+
\\ { string.append('\\'); }
|
70
|
+
}
|
71
|
+
|
72
|
+
/* error fallback */
|
73
|
+
.|\n { throw new Error("Illegal character <"+ yytext()+">"); }
|
74
|
+
|
data/lib/cycr/sexpr.rex
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
class Cyc::SExpressionLexer
|
2
|
+
|
3
|
+
option
|
4
|
+
independent
|
5
|
+
|
6
|
+
macro
|
7
|
+
LINE_TERMINATOR \r|\n|\r\n
|
8
|
+
INPUT_CHARACTER [^\r\n\"\(\):& ]
|
9
|
+
WHITE_SPACE [\ \t\f\r\n] | \r\n
|
10
|
+
SYMBOL :[^<>\r\n\"\(\):&\ ]+
|
11
|
+
CYC_SYMBOL \#\$[a-zA-Z0-9-]+
|
12
|
+
ATOM [^\r\n\"\(\):&\ ]+
|
13
|
+
OPEN_PAR \(
|
14
|
+
CLOSE_PAR \)
|
15
|
+
QUOTE \"
|
16
|
+
OPEN_AS_QUOTE \#<AS:
|
17
|
+
OPEN_LIST_QUOTE \#<
|
18
|
+
CLOSE_LIST_QUOTE >
|
19
|
+
DOT \.
|
20
|
+
|
21
|
+
|
22
|
+
rule
|
23
|
+
# lists
|
24
|
+
{OPEN_AS_QUOTE} { [:open_as,text] }
|
25
|
+
{OPEN_LIST_QUOTE} { [:open_quote,text] }
|
26
|
+
{CLOSE_LIST_QUOTE} { [:close_quote,text] }
|
27
|
+
{DOT}{DOT}{DOT} { [:continuation] }
|
28
|
+
# keywords
|
29
|
+
{OPEN_PAR} { [:open_par,text] }
|
30
|
+
{CLOSE_PAR} { [:close_par,text] }
|
31
|
+
NIL { [:nil,text] }
|
32
|
+
# identifiers
|
33
|
+
{SYMBOL} { [:symbol,text] }
|
34
|
+
{CYC_SYMBOL} { [:cyc_symbol,text] }
|
35
|
+
{ATOM} { [:atom,text] }
|
36
|
+
# literals
|
37
|
+
{QUOTE} { state = :STRING; @str = ""; [:in_string] }
|
38
|
+
# whitespace
|
39
|
+
{WHITE_SPACE} # ignore
|
40
|
+
:STRING {QUOTE} { state = nil; [:string,@str] }
|
41
|
+
:STRING [^\n\r\"\\]+ { @str << text; [:in_string]}
|
42
|
+
:STRING \t { @str << '\t'; [:in_string] }
|
43
|
+
:STRING \n { @str << '\n'; [:in_string] }
|
44
|
+
:STRING \r { @str << '\r'; [:in_string] }
|
45
|
+
:STRING \\" { @str << '\"'; [:in_string] }
|
46
|
+
:STRING \\ { @str << '\\'; [:in_string] }
|
47
|
+
# error fallback
|
48
|
+
.|\n { raise "Illegal character <#{text}>" }
|
49
|
+
inner
|
50
|
+
def do_parse
|
51
|
+
# while !(token = next_token).nil?
|
52
|
+
# print " #{token[0]}:#{token[1]}" unless token[0] == :in_string
|
53
|
+
# end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
#--
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by rex 1.0.2
|
4
|
+
# from lexical definition file "sexpr.rex".
|
5
|
+
#++
|
6
|
+
|
7
|
+
module Cyc
|
8
|
+
class SExpressionLexer
|
9
|
+
require 'strscan'
|
10
|
+
|
11
|
+
class ScanError < StandardError ; end
|
12
|
+
|
13
|
+
attr_reader :lineno
|
14
|
+
attr_reader :filename
|
15
|
+
|
16
|
+
def scan_setup ; end
|
17
|
+
|
18
|
+
def action &block
|
19
|
+
yield
|
20
|
+
end
|
21
|
+
|
22
|
+
def scan_str( str )
|
23
|
+
scan_evaluate str
|
24
|
+
do_parse
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_file( filename )
|
28
|
+
@filename = filename
|
29
|
+
open(filename, "r") do |f|
|
30
|
+
scan_evaluate f.read
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def scan_file( filename )
|
35
|
+
load_file filename
|
36
|
+
do_parse
|
37
|
+
end
|
38
|
+
|
39
|
+
def next_token
|
40
|
+
@rex_tokens.shift
|
41
|
+
end
|
42
|
+
|
43
|
+
def scan_evaluate( str )
|
44
|
+
scan_setup
|
45
|
+
@rex_tokens = []
|
46
|
+
@lineno = 1
|
47
|
+
ss = StringScanner.new(str)
|
48
|
+
state = nil
|
49
|
+
until ss.eos?
|
50
|
+
text = ss.peek(1)
|
51
|
+
@lineno += 1 if text == "\n"
|
52
|
+
case state
|
53
|
+
when nil
|
54
|
+
case
|
55
|
+
when (text = ss.scan(/\#<AS:/))
|
56
|
+
@rex_tokens.push action { [:open_as,text] }
|
57
|
+
|
58
|
+
when (text = ss.scan(/\#</))
|
59
|
+
@rex_tokens.push action { [:open_quote,text] }
|
60
|
+
|
61
|
+
when (text = ss.scan(/>/))
|
62
|
+
@rex_tokens.push action { [:close_quote,text] }
|
63
|
+
|
64
|
+
when (text = ss.scan(/\.\.\./))
|
65
|
+
@rex_tokens.push action { [:continuation] }
|
66
|
+
|
67
|
+
when (text = ss.scan(/\(/))
|
68
|
+
@rex_tokens.push action { [:open_par,text] }
|
69
|
+
|
70
|
+
when (text = ss.scan(/\)/))
|
71
|
+
@rex_tokens.push action { [:close_par,text] }
|
72
|
+
|
73
|
+
when (text = ss.scan(/NIL/))
|
74
|
+
@rex_tokens.push action { [:nil,text] }
|
75
|
+
|
76
|
+
when (text = ss.scan(/:[^<>\r\n\"\(\):&\ ]+/))
|
77
|
+
@rex_tokens.push action { [:symbol,text] }
|
78
|
+
|
79
|
+
when (text = ss.scan(/\#\$[a-zA-Z0-9-]+/))
|
80
|
+
@rex_tokens.push action { [:cyc_symbol,text] }
|
81
|
+
|
82
|
+
when (text = ss.scan(/[^\r\n\"\(\):&\ ]+/))
|
83
|
+
@rex_tokens.push action { [:atom,text] }
|
84
|
+
|
85
|
+
when (text = ss.scan(/\"/))
|
86
|
+
@rex_tokens.push action { state = :STRING; @str = ""; [:in_string] }
|
87
|
+
|
88
|
+
when (text = ss.scan(/[\ \t\f\r\n]/))
|
89
|
+
;
|
90
|
+
|
91
|
+
when (text = ss.scan(/.|\n/))
|
92
|
+
@rex_tokens.push action { raise "Illegal character <#{text}>" }
|
93
|
+
|
94
|
+
else
|
95
|
+
text = ss.string[ss.pos .. -1]
|
96
|
+
raise ScanError, "can not match: '" + text + "'"
|
97
|
+
end # if
|
98
|
+
|
99
|
+
when :STRING
|
100
|
+
case
|
101
|
+
when (text = ss.scan(/\"/))
|
102
|
+
@rex_tokens.push action { state = nil; [:string,@str] }
|
103
|
+
|
104
|
+
when (text = ss.scan(/[^\n\r\"\\]+/))
|
105
|
+
@rex_tokens.push action { @str << text; [:in_string]}
|
106
|
+
|
107
|
+
when (text = ss.scan(/\t/))
|
108
|
+
@rex_tokens.push action { @str << '\t'; [:in_string] }
|
109
|
+
|
110
|
+
when (text = ss.scan(/\n/))
|
111
|
+
@rex_tokens.push action { @str << '\n'; [:in_string] }
|
112
|
+
|
113
|
+
when (text = ss.scan(/\r/))
|
114
|
+
@rex_tokens.push action { @str << '\r'; [:in_string] }
|
115
|
+
|
116
|
+
when (text = ss.scan(/\\"/))
|
117
|
+
@rex_tokens.push action { @str << '\"'; [:in_string] }
|
118
|
+
|
119
|
+
when (text = ss.scan(/\\/))
|
120
|
+
@rex_tokens.push action { @str << '\\'; [:in_string] }
|
121
|
+
|
122
|
+
else
|
123
|
+
text = ss.string[ss.pos .. -1]
|
124
|
+
raise ScanError, "can not match: '" + text + "'"
|
125
|
+
end # if
|
126
|
+
|
127
|
+
else
|
128
|
+
raise ScanError, "undefined state: '" + state.to_s + "'"
|
129
|
+
end # case state
|
130
|
+
end # until ss
|
131
|
+
end # def scan_evaluate
|
132
|
+
|
133
|
+
def do_parse
|
134
|
+
end
|
135
|
+
end # class
|
136
|
+
end # module
|
@@ -0,0 +1,204 @@
|
|
1
|
+
;(csetq *PATH* "/home/fox/src/nlp/wsd/cyc/~A")
|
2
|
+
(csetq *PATH* "/mnt/cyc/export/~A")
|
3
|
+
;(csetq *WORDS-PATH* (format nil *PATH* "m_100_en_hasla.txt"))
|
4
|
+
(csetq *WORDS-PATH* (format nil *PATH* "all_english.txt"))
|
5
|
+
(csetq *WORDS-FILE* "")
|
6
|
+
(csetq *WORDS-OUTPUT* "")
|
7
|
+
(csetq *WORDS-OUTPUT-PROP* "")
|
8
|
+
(csetq *WORDS-MISSING* "")
|
9
|
+
|
10
|
+
(define load-code () (load (format nil *PATH* "words_reader.lisp")))
|
11
|
+
(define next-word ()
|
12
|
+
(clet (
|
13
|
+
(word (read *WORDS-FILE* nil))
|
14
|
+
)
|
15
|
+
(pif (null word) (ret '(("EOF" :eof))) ())
|
16
|
+
(clet (
|
17
|
+
(denotations (denotation-mapper (format nil "~A" word)))
|
18
|
+
(correct-denots ())
|
19
|
+
)
|
20
|
+
(pif (consp denotations)
|
21
|
+
()
|
22
|
+
(princ (format nil "~A~%" word) *WORDS-MISSING*)
|
23
|
+
)
|
24
|
+
; (csetq *PROP-WORD* word)
|
25
|
+
(cdolist (denot denotations)
|
26
|
+
(pif (denot-word-p denot word) (cpush denot correct-denots) nil)
|
27
|
+
)
|
28
|
+
; (csetq denotations (mremove-if #'prop-word-p denotations))
|
29
|
+
(ret (reverse correct-denots))
|
30
|
+
)
|
31
|
+
)
|
32
|
+
)
|
33
|
+
|
34
|
+
(define symbol-str (symbol)
|
35
|
+
(ret (cdr (caar
|
36
|
+
(cyc-query `(#$prettyString-Canonical ,symbol ?w) #$EnglishMt)
|
37
|
+
)))
|
38
|
+
)
|
39
|
+
|
40
|
+
; same as above but prettyString (without canonical) is used,
|
41
|
+
; so it can return many results
|
42
|
+
(define symbol-strs (symbol)
|
43
|
+
(clet ((result ()))
|
44
|
+
(cdolist (el (cyc-query `(#$prettyString ,symbol ?w) #$EnglishMt))
|
45
|
+
(cpush (cdar el) result))
|
46
|
+
(ret result))
|
47
|
+
)
|
48
|
+
|
49
|
+
(define print-names (symbols output)
|
50
|
+
(cdolist (el symbols)
|
51
|
+
(princ (format nil "~A" el) output)
|
52
|
+
(princ (format nil " ~S"
|
53
|
+
(strip-s (symbol-str el) "type of "))
|
54
|
+
output)
|
55
|
+
; (terpri output)
|
56
|
+
)
|
57
|
+
)
|
58
|
+
(define min-genls-flat (concept stop-words)
|
59
|
+
;(ret (remove-invalid (min-genls concept #$EverythingPSC) stop-words))
|
60
|
+
;CycNounLearnerMt UniversalVocabularyMt
|
61
|
+
(ret (remove-invalid (min-genls concept #$CycNounLearnerMt) stop-words))
|
62
|
+
)
|
63
|
+
(define min-isa-flat (concept stop-words)
|
64
|
+
;(ret (remove-invalid (min-isa concept #$EverythingPSC) stop-words))
|
65
|
+
(ret (remove-invalid (min-isa concept #$CycNounLearnerMt) stop-words))
|
66
|
+
)
|
67
|
+
|
68
|
+
(define read-all ()
|
69
|
+
(clet (
|
70
|
+
(stop-words (read-stop))
|
71
|
+
(output nil)
|
72
|
+
)
|
73
|
+
(cdo ((words (next-word) (next-word)))
|
74
|
+
((equal words '(("EOF" :eof))))
|
75
|
+
(cdolist (word words)
|
76
|
+
(pif (consp word)
|
77
|
+
(progn
|
78
|
+
(pif (isa? (cdr word) #$Individual)
|
79
|
+
(csetq output *WORDS-OUTPUT-PROP*)
|
80
|
+
(csetq output *WORDS-OUTPUT*))
|
81
|
+
(princ (format nil "~A[~A]"
|
82
|
+
(car word)
|
83
|
+
(cdr word)
|
84
|
+
)
|
85
|
+
output)
|
86
|
+
(print-names (min-genls-flat (cdr word) stop-words) output)
|
87
|
+
(princ " ISA" output)
|
88
|
+
(print-names (min-isa-flat (cdr word) stop-words) output)
|
89
|
+
(terpri output)
|
90
|
+
)
|
91
|
+
()
|
92
|
+
)
|
93
|
+
)
|
94
|
+
)
|
95
|
+
)
|
96
|
+
)
|
97
|
+
|
98
|
+
; my implementation of the mapcar function
|
99
|
+
(defmacro mmapcar (fun elems)
|
100
|
+
(clet ((var (gensym)))
|
101
|
+
(ret `(clet ((result nil))
|
102
|
+
(cdolist (,var ,elems)
|
103
|
+
(cpush (funcall ,fun ,var ) result) )
|
104
|
+
(reverse result))
|
105
|
+
)
|
106
|
+
)
|
107
|
+
)
|
108
|
+
|
109
|
+
; removes elements from list if the fun returns nil
|
110
|
+
(define mremove-if (fun elems)
|
111
|
+
(remove-if #'null (mmapcar fun elems))
|
112
|
+
)
|
113
|
+
|
114
|
+
;T if denotation's word equals word
|
115
|
+
(define denot-word-p (denot word)
|
116
|
+
(fif (equal (car denot) word) denot nil))
|
117
|
+
|
118
|
+
;T if the car of the cons is equal to word
|
119
|
+
(define prop-word-p (el word)
|
120
|
+
(fif (equal (car (eval el)) word) (eval el) nil))
|
121
|
+
|
122
|
+
|
123
|
+
(define open-words ()
|
124
|
+
(csetq *WORDS-FILE* (open-text *WORDS-PATH* :input))
|
125
|
+
)
|
126
|
+
|
127
|
+
(define open-missing ()
|
128
|
+
(csetq *WORDS-MISSING* (open-text (format nil *PATH* "missing.txt") :output))
|
129
|
+
)
|
130
|
+
|
131
|
+
(define close-words ()
|
132
|
+
(close *WORDS-FILE*))
|
133
|
+
|
134
|
+
|
135
|
+
(define open-output (version)
|
136
|
+
(csetq *WORDS-OUTPUT*
|
137
|
+
(open-text (format nil *PATH* (format nil "pohl_cyc_~A.txt" version)) :output))
|
138
|
+
(csetq *WORDS-OUTPUT-PROP*
|
139
|
+
(open-text (format nil *PATH* (format nil "pohl_cyc_prop_~A.txt" version)) :output))
|
140
|
+
)
|
141
|
+
|
142
|
+
;close output file
|
143
|
+
(define close-output ()
|
144
|
+
(close *WORDS-OUTPUT*)
|
145
|
+
(close *WORDS-OUTPUT-PROP*)
|
146
|
+
)
|
147
|
+
|
148
|
+
;returns the stop-list
|
149
|
+
(define read-stop ()
|
150
|
+
(clet ((stop-file (open-text (format nil *PATH* "stop_list.txt") :input))
|
151
|
+
(stop-words (read stop-file))
|
152
|
+
)
|
153
|
+
(close stop-file)
|
154
|
+
(ret stop-words)
|
155
|
+
)
|
156
|
+
)
|
157
|
+
|
158
|
+
; removes sequence #removed from the beginning of the sequence #sequence
|
159
|
+
(define strip-s (sequence removed)
|
160
|
+
(ret(fif (eq 0 (search removed sequence))
|
161
|
+
(subseq sequence (length removed))
|
162
|
+
sequence))
|
163
|
+
)
|
164
|
+
|
165
|
+
;main transforming loop
|
166
|
+
(define main-prog (version)
|
167
|
+
(open-words)
|
168
|
+
(open-output version)
|
169
|
+
(open-missing)
|
170
|
+
(read-all)
|
171
|
+
(close-words)
|
172
|
+
(close-output)
|
173
|
+
(close *WORDS-MISSING*)
|
174
|
+
)
|
175
|
+
|
176
|
+
(define remove-invalid (elements invalid)
|
177
|
+
(clet ( (result () ) )
|
178
|
+
(cdolist (el elements)
|
179
|
+
(pif (null (cor (member el invalid)
|
180
|
+
(cand (nart-p el)
|
181
|
+
(intersection invalid (nart-hl-formula el)) )))
|
182
|
+
(cpush el result) ())
|
183
|
+
)
|
184
|
+
(ret result)
|
185
|
+
)
|
186
|
+
)
|
187
|
+
|
188
|
+
(define term-mts (term)
|
189
|
+
(clet ((result ()))
|
190
|
+
(cdolist (e (gather-index-in-any-mt term))
|
191
|
+
(csetq result (adjoin (assertion-mt e) result)))
|
192
|
+
result)
|
193
|
+
)
|
194
|
+
|
195
|
+
(define any-assertion? (term mt)
|
196
|
+
(with-mt mt (pif (gather-index term) T ())))
|
197
|
+
|
198
|
+
(define nart-denotation-mapper (word)
|
199
|
+
(clet ((result ()))
|
200
|
+
(cdolist (el (denotation-mapper word))
|
201
|
+
(pif (nart-p (cdr el))
|
202
|
+
(cpush (nart-id (cdr el)) result)
|
203
|
+
(cpush (cdr el) result))) result
|
204
|
+
(ret result)))
|
data/lib/cycr.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'cycr/**.rb')).each { |f| require f }
|
data/spec/assertion.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
$:.unshift "lib"
|
2
|
+
require 'cycr'
|
3
|
+
|
4
|
+
describe Cyc::Assertion do
|
5
|
+
before(:all) do
|
6
|
+
@client = Cyc::Client.new()
|
7
|
+
#@client.debug = true
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
@client.close
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should parse results with assertions" do
|
15
|
+
@client.talk("(gather-predicate-extent-index \#$minimizeExtent \#$BaseKB)").should_not == nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return assertions as results if present in the result" do
|
19
|
+
@client.talk("(gather-predicate-extent-index \#$minimizeExtent \#$BaseKB)").
|
20
|
+
first.class.should == Cyc::Assertion
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should have microtheory assigned" do
|
24
|
+
@client.talk("(gather-predicate-extent-index \#$minimizeExtent \#$BaseKB)").
|
25
|
+
first.microtheory.should_not == nil
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have formula assigned" do
|
29
|
+
@client.talk("(gather-predicate-extent-index \#$minimizeExtent \#$BaseKB)").
|
30
|
+
first.formula.should_not == nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return many results" do
|
34
|
+
@client.talk("(gather-predicate-extent-index \#$minimizeExtent)").size.should > 100
|
35
|
+
end
|
36
|
+
end
|
data/spec/client.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'lib/cycr'
|
2
|
+
|
3
|
+
describe Cyc::Client do
|
4
|
+
before(:each) do
|
5
|
+
@client = Cyc::Client.new()
|
6
|
+
# @client.debug = true
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
@client.close
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should allow to talk to the server" do
|
14
|
+
@client.talk("(constant-count)").should_not == nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should allow to talk to server by calling non-existent methods" do
|
18
|
+
@client.constant_count.should_not == nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should allow to find 'Cat' collection" do
|
22
|
+
cat = @client.find_collection("Cat")
|
23
|
+
cat.should_not == nil
|
24
|
+
cat.should be_instance_of(Cyc::Collection)
|
25
|
+
cat.symbol.should == :Cat
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should allow multiple processes to use the client" do
|
29
|
+
parent_pid = Process.pid
|
30
|
+
if fork
|
31
|
+
@client.find_collection("Cat")
|
32
|
+
else
|
33
|
+
@client.find_collection("Dog")
|
34
|
+
end
|
35
|
+
if Process.pid == parent_pid
|
36
|
+
Process.waitall
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cycr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Aleksander Pohl
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-10-19 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 13
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 2
|
33
|
+
- 9
|
34
|
+
version: 1.2.9
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
description: Ruby wrapper for (Open)Cyc server and ontology
|
38
|
+
email: apohllo@o2.pl
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- README.txt
|
45
|
+
files:
|
46
|
+
- Rakefile
|
47
|
+
- cycr.gemspec
|
48
|
+
- lib/cycr.rb
|
49
|
+
- lib/cycr/sexpr.rex
|
50
|
+
- lib/cycr/parser.rb
|
51
|
+
- lib/cycr/domains.lisp
|
52
|
+
- lib/cycr/sexpr.flex
|
53
|
+
- lib/cycr/nart.rb
|
54
|
+
- lib/cycr/constants.rb
|
55
|
+
- lib/cycr/collection.rb
|
56
|
+
- lib/cycr/sexpr.rex.rb
|
57
|
+
- lib/cycr/client.rb
|
58
|
+
- lib/cycr/extensions.rb
|
59
|
+
- lib/cycr/assertion.rb
|
60
|
+
- lib/cycr/words_reader.lisp
|
61
|
+
- README.txt
|
62
|
+
- spec/client.rb
|
63
|
+
- spec/assertion.rb
|
64
|
+
has_rdoc: true
|
65
|
+
homepage: http://www.opencyc.org
|
66
|
+
licenses: []
|
67
|
+
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options:
|
70
|
+
- --main
|
71
|
+
- README.txt
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
version: "0"
|
92
|
+
requirements: []
|
93
|
+
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 1.3.7
|
96
|
+
signing_key:
|
97
|
+
specification_version: 3
|
98
|
+
summary: Ruby client for the (Open)Cyc server
|
99
|
+
test_files:
|
100
|
+
- spec/client.rb
|
101
|
+
- spec/assertion.rb
|