Skip to content
Snippets Groups Projects
Commit 7c8ce53d authored by miromar's avatar miromar
Browse files

Merge branch 'jonidev' into 'main'

Made chat get answers from database.

See merge request !14
parents 291f0640 b946d256
No related branches found
No related tags found
1 merge request!14Made chat get answers from database.
...@@ -7,8 +7,7 @@ import javafx.scene.layout.BorderPane; ...@@ -7,8 +7,7 @@ import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.util.HashMap; import java.util.ArrayList;
import java.util.Map;
public class ChatViewController { public class ChatViewController {
...@@ -23,19 +22,12 @@ public class ChatViewController { ...@@ -23,19 +22,12 @@ public class ChatViewController {
@FXML @FXML
private VBox MessageVBox; private VBox MessageVBox;
DatabaseConnector db = DatabaseConnector.getInstance();
int distance = Integer.MAX_VALUE;
private final Map<String, String> chatBotResponses =
new HashMap<>() {{
put("Hi", "Hello!");
put("How are you?", "I'm good, thanks for asking. How about you?");
put("What's your name?", "I'm a chatbot. What's yours?");
put("Hello", "Hello!");
}};
//Check for spelling using Levenshtein Distance Computing Algorithm //Check for spelling using Levenshtein Distance Computing Algorithm
private static int levenshteinDistance(String s1, String s2) { private static int levenshteinDistance(String s1, String s2) {
s1 = s1.toLowerCase();
s2 = s2.toLowerCase();
int[][] dp = new int[s1.length() + 1][s2.length() + 1]; int[][] dp = new int[s1.length() + 1][s2.length() + 1];
for (int i = 0; i <= s1.length(); i++) { for (int i = 0; i <= s1.length(); i++) {
for (int j = 0; j <= s2.length(); j++) { for (int j = 0; j <= s2.length(); j++) {
...@@ -64,19 +56,22 @@ public class ChatViewController { ...@@ -64,19 +56,22 @@ public class ChatViewController {
MessageVBox.getChildren().add(text); MessageVBox.getChildren().add(text);
MessageField.clear(); MessageField.clear();
String DefaultResponse = "Sorry I didn't understand your question" + " Here are some questions I know how to answer: \n" + chatBotResponses.keySet(); ArrayList <QA> qas = db.fetchAllData();
//Determine the strictness of the algorithm, smaller number means more strict
int inputStrictness = 4;
for (Map.Entry<String, String> entry : chatBotResponses.entrySet()) { String chatBotResponse = "Sorry I didn't understand your question.";
int currentDistance = levenshteinDistance(entry.getKey(), message);
if (currentDistance < distance) { for (QA qa: qas) {
distance = currentDistance; int newDistance = levenshteinDistance(message, qa.getQuestion());
DefaultResponse = entry.getValue(); if (newDistance < inputStrictness) {
inputStrictness = newDistance;
chatBotResponse = qa.getAnswer();
} }
} }
Text textResponse = new Text("ChatBot: " + DefaultResponse); Text textResponse = new Text("ChatBot: " + chatBotResponse);
MessageVBox.getChildren().add(textResponse); MessageVBox.getChildren().add(textResponse);
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment