There are three variations of each:
guess-ket |ket> guess-ket[k] |ket> guess-ket[*] |ket>The first one just gives you the best matching ket. The second returns the top k matches. The third gives all matches with similarity > 0.
Likewise, we have:
guess-operator[op] guess-operator[op,k] guess-operator[op,*]where the first one gives you the best matching operator. The second gives the top k matches. The third gives all of them with simm > 0.
Now, for a little bit of the details in the back-ground. We basically use the similarity metric on the superpositions created by the process_string() function, against all known kets "context.relevant_kets("*")" or known supported operators "context.supported_operators()":
def process_string(s): one = ket(s.lower()) return make_ngrams(one,'1,2,3','letter')Now, a couple of examples:
-- learn a little knowledge: the-age-of |Fred> => |age: 27> the-age-of |Frank> => |age: 33> the-age-of |Robert> => |age: 29> the-age-of |Rob> => |age: 31> -- return only the best match to "freddie": sa: guess-ket |freddie> 0.611|Fred> -- see all matches to "freddie": sa: guess-ket[*] |freddie> 0.611|Fred> + 0.167|Frank> + 0.122|Robert> + 0.056|Rob> -- now try the guess-operator: sa: guess-operator[age] 0.259|op: the-age-of> -- who is "roberto"? sa: guess-ket |roberto> 0.844|Robert> -- one potential use case. Guess the operator and the ket: sa: apply(guess-operator[age] |>,guess-ket |roberto>) 0.219|age: 29>NB: in this last example we used "guess-operator[age] |>". Note especially the |> tacked on the end. We need this so it is parsed as a (compound) superposition. In the console though, it is not mandatory, and I often get lazy and leave it out. A similar thing applies to rel-kets[op] and probably some other function operators. If something doesn't work as expected, put |> in, and that should fix it. Indeed, best practice is to always include it!
That's probably about it for this post. Though I have to wonder with my if-then machines, if guess-operator, and guess-age are redundant? Don't know. Time will tell!
If interested, the code for these are at the bottom of the functions code, with names "guess_ket" and "guess_operator". Just CTRL-F to find them.
That's it for this post.