Professional Documents
Culture Documents
com/ai/java-aiml-chatbot-example/
In this Java AIML tutorial, we will learn to create simple chatbot program in Java. A
Chatbot is an application designed to simulate the conversation with human users, especially
over the Internet. Internally it uses any NLP (Natural Language Processing) system to
interpret the human interactions and reply back with meaningful information.
AIML (Artificial Intelligence Markup Language) is an XML dialect for creating natural
language software agents. It contains the basic rules which Natural Language Understanding
(NLU) unit uses internally. It can be think of as a heart of the engine. The more rules we add
in AIML – the more intelligent our Chatbot will be.
It’s important to know the difference between NLP and NLU. NLP refers to all systems that
work together to handle end-to-end interactions between machines and humans in the
preferred language of the human. In other words, NLP lets people and machines talk to each
other “naturally”. NLU is actually a subset of the wider world of NLP. It helps in parsing
unstructured inputs e.g. mispronunciations, swapped words, contractions, colloquialisms, and
other quirks.
Table of Contents
1. Prerequisite
2. Java AIML Chatbot Example
3. Add Custom Patterns in Chatbot
4. Summary
1. Prerequisite
Reference AIML Implementation – To get started, we shall use an already working
reference application. There is one such java based implementation called program-
ab hosted on google-code repository. Download the program-ab latest distribution
from google code repository.
Eclipse and Maven – for coding and development.
We need to first unzip the program-ab distribution to a convenient folder. We will need to
take Ab.jar and existing AIML rules from it.
2.2. Create eclipse project
Create eclipse maven project to start the development. So let’s create a maven project with .
Create eclipse maven project to start the development. Choose packaging as jar and GAV
coordinate as your choice and import to eclipse. Now create a folder lib in the base folder
and copy the Ab.jar from the program-ab distribution to this folder.
To add AIML to classpath, add Ab.jar to deployment assembly in eclipse. Alternatively you
can install this jar into your local maven repository and then use it.
Add below AIML maven dependency to pom.xml. Now build the maven project by command
mvn clean install.
<dependencies>
<dependency>
<artifactId>com.google</artifactId>
<groupId>Ab</groupId>
<version>0.0.4.3</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Ab.jar</systemPath>
</dependency>
</dependencies>
Copy the bots folder from program-ab directory into the resources folder of your maven
project. This folder contains default AIML sets that we will use initially. Later we will see
how we can add our custom rules into our Chatbot.
Project Structure with bots added to resources folder
Now create a simple java program i.e. Chatbot.java. It’s main() method will invoke the
chat program which will run on the command prompt. Basic structure of this program will be
to introduce a infinite loop and in each loop take a user input from command prompt and then
we will ask program-ab API to give the answer of the input provided by user.
More details about the program-ab API interaction is mentioned in the wiki link.
package com.howtodoinjava.ai;
import java.io.File;
import org.alicebot.ab.Bot;
import org.alicebot.ab.Chat;
import org.alicebot.ab.History;
import org.alicebot.ab.MagicBooleans;
import org.alicebot.ab.MagicStrings;
import org.alicebot.ab.utils.IOUtils;
public class Chatbot {
private static final boolean TRACE_MODE = false;
static String botName = "super";
public static void main(String[] args) {
try {
String resourcesPath = getResourcesPath();
System.out.println(resourcesPath);
MagicBooleans.trace_mode = TRACE_MODE;
Bot bot = new Bot("super", resourcesPath);
Chat chatSession = new Chat(bot);
bot.brain.nodeStats();
String textLine = "";
while(true) {
System.out.print("Human : ");
textLine = IOUtils.readInputTextLine();
if ((textLine == null) || (textLine.length() < 1))
textLine = MagicStrings.null_input;
if (textLine.equals("q")) {
System.exit(0);
} else if (textLine.equals("wq")) {
bot.writeQuit();
System.exit(0);
} else {
String request = textLine;
if (MagicBooleans.trace_mode)
System.out.println("STATE=" + request + ":THAT=" +
((History) chatSession.thatHistory.get(0)).get(0) + ":TOPIC=" +
chatSession.predicates.get("topic"));
String response =
chatSession.multisentenceRespond(request);
while (response.contains("<"))
response = response.replace("<", "<");
while (response.contains(">"))
response = response.replace(">", ">");
System.out.println("Robot : " + response);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getResourcesPath() {
File currDir = new File(".");
String path = currDir.getAbsolutePath();
path = path.substring(0, path.length() - 2);
System.out.println(path);
String resourcesPath = path + File.separator + "src" +
File.separator + "main" + File.separator + "resources";
return resourcesPath;
}
}
Now our program is ready and we can now start conversation with chat. To do that just run
the program as java application. To exit, you shall type q or wq.
Human : Hi
Robot : Hi! It's delightful to see you.
Human : How are you
Robot : Feeling really joyful today.
Human : My name is sajal
Robot : Glad to see you, Sajal
Human : what is my name
Robot : Sajal
Human : tell me my name
Robot : Sajal
Like this, you can do basic talk with the chat bot.
Once our custom aiml file is ready, we need to do generate corresponding entries for other
folders parallel to aiml. To do it, we need to invoke the bot.writeAIMLFiles(). I have
created another java program called AddAiml.java for this purpose. Once you are done with
the aiml editing, just run this program once before starting the bot. It will add these custom
entries to the bot’s brain.
package com.howtodoinjava.ai;
import java.io.File;
import org.alicebot.ab.Bot;
import org.alicebot.ab.MagicBooleans;
public class AddAiml {
private static final boolean TRACE_MODE = false;
static String botName = "super";
public static void main(String[] args) {
try {
String resourcesPath = getResourcesPath();
System.out.println(resourcesPath);
MagicBooleans.trace_mode = TRACE_MODE;
Bot bot = new Bot("super", resourcesPath);
bot.writeAIMLFiles();
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getResourcesPath() {
File currDir = new File(".");
String path = currDir.getAbsolutePath();
path = path.substring(0, path.length() - 2);
System.out.println(path);
String resourcesPath = path + File.separator + "src" +
File.separator + "main" + File.separator + "resources";
return resourcesPath;
}
}
After running the AddAiml, once you have added the new entries into the AIML, run the chat
bot program again and ask the new questions. It should give proper response.
4. Summary
In this AIML Java tutorial, we have learn to create simple command line based chatbot
program with program-ab reference application. Next time, when you have any such
requirement, you can think of AIML based chat bot. It is capable to doing moderate stuffs
easily.
Play with AIML and create more interesting conversations. AIML has many tags
which you can use, it also give some option to configure Sraix to invoke external
REST based web services.
Add your own custom placeholder in the template section and parse that from the
AIML response and do more based on your identifier in the response, like You can
able to invoke your own web service to get some more information.
Convert this command line chat program to web based chat, I am currently working
on that and will publish a followup post on that.
You can add your custom rule engine on top of your AIML response to do more.
AIML can do lots of things, but now a days much more sophisticated techniques are available
specially in the Machine Learning space, try to learn those as well.
I have deleted the Ab.jar file from this source code distribution due to the size restriction.
Please add the jar file from program-ab distribution that you have downloaded initially.
Download Java Chatbot Source Code
Happy Learning !!
TwitterFacebookLinkedInRedditPocket
Previous Tutorial:
Next Tutorial:
1. kapil singh
SIr your web based Chatbot was build or not can you plz share with us
2. botUser
April 7, 2020
I came across such problem, let’s say I added few categories, ran AddAIML program,
tested them and they work fine, then I added few more categories and ran the
AddAIML program again, the problem is that it deletes the latest categories that I
added and restores the files so that the only categories that appear there are the very
first ones that i’ve created.
An excellent article to begin with AIML. need more clarification on AIML code so
that we can customize it based on our requirement. i am looking for Web based bot.
4. Paul
5. Ananda
o Dheeraj
6. Naresh Tekmalle
7. Yogesh Katkar
how to track session if two users are concurrently chatting with bot?
8. Hariharan
9. Shubhashri
what does MagicBooleans are for?Also, what files are written and where, by the
statement ” bot.writeAIMLFiles();”??
10. Sarvesh
October 9, 2018
12. Ankit
o Vinod
January 3, 2020
Yes
Trupti
can you share how we can convert this code in web based module?
Mohamed
Hi Vinod, Can you let em know how you converted this to web ?
sharukhan
i got this error after converting this into web based…alicebot is not
working in web based module
13. Rahul
July 4, 2018
in the target folder there is two files .classpath and .project but this files not contain in
the source folder you are provided
also
when it runs it displays no main class
15. riyaz
16. Toufiq
o Defi
Hi Toufiq,
Did you find an answer. I’m too getting same error message.
Saurabh Bhatteja
o Saurabh Bhatteja
Mohamed Rizwan
Hey guys,
have you find solution for this error. I am also facing the same problem
. if anyone resolved it. please, update the method to resolve that.
Naresh Tekmalle
Guys,
March 4, 2020
March 4, 2020
17. kalyan
How can we maintain and retain (to be able to retrieve later) the state of a chat ??
Could we build the chat object through some id (session id) ??
o Naveen
Hi Kalyan,
Did you find the solution, even I am working on the same. I wanted to store
the chat session/context and retrieve later.
–Naveen
LAKSHMIPATHY M
Hi Naveen,
We can save the chat history if we are running application in eclipse
IDE
Search Tutorials
Popular Tutorials
Java 14 Tutorial
Java 8 Tutorial
Java Tutorial
Java Collections
Java Concurrency
Java Date and Time
Java Examples
Spring Boot Tutorial
Hibernate Tutorial
Jersey Tutorial
Maven Tutorial
Log4j Tutorial
Regex Tutorial
Python Tutorial