another simple one aiming towards natural language
This is just a simple one, again, inching ever so slowly towards natural language.
-- let's learn some rules:
nothing-like |*> #=> 0 |_self>
a-little-like |*> #=> 0.3 |_self>
like |*> #=> 0.7 |_self>
a-lot-like |*> #=> 0.9 |_self>
exactly-like |*> #=> |_self>
-- learn the taste of an orange:
taste |orange> => |citrus> + |sweet> + |juicy>
-- learn the taste of a banana is nothing like that of an orange:
taste |banana> #=> nothing-like taste |orange>
-- ask the taste of a banana:
sa: taste |banana>
0.000|citrus> + 0.000|sweet> + 0.000|juicy>
-- learn the taste of a mandarin is a lot like that of an orange:
taste |mandarin> #=> a-lot-like taste |orange>
-- ask the taste of a mandarin:
sa: taste |mandarin>
0.900|citrus> + 0.900|sweet> + 0.900|juicy>
Anyway, just some proof of concept, I suppose.
Next example:
-- learn: "a person is happy if they are whistling".
is-happy |*> #=> if(is-whistling |_self>,|yes>,|>)
-- learn Fred is whistling:
is-whistling |Fred> => |yes>
-- now ask some questions:
sa: do-you-know is-happy |Fred>
|yes>
sa: is-happy |Fred>
|yes>
sa: do-you-know is-happy |Sam>
|no>
sa: is-happy |Sam>
|>
Update: for lack of a better place to put this one.
-- learn a couple of "is-greater-than" operators:
is-greater-than-0 |*> #=> do-you-know push-float drop-below[1] pop-float |_self>
is-greater-than-5 |*> #=> do-you-know push-float drop-below[5.01] pop-float |_self>
-- now take a look:
sa: table[number,is-greater-than-0,is-greater-than-5] range(|-5>,|10>)
+--------+-------------------+-------------------+
| number | is-greater-than-0 | is-greater-than-5 |
+--------+-------------------+-------------------+
| -5 | no | no |
| -4 | no | no |
| -3 | no | no |
| -2 | no | no |
| -1 | no | no |
| 0 | no | no |
| 1 | yes | no |
| 2 | yes | no |
| 3 | yes | no |
| 4 | yes | no |
| 5 | yes | no |
| 6 | yes | yes |
| 7 | yes | yes |
| 8 | yes | yes |
| 9 | yes | yes |
| 10 | yes | yes |
+--------+-------------------+-------------------+
And we can also easily enough count the number greater than 0 in that range:
(makes use of linearity of literal operators, and that kets add)
sa: is-greater-than-0 range(|-5>,|10>)
6.000|no> + 10.000|yes>
And how many are greater than 5:
sa: is-greater-than-5 range(|-5>,|10>)
11.000|no> + 5.000|yes>
Update: a table version of "is-happy":
sa: is-happy |*> #=> if(is-whistling |_self>,|yes>,|>)
sa: is-whistling |Fred> => |yes>
sa: do-you-know-is-happy |*> #=> do-you-know is-happy |_self>
sa: table[name,do-you-know-is-happy,is-happy,is-whistling] (|Fred> + |Sam>)
+------+----------------------+----------+--------------+
| name | do-you-know-is-happy | is-happy | is-whistling |
+------+----------------------+----------+--------------+
| Fred | yes | yes | yes |
| Sam | no | | |
+------+----------------------+----------+--------------+
Home
previous: sparql vs bko
next: xml vs bko
updated: 19/12/2016
by Garry Morrison
email: garry -at- semantic-db.org