/****************************************************************************** * * Copyright 2014 Paphus Solutions Inc. * * Licensed under the Eclipse Public License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.botlibre.tool; import java.io.StringWriter; import java.math.BigInteger; import org.botlibre.Bot; import org.botlibre.api.knowledge.Vertex; import org.botlibre.knowledge.Primitive; import org.botlibre.sense.BasicTool; import org.botlibre.util.TextStream; /** * Return current date and time. */ public class Utils extends BasicTool { public Utils() { } public Vertex id(Vertex source) { return source.getNetwork().createVertex(getBot().memory().getMemoryName()); } public Vertex size(Vertex source) { return source.getNetwork().createVertex(BigInteger.valueOf(getBot().memory().getLongTermMemory().size())); } public Vertex version(Vertex source) { return source.getNetwork().createVertex(Bot.VERSION); } public Vertex program(Vertex source) { return source.getNetwork().createVertex(Bot.PROGRAM + " - " + Bot.VERSION); } public Vertex uppercase(Vertex source, Vertex text) { return text.getNetwork().createVertex(text.printString().toUpperCase()); } public Vertex lowercase(Vertex source, Vertex text) { return text.getNetwork().createVertex(text.printString().toLowerCase()); } public Vertex sentence(Vertex source, Vertex text) { Vertex fragment = text.getNetwork().createFragment(org.botlibre.util.Utils.capitalize(text.printString())); fragment.addRelationship(Primitive.TYPE, Primitive.CASESENSITVE); return fragment; } public Vertex capitalize(Vertex source, Vertex text) { Vertex fragment = text.getNetwork().createFragment(org.botlibre.util.Utils.capitalize(text.printString())); fragment.addRelationship(Primitive.TYPE, Primitive.CASESENSITVE); return fragment; } public Vertex explode(Vertex source, Vertex text) { return text.getNetwork().createVertex(explode(text.printString())); } public Vertex encode(Vertex source, Vertex text) { return text.getNetwork().createVertex(org.botlibre.util.Utils.encodeURL(text.printString())); } public Vertex normalize(Vertex source, Vertex text) { return text.getNetwork().createVertex(normalize(text.printString())); } public Vertex denormalize(Vertex source, Vertex text) { return text.getNetwork().createVertex(denormalize(text.printString())); } public static String formal(String text) { StringWriter writer = new StringWriter(); TextStream stream = new TextStream(text); while (!stream.atEnd()) { writer.write(org.botlibre.util.Utils.capitalize(stream.nextWord())); if (stream.skipWhitespace()) { writer.write(" "); } } return writer.toString(); } public static String explode(String text) { StringWriter writer = new StringWriter(); TextStream stream = new TextStream(text); boolean first = true; while (!stream.atEnd()) { if (!first) { writer.write(' '); } else { first = false; } char next = stream.next(); writer.write(next); } return writer.toString(); } public static String normalize(String text) { StringWriter writer = new StringWriter(); TextStream stream = new TextStream(text); boolean first = true; while (!stream.atEnd()) { if (!first) { writer.write(' '); } else { first = false; } String next = stream.nextSimpleWord(); if (next.equals(".")) { writer.write("dot"); } else if (next.equals(",")) { writer.write("comma"); } else if (next.equals("/")) { writer.write("slash"); } else if (next.equals(":")) { writer.write("colon"); } else if (next.equals("@")) { writer.write("at"); } else if (next.equals("-")) { writer.write("dash"); } else { writer.write(next); } } return writer.toString(); } public static String denormalize(String text) { StringWriter writer = new StringWriter(); TextStream stream = new TextStream(text); boolean space = false; while (!stream.atEnd()) { String next = stream.nextSimpleWord(); if (next.equals("dot")) { writer.write("."); space = false; } else if (next.equals("comma")) { writer.write(","); space = false; } else if (next.equals("slash")) { writer.write("/"); space = false; } else if (next.equals("colon")) { writer.write(":"); space = false; } else if (next.equals("at")) { writer.write("@"); space = false; } else if (next.equals("dash")) { writer.write("-"); space = false; } else { if (space) { writer.write(' '); } writer.write(next); space = true; } } return writer.toString(); } public Vertex formal(Vertex source, Vertex text) { Vertex fragment = text.getNetwork().createFragment(formal(text.printString())); fragment.addRelationship(Primitive.TYPE, Primitive.CASESENSITVE); return fragment; } public static String gender(String text) { StringWriter writer = new StringWriter(); TextStream stream = new TextStream(text); while (!stream.atEnd()) { String word = stream.nextWord().toLowerCase(); if (word.equals("he")) { word = "she"; } else if (word.equals("she")) { word = "he"; } else if (word.equals("his")) { word = "her"; } else if (word.equals("her")) { word = "his"; } else if (word.equals("him")) { word = "her"; } else if (word.equals("boy")) { word = "girl"; } else if (word.equals("girl")) { word = "boy"; } else if (word.equals("girlfriend")) { word = "boyfriend"; } else if (word.equals("boyfriend")) { word = "girlfriend"; } writer.write(word); if (stream.skipWhitespace()) { writer.write(" "); } } return writer.toString(); } public Vertex gender(Vertex source, Vertex fragment) { return fragment.getNetwork().createVertex(gender(fragment.printString())); } public static String person(String text) { StringWriter writer = new StringWriter(); TextStream stream = new TextStream(text); while (!stream.atEnd()) { String word = stream.nextWord().toLowerCase(); if (word.equals("i")) { word = "you"; } else if (word.equals("me")) { word = "you"; } else if (word.equals("myself")) { word = "yourself"; } else if (word.equals("mine")) { word = "yours"; } else if (word.equals("my")) { word = "your"; } else if (word.equals("you")) { word = "I"; } else if (word.equals("yourself")) { word = "myself"; } else if (word.equals("yours")) { word = "mine"; } else if (word.equals("your")) { word = "my"; } else if (word.equals("am")) { word = "are"; } else if (word.equals("are")) { word = "am"; } writer.write(word); if (stream.skipWhitespace()) { writer.write(" "); } } return writer.toString(); } public Vertex person(Vertex source, Vertex fragment) { return fragment.getNetwork().createVertex(person(fragment.printString())); } public static String person2(String text) { StringWriter writer = new StringWriter(); TextStream stream = new TextStream(text); while (!stream.atEnd()) { String word = stream.nextWord().toLowerCase(); if (word.equals("i")) { word = "he"; } else if (word.equals("me")) { word = "him"; } else if (word.equals("myself")) { word = "himself"; } else if (word.equals("mine")) { word = "his"; } else if (word.equals("my")) { word = "his"; } else if (word.equals("he")) { word = "I"; } else if (word.equals("him")) { word = "me"; } else if (word.equals("himself")) { word = "myself"; } else if (word.equals("his")) { word = "my"; } else if (word.equals("her")) { word = "I"; } else if (word.equals("herself")) { word = "myself"; } writer.write(word); if (stream.skipWhitespace()) { writer.write(" "); } } return writer.toString(); } public Vertex person2(Vertex source, Vertex fragment) { return fragment.getNetwork().createVertex(person2(fragment.printString())); } }