For this project, you and your group will be designing and implementing a small system in C or C++ that will simulate a primitive AI chatbot. Specifically, you will be implementing a version of ELIZA that is one of the earliest natural language processing programs. The program will simulate a conversation between the user and a psychiatrist. You should consider the program interaction as the user having an initial psychiatric interview.
Details:
- Your program will be based on C++ regular expressions that will be used for pattern matching and substitution methodology that gave users an illusion of understanding. You need to watch the video to understand the basic expectations of the program, and possible algorithms and data structures that could be implemented for this project.
- Further, you will need to utilize the . You may access it from the website (), the terminal, or an IDE of your choice. Use
- Also, as a reminder, all of the work for this project must be the sole product of the group. You may not share code with other groups, or download solutions off the internet, as doing so will be considered cheating. If you are struggling with a concept or implementation, you are encouraged to contact the instructor or your TAs for aid.
Requirements
This assignment has two parts: a wiki portion and an implementation portion.
Wiki
For the wiki portion, the group must generate documentation describing their system using the wiki functionality provided by GitLab. The wiki must contain at least one page that provides a high-level description of the entire system and must contain at least one page for each of the major functionality components (i.e. if there are six major functionality components, there should be at least six pages).
For the high-level description page, the team must provide a brief description of each of the major functionality components, how they work together, and some of the major data structures across the entire project. This information should not be copied and pasted from the project instructions. The page must also contain a diagram of the entire system, based on the one created during recitations. The diagram must be created digitally (i.e. using PowerPoint, Photoshop, Paint.net, UMLet, etc.), must be easy to read and understand, and cannot a photographed or scanned image.
For each major functionality component page, the student accountable for that component must provide a detailed description of their component. This description should have three labeled sections: a brief description of the purpose of the component, a description of how data was stored and maintained for this component, and a description of the functionality for the component. They might also consider including diagrams to more easily visualize how all of the pieces fit together.
For the data storage and maintenance section, there should be an explanation of how data was stored and maintained in their component. What, if any, objects or structs were created to store data? How were they organized and managed? What types of formal data structures did were made use of (trees, graphs, arrays, hashes, etc)?
For the functionality component, there should be an explanation of the major functions in the component. How is data moved and transformed? How is it read in? How is it output? What are the various major functions constructed and how do they work?
Descriptions and explanations should be primarily in prose and paragraph format, not bulleted lists. Code snippets are also acceptable, but must be used as an enhancement to the explanation of functionality not as a substitution for it.
Your grade for the wiki will partly be based on apparent effort, so please be thorough in your descriptions. Additionally, because this is a wiki, the high-level description page must have links to all of the major functionality component pages.
Implementation
Your program must provide the following functionality and adhere to the following constraints:
- Your int main() should be in its own .c/.cpp file
- All .c/.cpp files, except your c/main.cpp, must have associated header files. You may not #include a .c/.cpp file, only header files
- The user will use his or her natural language to interact with the system. This means that there is no specific format required from the user or menu with options that need to be selected from the user to get a response from the system. However, for this assignment, assume that the user is communicating with single sentences, common phrases or short answers like “yes”, “I do not know”, “maybe”, etc.
- Your system should respond to every user input even if invalid or non understandable :
- Read in and store answers to keep track of repeated responses to motivate the user to give a different response.
- End the program when the users types “bye”.
- Have at least 50 different type of regular expressions to match responses and respond accordingly.
- Your program must use regex to define regular expressions and then regex_match(), regex_search(), and regex_replace() to elaborate system responses.
- See the example of .
- Review the content of the following Webpages as resources: , and .
- Major functionality components must be constructed in some function, or across some functions, that are declared and defined outside of your c/main.cpp . Remember, function declarations must be stored in a header file, while definitions must be stored in a .c/.cpp file. You may have additional functions that support your major functionality component function.
- Your code must be well commented.
- Each group member should be performing regular commits to the GitLab repository server with meaningful commit Fixed bug or New code are not meaningful, so try to be more specific about what was fixed or what was added.
- You must provide a .txt format README file which includes:
- The names of all group members
- Instructions on how to compile your program
- Instructions on how to run your program
- Additionally, you may write a makefile, but please specify if it needs any additional flags to function properly.
Each student must be accountable for one or more major functionality components, and may not swap after they sign up for a component barring an exceptional circumstance. Failure to be accountable for any major functionality component will result in a 0 for the coding portions of the project (milestone submission and/or final submission). Keep in mind that some components build on others, so be careful about who takes ownership of which pieces and manage your time to avoid a crunch near the due date. Also, the group should strive to balance the work across all members.
The major functionality components are responses to user input that can be classified as containing any of the following:
- Generic verbs such have, purchase, travel, know, learn, etc.
- Love or relationships (keywords like love, spouse,girlfriend,boyfriend, etc)
- Concern ( keywords like hate, kill, suicide, etc.)
- Financial ( keywords like money, savings, investments, bankruptcy, etc.)
- Wellbeing (keywords like exercise, vitamins, relaxing, sleeping, etc).
- Education (keywords like courses, university, studying, student, education, etc. )
- Entertainment ( keywords like concert, movies,dancing, restaurant,bar, etc. )
- Others defined by group
Milestone Project Submission
Your program must provide all requested functionality for major functionality component 1, and storing user responses to detect multiple identical answers from the user and motivate to get a different response. At least one group member must submit a .zip file containing the following:
- All files necessary to compile and run your program (Please do not include any files not necessary to run the program on the CSE machines)
- A .txt format README file explaining how to compile and run your program
Final Project Submission
Your program must provide all requested functionality. At least one group member must submit a .zip file containing the following:
- All files necessary to compile and run your program (Please do not include any files not necessary to run the program on the CSE machines)
- A .txt format README file explaining how to compile and run your program
Leave a Reply
You must be logged in to post a comment.