Finding a carpool should be easy. By being able to put a price per seat on a ride it incentives those with cars to share their space, cutting down on CO2 emissions and making some money on the side. With a plethora of Facebook rideshare pages, Craigslist, and the "official" UCSB Zimride app, the greatest barrier to the modern rideshare market is not influence, but uniformity and ease of access. By organizing disorganized text date into an organized structure with a fixed schema, a single platform would be able to integrate the many sources of rideshare listings into a one-stop-shop.
What it does
Find-A-Ride scrapes the NorCal and SoCal rideshare Facebook pages and makes sense of the diverse, often confusing syntax of describing a trip. After deciding the intent behind the post (Driver or Passenger), the major entities behind the ride are compiled into a structured database, including "Origin", "Destination", "Price", "Seats Available", and "Trip Date". Having compiled a log of all existing rides, a Find-A-Ride user enters in his/her desired trip parameters and are paired up with a list of trips sorted by relevancy.
How we built it
The data was scraped from Facebook using Selenium. The posts are classified into either "Driver" or "Passenger" categories using a simple RandomForest model. Then, using a Bidirectional LSTM and annotated data, the components of the post are broken up into discrete data and uploaded to BigQuery. The Google Geocoding API is used to transform location strings into coordinates. A Flask-API handles requests coming from a Java application on Android Studio. Fuzzy-matching logic is used to calculate what a "similar" trip is, using haversine distance between the coordinates and date/time of day differences to determine relevancy.
Challenges we ran into
Choosing a framework to develop the Named Entity Recognition model was difficult. We began using TensorFlow, but opted instead to use the more NLP-specific Spacy. As we were new to building Java apps that communicate with APIs, getting Android Studio to receive the json response from Flask was also tough.
Accomplishments that we're proud of
This was all of our group members' first time at a hackathon, really happy to have completed a project! Also excited to see where else we can take the models we have in place (i.e. Craigslist, Zimride, etc.)
What we learned
We learned alot about dividing work amongst people with diverse backgrounds. We also learned just how big the rideshare community is, especially here at UCSB.
What's next for Find-A-Ride
We hope to continue developing better models for extracting discrete data from rideshare posts to provide students with ease of access to carpool resources.