diff --git a/current_goal.txt b/current_goal.txt index 81e4fc7..a1bb8ca 100644 --- a/current_goal.txt +++ b/current_goal.txt @@ -7,8 +7,6 @@ sitting in a tavern by a fireplace Comprehend the sentence "My name is ${name}" - - Figure out that we're assigning a value - - Figure out what values we're assigning - Transfer statement eval diff --git a/src/main/java/org/studiorailgun/conversation/evaluators/transfer/TransferEval.java b/src/main/java/org/studiorailgun/conversation/evaluators/transfer/TransferEval.java index a10f155..11ac126 100644 --- a/src/main/java/org/studiorailgun/conversation/evaluators/transfer/TransferEval.java +++ b/src/main/java/org/studiorailgun/conversation/evaluators/transfer/TransferEval.java @@ -1,11 +1,14 @@ package org.studiorailgun.conversation.evaluators.transfer; +import org.studiorailgun.Globals; import org.studiorailgun.conversation.evaluators.query.NounStack; import org.studiorailgun.conversation.parser.NLPDependencies; import org.studiorailgun.conversation.parser.PennTreebankTagSet; import org.studiorailgun.conversation.tracking.Conversation; import org.studiorailgun.conversation.tracking.Quote; import org.studiorailgun.conversation.tracking.Sentence; +import org.studiorailgun.knowledge.KnowledgeWeb; +import org.studiorailgun.knowledge.query.NodePropQuery; import edu.stanford.nlp.ling.IndexedWord; import edu.stanford.nlp.semgraph.SemanticGraph; @@ -71,7 +74,7 @@ public class TransferEval { SemanticGraph graph = sentence.getGraph(); IndexedWord verb = NLPDependencies.getCopular(graph); if(PennTreebankTagSet.isBe(verb.tag())){ - TransferEval.evaluateEquivalenceStatement(conversation, quote, sentence, noun1, noun2); + TransferEval.evaluateAssignmentStatement(conversation, quote, sentence, noun1, noun2); } else { throw new Error("Unsupported verb type! " + graph); } @@ -83,8 +86,14 @@ public class TransferEval { * @param quote The quote * @param sentence The sentence */ - private static void evaluateEquivalenceStatement(Conversation conversation, Quote quote, Sentence sentence, NounStack noun1, NounStack noun2){ - throw new UnsupportedOperationException("Need to actually perform the equivalence transforms in the knowledge web!"); + private static void evaluateAssignmentStatement(Conversation conversation, Quote quote, Sentence sentence, NounStack noun1, NounStack noun2){ + //if there is no node with this name already, create one + System.out.println(sentence.getGraph()); + String noun1RootText = noun1.getIndexedWord().originalText(); + if(NodePropQuery.byName(noun1RootText).size() < 1){ + Globals.web.createNode(noun1RootText); + } + } /** diff --git a/src/main/java/org/studiorailgun/conversation/parser/PennTreebankTagSet.java b/src/main/java/org/studiorailgun/conversation/parser/PennTreebankTagSet.java index d8fac6e..f5be28f 100644 --- a/src/main/java/org/studiorailgun/conversation/parser/PennTreebankTagSet.java +++ b/src/main/java/org/studiorailgun/conversation/parser/PennTreebankTagSet.java @@ -79,4 +79,21 @@ public class PennTreebankTagSet { } } + /** + * Checks if this tag is a proper noun or not + * @param tag The tag + * @return true if it is a proper noun, false otherwise + */ + public static boolean isProperNoun(String tag){ + switch(tag){ + case "NP": + case "NPS": { + return true; + } + default: { + return false; + } + } + } + } diff --git a/src/main/java/org/studiorailgun/knowledge/KnowledgeWeb.java b/src/main/java/org/studiorailgun/knowledge/KnowledgeWeb.java index 3e8a02c..67f49a8 100644 --- a/src/main/java/org/studiorailgun/knowledge/KnowledgeWeb.java +++ b/src/main/java/org/studiorailgun/knowledge/KnowledgeWeb.java @@ -335,4 +335,15 @@ public class KnowledgeWeb { return anchors; } + /** + * Creates a new node + * @param name The name of the node + * @return The node + */ + public Node createNode(String name){ + Node node = new Node(name); + this.nodes.put(node.getId(), node); + return node; + } + } diff --git a/src/main/java/org/studiorailgun/knowledge/query/NodePropQuery.java b/src/main/java/org/studiorailgun/knowledge/query/NodePropQuery.java new file mode 100644 index 0000000..e854949 --- /dev/null +++ b/src/main/java/org/studiorailgun/knowledge/query/NodePropQuery.java @@ -0,0 +1,24 @@ +package org.studiorailgun.knowledge.query; + +import java.util.List; +import java.util.stream.Collectors; + +import org.studiorailgun.Globals; +import org.studiorailgun.knowledge.Node; + +/** + * Get a node by a property of the node + */ +public class NodePropQuery { + + + /** + * Gets all nodes in the web with a given name + * @param name The name of the node + * @return The list of nodes in the web that have that name + */ + public static List byName(String name){ + return Globals.web.getNodes().stream().filter(node -> node.getName().equals(name)).collect(Collectors.toList()); + } + +} diff --git a/src/test/java/org/studiorailgun/AssignmentTransferTests.java b/src/test/java/org/studiorailgun/AssignmentTransferTests.java new file mode 100644 index 0000000..592ace4 --- /dev/null +++ b/src/test/java/org/studiorailgun/AssignmentTransferTests.java @@ -0,0 +1,17 @@ +package org.studiorailgun; + +import org.junit.Test; +import org.studiorailgun.conversation.ConvAI; + +/** + * Test assigning values via transfer statements + */ +public class AssignmentTransferTests { + + @Test + public void testTransferName(){ + // Globals.init("./data/webs/test/web.json"); + // ConvAI.simFrame("My name is John."); + } + +}