GithubHelp home page GithubHelp logo

jflick58 / extemp-assist Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 0.0 279 KB

Full-featured search engine for summarized news sources for use in competitive Extemporaneous speaking.

License: Apache License 2.0

Dockerfile 4.33% Python 51.44% Shell 1.20% HTML 2.81% JavaScript 39.76% Makefile 0.45%
python nlp react search extemp speech-and-debate

extemp-assist's Introduction

Project logo

Extemp Assist


Fully-Featured search app for curated news summaries for competetive Extemporaneous speaking.

๐Ÿ“ Table of Contents

๐Ÿง About

What is extemp?

Extemporaneous speaking (extemp) is a competitive Speech and Debate event practiced at various levels from middle school to college. Speakers are given a question surrounding current events and are given 30 minutes to prep a seven minute speech. Speakers must cite the sources they referred to during their prep time, and national finalists can cite upwards of 20 sources in one speech.

Thus, effecient use of prep time is one of the competetive factors that seperate good extempers from not-so-great extempers. Finding high-quality sources, ability to quickly filter information, and ability to summarize lengthy articles are some of the skills extempers hone to become the best in their event.

So how does this tool "assist" extempers?

Great question! This tool:

  • Parses a curated group of RSS feeds from high-quality sources every morning
  • Using Natural Language Processing, the content of the articles in the feed are summarized into 5 sentences or less.
  • The source information and summary are indexed into ElasticSearch.
  • Users can then interact with the Search webapp to search for relevant articles, and filter with fully-feature filtering.

Why not use Google?

Google is definetly what most of think of when we think "search". However, one must wade through sometimes irrevelant articles from low-quality sources that happen to be good at SEO. Extempers also have to skim through entire articles which can reduce the amount of sources they can cover in a limited time.

What about the paid tools? Why use this?

There are a few paid tools out there that offer a far more complete feature set than this tool. Due to the limited time I have to develop this tool, it is currently focused on the source management aspect of extemp software.

While I support folks making money off of their labor, this tool is a labor of love for the community and not intended to be something I profit off of. If you belive in the philosphy of open source software, then perhaps you'll consider using this tool.

โ›๏ธ Built Using

List the core languages/frameworks used, e.g.:

๐Ÿ Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

Prerequisites

  • Docker installed
  • An ElasticSearch AppSearch Cloud host and token (14 day free trial available, or you can self-host as well)

Installing

Scraper Batch Job

Download the code and unzip. Navigate to the rss_scraper directory and run

make local

This will install the required dependencies in a local environment in your directory.

Web App

I've found it works best in a docker container.

Add your host and token to src/config/engine.json

Then build your dockerfile with docker build -t search:dev .

You can also run npm install but I've had some conflicts with a brew-installed version of Node on MacOS.

๐ŸŽˆ Usage

Local Scraper

To run the code, you'll want to set some environment variables. Run the following before you run the scraper locally:

export ES_HOST=<your host>
export ES_TOKEN=<you es private token>

Then you can run the following:

python rss_scraper/rss_to_elasticsearch.py

This will run the code and push it up to ElasticSearch

WebApp

You can either run it via the Docker container with: docker run -p 3000:3000 search:dev

or run npm start. Either way, once it's up you can access the UI at localhost:3000

๐Ÿš€ Deployment

To deploy the entire tool, you will need to setup a GCP account.

  1. Create a new project. Store that project id as a Github secret PROJECT_ID.
  2. Create a new service account with the following permissions:
    • Container Registry Service Agent
    • Service Account User
    • Cloud Run Admin
    • Storage Admin
  3. Create a service account key for the new account, save the JSON, and store it as a Github secret secrets.GCP_SA_KEY
  4. Create Github secrets for your ES_HOST and ES_TOKEN, respectively.
  5. Create a new Cloud Run service in GCP called "extemp-assist-rss", for now, use the sample container. Set the invoke permissions to internal only, and do not allow unathenticated invocation.
  6. Go to GCP Cloud Scheduler. Create a job with the following cron rule: 0 4 * * * to run it everyday at 4 AM. Retrieve the URL from step 5 and use that as a HTTP target.
  7. Create another GCP Cloud Run service, called "extemp-assist-ui". Allow all incoming connections and unathenticated invocations.
  8. Use main.yml file in .github/workflows as your Github Actions template and deploy using a Github action.

๐Ÿ–ฅ Screenshots

extemp-assist's People

Contributors

jflick58 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  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.