Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

177
LINES

< > BotCompany Repo | #1014753 // Snippet Title Reasoning v1 [OK]

JavaX source code (desktop) [tags: use-pretranspiled] - run with: x30.jar

Download Jar. Uses 3874K of libraries. Click here for Pure Java version (24310L/165K).

1  
!7
2  
3  
!include once #1014750 // CSnippet
4  
5  
sS inspiration = [[
6  
  snippet titles
7  
  "[OK]"
8  
]];
9  
10  
static new LL<S> facts; // stores code token parses
11  
static Map<S, O> phrasesWordTree = wordTree();
12  
static Clusters<S> clusters = ciClusters();
13  
static Prolog prolog;
14  
15  
sS reasoning = [[
16  
  // check inspiration :o)
17  
  assert(inspired "snippet titles")
18  
  assert(inspired "\"[OK]\"")
19  
20  
  // phrases
21  
  phrase "snippet titles"
22  
  phrase "a list of strings"
23  
  phrase "a quoted string"
24  
  
25  
  // synonyms
26  
  "the snippet titles" = "snippet titles"
27  
  
28  
  // grammar
29  
  singular_plural("snippet title", "snippet titles")
30  
  
31  
  // test parsing
32  
  assert_parse("snippet titles are a list of strings", "snippet titles", "are", "a list of strings")
33  
  
34  
  // facts
35  
  snippet titles are a list of strings
36  
  "[OK]" is a quoted string
37  
  
38  
  // rule to answer a question
39  
  fact_question_answer_upperCaseVars("X are Y", "what are X?", "Y")
40  
  
41  
  // check the rule
42  
  assert_answer("what are snippet titles?", "a list of strings")
43  
]];
44  
45  
p-experiment-tt { go(); }
46  
47  
svoid go {
48  
  prolog = new Prolog;
49  
  
50  
  L<S> program = tlftj(reasoning);
51  
  pnl(program);
52  
  print();
53  
  
54  
  //set translateUsingWordTree_debug;
55  
  //set translateUsingWordTreeC_printReplacements;
56  
  
57  
  for (S s : tlftj(inspiration))
58  
    addFact("inspired " + quote(s));
59  
    
60  
  for (S s : program) {
61  
    Pair<S, L<S>> p = parseFunctionCall(s);
62  
    if (p != null) {
63  
      //print("Function call: " + sfu(p));
64  
      S f = p.a;
65  
      L<S> args = p.b;
66  
      if (eqic(f, "assert"))
67  
        assertFact(getSingleton(p.b));
68  
      else if (swic(f, "assert_")) {
69  
        if (eqic(f, "assert_answer"))
70  
          assertAnswer(unquote(first(args)), unquote(second(args)));
71  
        else if (eqic(f, "assert_parse"))
72  
          assertParse(args);
73  
        else
74  
          fail("Unknown assertion function: " + f);
75  
      } else if (eqic(f, "fact_question_answer_upperCaseVars"))
76  
        prolog.code(
77  
          print("if [" + toProlog(unquote(first(args))) + "] and ["
78  
          + toProlog(unquote(second(args))) + "] then [answer is ["
79  
          + toProlog(unquote(third(args))) + "]]"));
80  
      continue;
81  
    }
82  
    
83  
    L<S> tok = javaTokC(s);
84  
    if (l(tok) == 2 && isIdentifier(first(tok)) && isQuoted(second(tok)))
85  
      if (eq(first(tok), "phrase")) {
86  
        addPhrase(unquote(second(tok)));
87  
        continue;
88  
      }
89  
      
90  
    if (l(tok) == 3 && eq(second(tok), "=")) {
91  
      ciClusters_add(clusters,
92  
        addPhrase(unquote(first(tok))),
93  
        addPhrase(unquote(third(tok))));
94  
      continue;
95  
    }
96  
97  
    addFact(s);
98  
  }
99  
  
100  
  printAsciiHeading("Facts");
101  
  pnlStruct(facts);
102  
  print();
103  
  
104  
  print("Clusters: " + sfu(clusters));
105  
  print("Phrases: " + sfu(phrasesWordTree));
106  
  //loadSnippets();
107  
}
108  
109  
svoid loadSnippets {
110  
  loadMainConceptsFrom_readOnly(#1009918); // get snippets
111  
  print("Have " + countConcepts(CSnippet) + " snippets");
112  
  pnl(takeFirst10(collect(list(CSnippet), 'title));
113  
}
114  
115  
static L<S> parseFact(S s) {
116  
  L<S> tok = map toLowerIfIdentifier(javaTokWithAngleBracketsC(/*dropPunctuation*/(s)));
117  
  ret nempties(translateUsingWordTreeC(tok, phrasesWordTree));
118  
}
119  
120  
svoid assertFact(S fact) {
121  
  if (contains(facts, parseFact(fact)))
122  
    print("OK fact: " + fact);
123  
  else
124  
    print("FAILED fact assert: " + fact);
125  
}
126  
127  
svoid assertAnswer(S q, S a) {
128  
  Prolog p = new(prolog);
129  
  //p.showStuff = true;
130  
  p.code(dontPrint("to prolog: ", squareBracket(toProlog(q))));
131  
  L<Lisp> out = p.rewrite();
132  
  //print("Got " + l(out) + " statement(s)");
133  
  L<S> lines = map nlUnparse(out);
134  
  L<S> answers = startingWithEndingWith_drop(lines, "answer is [", "]");
135  
  if (l(answers) == 1 && eqic(first(answers), a))
136  
    print("OK answer: " + q + " -> " + a);
137  
  else {
138  
    pnl(map nlUnparse(out));
139  
    print("FAIL answer: " + q + " -> " + first(answers) + " - expected: " + a);
140  
  }
141  
}
142  
143  
sS addPhrase(S s) {
144  
  wordTreeAdd(phrasesWordTree, javaTokC(s), s);
145  
  ret s;
146  
}
147  
148  
svoid addFact(S s) {
149  
  L<S> tok = parseFact(s);
150  
  facts.add(tok);
151  
  prolog.code(dontPrint("to prolog: ", squareBracket(factToProlog(tok))));
152  
}
153  
154  
svoid assertParse(L<S> args) {
155  
  args = unquoteAll(args);
156  
  S s = first(args);
157  
  L<S> parsed = parseFact(s);
158  
  L<S> expected = dropFirst(args);
159  
  if (eq(parsed, expected))
160  
    print("OK parse: " + s + " -> " + sfu(parsed));
161  
  else
162  
    print("FAILED parse: " + s + " -> " + sfu(parsed) + " - expected: " + sfu(expected));
163  
}
164  
165  
sS toProlog(S s) {
166  
  L<S> tok = parseFact(upperCaseVarsToDollarVars(s));
167  
  ret factToProlog(tok);
168  
}
169  
170  
sS factToProlog(L<S> tok) {
171  
  ret joinWithSpace(map tokenToProlog(tok));
172  
}
173  
174  
sS tokenToProlog(S t) {
175  
  if (!isQuoted(t) && containsSpace(t)) ret squareBracket(t);
176  
  ret t;
177  
}

download  show line numbers  debug dex  old transpilations   

Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1014753
Snippet name: Snippet Title Reasoning v1 [OK]
Eternal ID of this version: #1014753/64
Text MD5: fd884adc61ab7546331d8200c3518e11
Transpilation MD5: 2c24cc4dc2811f1de52d832e24fe3cd1
Author: stefan
Category: javax / a.i.
Type: JavaX source code (desktop)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2018-05-01 22:26:48
Source code size: 4767 bytes / 177 lines
Pitched / IR pitched: No / No
Views / Downloads: 483 / 3171
Version history: 63 change(s)
Referenced in: [show references]