这里是初学者。从我的AI Java项目收到“空”响应

时间:2019-08-26 01:44:13

标签: java

当我回答“是”以确认我确实要聊天后,此后每个响应都将得到“ null”。

没有尝试太多。在我尝试添加iFeelGenericResponse之前,代码是很棒的,所以我会说那里可能有问题。我还应该提到我只是从这个开始,所以这可能是一些明显的错误。我感谢所有帮助!

    /*
Program: Eliza 
Author: J. Gurka
Date: August 2019

Description: This program "talks" to a human in a fashion similar to a psychologist.

Reference: Based on the original Eliza program by Joseph Weisenbaum.  See "Eliza" on 
Wikipedia for history of the program and its importance in AI.

Assumptions and limitations:
1. Many limitations due to the complexity of natural language processing.
2. Punctuation is not handled well.
3. Contractions can cause problems.
4. Eliza doesn't "know" anything.
*/

import java.io.File;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Random;

public class Eliza {

   private boolean talkSessionRequested;
   private Scanner talkScanner;
   private ArrayList<String> genericAnswers, iFeelGenericAnswers;
   private int genericCount;
   private Random randomGenerator;
   private String userName, userAnswer, ElizaAnswer;

   public Eliza () {
      // set-up
      genericAnswers = new ArrayList<String>(20);
      genericCount = 0;
      randomGenerator = new Random();
      loadGenericAnswers();
      talkScanner = new Scanner(System.in);
      // "i feel" generic answers
      iFeelGenericAnswers = new ArrayList<String>(20);
      loadIFeelGenericAnswers();
   }

   private void loadGenericAnswers() {
      // read answers for Eliza responses
      Scanner genericScanner = null; 
      try {
         genericScanner = new Scanner(new File("generic_answers.txt"));
         while (genericScanner.hasNext()) {
            genericAnswers.add(genericScanner.nextLine());
            genericCount++;
         }
      }

      catch (Exception ex) {
         System.out.println("Error reading generic answers, program ending.");
         System.exit(1);
      }
      genericScanner.close();
   }

   private void loadIFeelGenericAnswers() {
      // read answers for Eliza responses
      Scanner iFeelGenericScanner = null; 
      try {
         iFeelGenericScanner = new Scanner(new File("i_feel_generic_answers.txt"));
         while (iFeelGenericScanner.hasNext()) {
            iFeelGenericAnswers.add(iFeelGenericScanner.nextLine());
            genericCount++;
         }
      }

      catch (Exception ex) {
         System.out.println("Error reading i feel generic answers, program ending.");
         System.exit(1);
      }
      iFeelGenericScanner.close();
   }

   public void introduceEliza() {
      System.out.println("-----------\n");
      System.out.println("Welcome to Eliza, one of the earliest programs to talk to the user.");
      System.out.println("It was first written in the 1960's by Joseph Weisenbaum\n"
                         + "to investigate AI and natural language processing.\n");
      System.out.println("Eliza is designed to interact with a user like a psychologist,");
      System.out.println("asking questions and responding to the answers.\n");
      System.out.println("Is Eliza intelligent?  You decide ...");
      System.out.println("\n-----------\n");
   }

   public void startConversation() {

      boolean talkRequested;

      System.out.println("Hi, I'm Eliza. What's your name?"); 
      System.out.print("You > ");
      userName = talkScanner.nextLine();
      System.out.println("Hi, " + userName + "!  Want to chat for awhile?");
      System.out.print(userName + " > ");
      userAnswer = talkScanner.nextLine(); 

      if ((userAnswer.length() >=3 &&
             userAnswer.substring(0, 3).equalsIgnoreCase("yes")) ||
          (userAnswer.length() >=2 &&
             userAnswer.substring(0, 2).equalsIgnoreCase("ok"))) {
         talkSessionRequested = true;
      }
        else {
         talkSessionRequested = false;   
      }
   }

   public void talk () {

      System.out.println("Eliza > How are you today?");
      System.out.print(userName + " > ");
      userAnswer = talkScanner.nextLine();
      do {
         // parse user answer and respond appropriately
         if (userAnswer.length() >= 4 &&
             userAnswer.substring(0,4).equalsIgnoreCase("I am")) {
            ElizaAnswer = "Why are you " + userAnswer.substring(5) + "?";

         }
           else if (userAnswer.contains("sister")   ||
                    userAnswer.contains("brother")  ||
                    userAnswer.contains("mother")   ||
                    userAnswer.contains("father")     ) {
            ElizaAnswer = "Tell me more about your family.";                    
         }
            else if (userAnswer.length() >= 2 &&
                     userAnswer.substring(0,2).equalsIgnoreCase("no")) {
            ElizaAnswer = "Don't be so negative.";
         }      
            else if (userAnswer.length() >= 3 &&
                     userAnswer.substring(0,3).equalsIgnoreCase("yes")) {
            ElizaAnswer = "Good, you are being positive.";
         }

            else if (userAnswer.length() >= 6 &&
             userAnswer.substring(0,6).equalsIgnoreCase("I want")) {
            ElizaAnswer = "Why do you want " + userAnswer.substring(7) + "?";
         }

           else if (userAnswer.length() >= 7 &&
             userAnswer.substring(0,7).equalsIgnoreCase("I think")) {
            ElizaAnswer = "Why do you think " + userAnswer.substring(8) + "?";
         }

           else if (userAnswer.contains("job")      ||
                    userAnswer.contains("work")  ||
                    userAnswer.contains("occupation")   ||
                    userAnswer.contains("profession")     ) {
            ElizaAnswer = "Tell me more about your job.";                    
         }

           else if (userAnswer.length() >= 6 &&
             userAnswer.substring(0,6).equalsIgnoreCase("I feel")) {
            ElizaAnswer = iFeelGenericAnswers.get(randomGenerator.nextInt(genericCount));
         }

           else {
         }

         if (!userAnswer.equalsIgnoreCase("bye")) {
            System.out.println("Eliza > " + ElizaAnswer);
            System.out.print(userName + " > ");
            userAnswer = talkScanner.nextLine();
         }

      } while (!userAnswer.equalsIgnoreCase("bye"));       // end main talk loop   

      System.out.println("Eliza > See you later ...");

   }  // end talk method

   public static void main (String args[]) {

      Eliza myEliza = new Eliza();
      myEliza.introduceEliza();
      myEliza.startConversation();

      if (myEliza.talkSessionRequested) {
         myEliza.talk();
      }
        else {
         System.out.println("Eliza > OK, maybe tomorrow.  Bye, bye!");
      }
   }  // end main method

}  // end Eliza

0 个答案:

没有答案