All Necessary Software

requirements.txt

Necessary Tools and Libraries

Frontend
REACT

REACT is the frontend framework used to build the web application for our project. This framework allows for intuitive and dynamic front facing web pages that can change based on user input and the device the user is utilizing to access the web application. REACT was chosen for its ease of use and simplicity; allowing for development of a website that can be simple to use and navigate.

Bootstrap

Boostrap is a popular open source web development framework our project utlizes to create more professional, dynamic visuals for better user interactions. The templates and classes allow for a more responsive and easier user experience.

Backend
FastAPI

This API allows for the infrastructure and setup of the web server for our project. By using this API, prebuilt HTTPS functions can be used to set up API endpoints that the frontend application can ping to send/receive information quickly. FastAPI is just that, fast, and works particularly well with machine learning models so it is a perfect fit for our project which utilizes machine learning to make suggestions.

AWS EC2

Amazon Web Services Elastic Compute Cloud is the cloud service we have chosen to host our application so it is publically accessible.

Docker

Docker is a software that allows for virtualization for our project. We use Docker to containerize our project and allows us to run all of our endpoints synchronously with the most correct packages and seamless communication between our images when hosting our project in a cloud service.

AWS RDS

Amazon Web Services Relational Database is the cloud service we have chosen to host our user data in a SQL database.

Yelp Fusion API

This API gives access to relevant information about restaurants. After the user inputs their dining preferences, data like location, distance, and price range. The API will return the top most relevant 50 or less restaurants and data about them, such as their yelp website, cuisine types, and location. The outputted website will then be scraped to get more information about the restaurant. These restaurants and their data will then go to the machine learning algorithm. This API was chosen because it has the most extensive, detailed list of restaurants and is free to use.

AWS Lambda

Amazon Web Services Lambda is the cloud service we have chosen to host an automated version of the Selenium Webscraping, so it does not have to take up space locally and can automatically occur at a set interval, so our project is consistently using the most up-to-date restaurant data and user reviews.

Selenium Webdriver

This framework is used to collect the necessary data to be fed to the machine learning algorithm. The data collection occurs in development, not during user interactions. Using the json data from an API call, Selenium opens a Chrome browser to that restaurant’s Yelp webpage. Selenium searches for predefined keywords on that webpage and updates our restaurant database to indicate whether keywords were found. This helps to determine the atmosphere of the website. The Selenium Webdriver also searches the reviews for each restaurant. The search terms include the occasions and allergies a user can enter. The webdriver finds reviews with those keywords, then does sentiment analysis (see Vader) on the review to determine if the user would return to the restaurant. This information is stored in a database and used as training data for the machine learning algorithm.

Vader Sentiment Analysis

The reviews that are scraped (see above) are analyzed and receive a score. This score determines whether the user would return to the restaurant, based on keywords.

AWS Comprehend

Amazon Web Services Comprehend is the sentiment analysis framework we have chosen to do the same as Vader, but when the scraping occurs on Lambda instead of locally.

Machine Learning
XGBoost

XGBoost is used to import the decision tree portion of our machine learning algorithm. This API allows for easy setup and use of machine learning models by having them prebuilt and ready to go after import. All that needs to be done once the model is imported is to load it in and fit it with the correct data formatted and encoded. XGBoost was picked for the decision tree model due to its efficiency and speed in training/returning predictions based on user input.