Git Product home page Git Product logo

antcheck's Introduction

AntCheck Created by Julian Zulfikar, December 2022. https://antcheck.pythonanywhere.com/

Purpose ๐Ÿ“‹

Courses and prerequisites can be very overwhelming for students, which is why the goal of this project is to provide an improved user experience when it comes to browsing the catalogue and selecting the correct order in which they should enroll in their classes!

AntCheck takes a given set of UCI classes that you intend to take -- could be in the current schoolyear or throughout your entire career.

The user is then given an ordering of classes that they are able to take such that no prerequisites requirements are violated.

The program also warns the user if they did not include a required prerequisite in their input. For example, if a student is looking to take CS 161 and they input {ICS 46, ICS 6D, CS 161}, the program would warn them of 161's ICS 6B & Math 2B requirement. You'll never miss a prerequisite again!

The search engine also provides a swift and easy way for students to browse through UCI's catalogue of over 5900 classes. The results are ranked in order of relevancy by TF-IDF score.

Screenshots

As of 11-23: Home Home Functionalities Generate About

How It Works ๐Ÿง 

The user inputs a set of classes they are looking to take. From there, a directed graph is initialized with edges representing courses that must be taken beforehand.

A topological sort is then performed on such graph, returning a sorted order of classes that can be taken where prerequisites are not violated.

To easily retrieve information on how classes are related to each other, the program stores an index keeping track of course titles, descriptions, prerequisites, etc. The search engine relies on an inverted index, which uses words/tokens as search keys instead of courses.

Optimizations ๐Ÿš€

You may be wondering: if the graph of classes has to be formed on the fly, wouldn't the program be very slow & take a lot of API requests?

Previously, (prior to July 2023) the program used the PeterPortal API to find prerequisite links, however, this was a major bottleneck due to the reason above. The optimization made to combat this issue was to memoize/cache every call, thus building an index as the program ran.

As of now, a web-crawler has been built which goes through every course page of each department. The data of each course is then collected, and thus, we quickly retrieve any information we need through an index.

How To Use ๐Ÿ’ป

Directions and sample input files are provided. Actively seeking for ways to optimize user experience.

As of 12-8-2022, in the Python Shell version, the user is able to manually input classes one-by-one, input it via CSV one-liner, or a file input (demonstrated by sample_input.txt).

As of 12-10-2022, a localhost website is available.

As of 7-3-2023, a search engine implementation has been applied.

As of 7-4-2023, ZotPlanner has been deployed for demonstration: https://zotplanner.pythonanywhere.com/

As of 11-23-2023, ZotPlanner has been rebranded to AntCheck! Deployment will be coming soon.

Files ๐Ÿ“

Each file is well-documented with summaries at the top.

index.py: Crawls through UCI's courses and builds an index for easy look-up

query.py: Retrieves information from the index of courses

graph.py: Hash-map adjacency list of a graph implementation

main.py: run() function, creates a topological sort of given classes

search.py: query_catalogue() function, serves as algorithm for search engine

app.py: Utilizes Flask framework for website implementation

Conclusion ๐Ÿ‘‹

Open to suggestions, feel free to contact me whenever!

antcheck's People

Contributors

julian-z avatar

Stargazers

Manjot Singh avatar Alvin Phan avatar

Watchers

Alvin Phan avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.